每个元素随机数的列表列表,如何在同一列中对齐相同的元素?

时间:2014-02-07 08:16:01

标签: algorithm language-agnostic

如果您有每个随机数随机数的列表列表,您将如何创建一个矩阵,使相同的元素出现在同一列中?

每行至少有一个元素/列,但不同的行可以有不同数量的元素/列。每行最多出现一次。

元素不必保留其原始列,但应在结果矩阵中与原始列的距离最小。

输入中元素y之前出现的每个元素x也必须出现在输出中的y之前。

例如:

a|c
a|b|c
c|e
a|d|e
b|d

之后应该是这样的:

a| |c| | 
a|b|c| | 
 | |c| |e
a| | |d|e
 |b| |d|

这只是一个简单的例子,应该涵盖任何正数的列和每列的正数元素。

什么是有效的算法?

1 个答案:

答案 0 :(得分:1)

浏览数据一次,构建一个图形,其中每个元素都是一个节点,每个元素和直接出现在该元素之后的元素之间应该有一个有向边。

然后执行图表的topological sort

  

有向图的拓扑排序或拓扑排序是其顶点的线性排序,使得对于从顶点u到顶点v的每个有向边uv,u在排序中位于v之前。例如,图的顶点可以表示要执行的任务,并且边可以表示一个任务必须在另一个之前执行的约束;在这个应用程序中,拓扑排序只是任务的有效序列。

这将返回一个有序的元素列表,这些元素将对应于元素到列的排序。