算法 - 组合多个列表,产生唯一列表和保留顺序

时间:2010-04-28 07:48:18

标签: vb.net list sorting

我想将多个项目列表合并到一个列表中,保留整体订单要求。即:

1: A C E
2: D E
3: B A D

result: B A C D E

以上,从列表1开始,我们有ACE,然后我们知道D必须在E之前,而从列表3,我们知道B必须在A之前,D必须在B和A之后。

如果订单存在冲突,则应使用第一个订购。即

1: A C E
2: B D E
3: F D B

result: A C F B D E 

3与2(B D vs D B)冲突,因此将使用2的要求。

如果订购要求意味着某件商品必须在另一件商品之前或之后,则无论是在订单之前或之后,还是在列表的开头或结尾,都无关紧要,只要保持整体订购。

这是使用VB.Net开发的,所以LINQy解决方案(或任何.Net解决方案)会很好 - 否则指针的方法会很好。

编辑:编辑以使示例2有意义(最后一分钟的更改使其无效)

1 个答案:

答案 0 :(得分:3)

您可能感兴趣的关键字是“拓扑排序”。基于此的解决方案如下所示:

  • 创建一个空的有向图。
  • 按顺序处理序列,对于序列中的每两个连续元素X,Y,向图中添加边X-> Y,除非这会形成一个循环。
  • 对图形的顶点执行拓扑排序。结果序列应满足您的要求。