如果您有每个随机数随机数的列表列表,您将如何创建一个矩阵,使相同的元素出现在同一列中?
每行至少有一个元素/列,但不同的行可以有不同数量的元素/列。每行最多出现一次。
元素不必保留其原始列,但应在结果矩阵中与原始列的距离最小。
输入中元素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|
这只是一个简单的例子,应该涵盖任何正数的列和每列的正数元素。
什么是有效的算法?
答案 0 :(得分:1)
浏览数据一次,构建一个图形,其中每个元素都是一个节点,每个元素和直接出现在该元素之后的元素之间应该有一个有向边。
然后执行图表的topological sort:
有向图的拓扑排序或拓扑排序是其顶点的线性排序,使得对于从顶点u到顶点v的每个有向边uv,u在排序中位于v之前。例如,图的顶点可以表示要执行的任务,并且边可以表示一个任务必须在另一个之前执行的约束;在这个应用程序中,拓扑排序只是任务的有效序列。
这将返回一个有序的元素列表,这些元素将对应于元素到列的排序。