我试图想出一个分而治之的算法来合并j个排序列表和n个元素但是我被卡住了;我不知道如何将这个问题分成更小的子问题。我希望合并算法的效率更高:
合并前两个列表;然后将结果列表与第三个列表合并;然后将结果列表与第四个列表等合并,后者取O(j * jn)。
答案 0 :(得分:0)
你可以在O(j * log(j)n)时间内完成它
while(n!=1)
for i=0 to n/2
merge list(i) with list list(n)
n = n/2
这样你将整个组合成成对,然后成对配对等等
答案 1 :(得分:0)
不确定为什么你需要分而治之才能实现这一目标。您可以创建一个无序的大列表然后使用内置排序来排序大型列表,这将是O(jn * Log(jn))
List<int> returnList(List<List<int>> lists)
{
List<int> ret = new List<int>();
for(int i=0;i<lists.Length;i++)
{
for(int j=0;j<lists;j++)
{
ret.Add(lists[i][j]);
}
}
ret.Sort();
}
答案 2 :(得分:0)
这与标准合并排序没有什么不同。考虑一个包含未分类项目的大小jn
的列表。在大小log(n)
项列表的jn
次合并排序后,您将在每个列表中包含j
个排序列表,其中包含n
个项目。所以继续使用合并排序来解决您的问题。
请查看合并排序,这是一种分而治之的算法,并了解它。然后你就可以轻松解决这个问题了。