将已排序的子列表合并到已排序的超级列表

时间:2016-10-10 09:18:20

标签: java algorithm list sorting sortedlist

我有一个n个排序列表的列表,每个列表包含m个元素(字符串)。这些元素来自具有我不知道的不同顺序的List。我所知道的是,所有子列表都维持元素的全局顺序。这些名单并不是不相交的。列表的并集是原始列表的子集。

现在,我正在努力寻找一种能够有效地将它们组合回List(列表)并且具有最大排序精度的算法。

这样的问题是否有解决方案?

我正在使用Java,这里有一些示例代码:

List<List<String>> elements = new ArrayList<>();

elements.add(Lists.newArrayList("A","D","F"));
elements.add(Lists.newArrayList("B","D","E"));
elements.add(Lists.newArrayList("A","B","G"));
elements.add(Lists.newArrayList("C","D","H"));

// the required method
List<List<String>> sorted = sortElements(elements);

/* expeced output:
 * [["A"],["B"],["C"],["D"],["G","F","E","H"]]
 */

1 个答案:

答案 0 :(得分:4)

您正在寻找topological sorting

您的初始列表代表有向图弧(A-> D,D-> F等)

P.S。 俄罗斯文献“Demoucron算法”中称为特殊类型的拓扑排序,以便按级别明确划分节点,但我没有找到正确的英文描述(找到平面图绘制文章的链接)

其工作实例:

enter image description here

enter image description here