首页 > 解决方案 > 呈现易于阅读的组合的算法

问题描述

鉴于要购买的产品/计算机列表,我想向客户简要介绍可能的规格组合。

我的输入(在下图中的左侧)是一个组合列表。所需的输出(在下图中的右侧)是图形表示。

数据量有限,因此性能并不重要

问题

有没有一种算法或方法可以帮助我产生这个?

在此处输入图像描述

编辑:更新的图像

标签: algorithmcombinationscombinatorics

解决方案


我相信 PostgreSQL 中的答案会是这样的:

-- CREATE TABLE computer(
--   size VARCHAR (50),
--   ram VARCHAR (50),
--   hdd VARCHAR (50)
-- );

SELECT size as size, 
  STRING_AGG(DISTINCT(ram), '\n') as ram, 
  hdd as hdd 
  FROM (
    SELECT size as size, 
      STRING_AGG(DISTINCT(ram), '\n') as ram, 
      STRING_AGG(DISTINCT(hdd), '\n') as hdd 
      FROM computer 
      GROUP BY size, ram
    ) AS result 
  GROUP BY size, hdd;

在这个子查询中,我们按大小和内存分组,因为据我所知,一行中总是有一个大小,我们总是可以折叠硬盘。可能是某些 ram 是相等的,所以现在我们按 hdd 分组以折叠这些 ram,并按大小分组以保持它们的唯一性。

我希望这是有道理的并回答你的问题。


推荐阅读