Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 多个列表的排序组合_Algorithm_Sorting - Fatal编程技术网

Algorithm 多个列表的排序组合

Algorithm 多个列表的排序组合,algorithm,sorting,Algorithm,Sorting,将L1、L2、L3视为分别按排序顺序包含n1、n2和n3整数的列表 任务是构造一个排序列表L,这样 L[0] = L1[0] + L2[0] + L3[0] L[i] = L1[i1] + L2[i2] + L3[i3] L[n1 * n2 * n3] = L1[n1] + L2[n2] + L3[n3] L[0]=L1[0]+L2[0]+L3[0] L[i]=L1[i1]+L2[i2]+L3[i3] L[n1*n2*n3]=L1[n1]+L2[n2]+L3[n3] 但是n1,n2,n3都非常大

将L1、L2、L3视为分别按排序顺序包含n1、n2和n3整数的列表

任务是构造一个排序列表L,这样

L[0] = L1[0] + L2[0] + L3[0] L[i] = L1[i1] + L2[i2] + L3[i3] L[n1 * n2 * n3] = L1[n1] + L2[n2] + L3[n3] L[0]=L1[0]+L2[0]+L3[0] L[i]=L1[i1]+L2[i2]+L3[i3] L[n1*n2*n3]=L1[n1]+L2[n2]+L3[n3] 但是n1,n2,n3都非常大,因此L不能一次构建然后排序

因此,该列表将分阶段构造,这样我们可以显示k个顶部整数,并通过计算第[k+1]个顶部整数来保存要恢复的计算状态


所有的数据结构和算法都可以用来实现这一目标吗?

既然已经有了三个排序列表,您就不能使用一个修改过的列表吗?(我所说的“修改”是指利用您知道每个输入列表已经排序这一事实的东西。)


假设您不能直接使用合并排序,因为您不想在内存中计算整个新合并的排序列表,那么您可以这样做:使用修改后的合并排序,计算第一组合并条目并显示它们,同时维护合并排序中使用的指针。您只需在每个列表中保留您所在的位置,每个列表中一个指向当前位置的指针,然后选择每个块的结束位置。

既然您已经有三个已排序的列表,您就不能只使用一个已修改的吗?(我所说的“修改”是指利用您知道每个输入列表已经排序这一事实的东西。)


假设您不能直接使用合并排序,因为您不想在内存中计算整个新合并的排序列表,那么您可以这样做:使用修改后的合并排序,计算第一组合并条目并显示它们,同时维护合并排序中使用的指针。你只需坚持你在每个列表中的位置,一个指针指向每个列表中的当前位置,然后选择你在每个块上留下的位置。

好的,这个答案可能会激怒我。但是,由于您只需要算法,最好的解决方案是同时遍历每个列表,并使用最佳元素(在本例中是较低的元素,或者您喜欢的并列元素)构建结果列表。 使用此方法,您有4个位置,每个列表对应一个位置,最后一个点可以指向结果列表中需要插入的位置(或插入的最后一个位置)。有了它,您所需要的唯一结构就是一个列表


在这种情况下,我发现合并排序有问题。您显示的数据可能不是准确的数据(因为您需要对下一部分进行排序,并且可以与当前部分合并)。

好的,这个答案可能会激怒我。但是,由于您只需要算法,最好的解决方案是同时遍历每个列表,并使用最佳元素(在本例中是较低的元素,或者您喜欢的并列元素)构建结果列表。 使用此方法,您有4个位置,每个列表对应一个位置,最后一个点可以指向结果列表中需要插入的位置(或插入的最后一个位置)。有了它,您所需要的唯一结构就是一个列表


在这种情况下,我发现合并排序有问题。您显示的数据可能不是精确的数据(因为您需要对下一部分进行排序,并且可以与当前部分合并)。

好的,首先是两个维度的示例:

1 2 3 1 2 3 4 5 6 7 8 7 8 9 10
目前我看没有更好的办法了。堆似乎需要大量节点,其大小为n1、n2和n3之和。

好的,首先是两个维度的示例:

1 2 3 1 2 3 4 5 6 7 8 7 8 9 10 目前我看没有更好的办法了。堆似乎需要许多节点,其大小为n1、n2和n3之和