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_Mergesort - Fatal编程技术网

Algorithm 任意大小的两个排序列表的奇偶合并

Algorithm 任意大小的两个排序列表的奇偶合并,algorithm,sorting,mergesort,Algorithm,Sorting,Mergesort,我有以下场景:我得到了两个(以前)排序的数字序列,我需要使用合并网络(如batcher)将它们合并。然而,这些网络设计用于2^k大小的序列,这不是我的情况 有人能建议一种方法吗?理想情况下,不需要强制列表的大小为2的倍数(例如,在开始处添加零).您的输入数组大小为x,如果不是2t格式,则为:2t

我有以下场景:我得到了两个(以前)排序的数字序列,我需要使用合并网络(如batcher)将它们合并。然而,这些网络设计用于2^k大小的序列,这不是我的情况


有人能建议一种方法吗?理想情况下,不需要强制列表的大小为2的倍数(例如,在开始处添加零).

您的输入数组大小为x,如果不是2t格式,则为:2t
  • 用-99999或99999填充,在最终结果中忽略99999的尾部

  • 使用null填充,并在每次比较中允许在try-catch异常语句中丢失null。根据您的语言,您可能仍然需要从数据结构中去掉空值的尾部

  • 编辑:


    有一种方法不使用填充值,但需要多次合并。例如,合并两个列表的一个子集,然后将其中一些数字与第一次遗漏的数字混合,然后再次合并两个列表,然后合并上半部分和下半部分。。打字。。有点乱。

    我想你有两个选择,但我可能错了:

  • 用-99999或99999填充,在最终结果中忽略99999的尾部

  • 使用null填充,并在每次比较中允许在try-catch异常语句中丢失null。根据您的语言,您可能仍然需要从数据结构中去掉空值的尾部

  • 编辑:


    有一种方法不使用填充值,但需要多次合并。例如,合并两个列表的一个子集,然后将其中一些数字与第一次遗漏的数字混合,然后再次合并两个列表,然后合并上半部分和下半部分。。打字。。有点乱。

    将网络取为大于输入大小的最小二次方,并删除所有涉及不存在元素的比较器。

    将网络取为大于输入大小的最小二次方,并删除所有涉及不存在元素的比较器。

    为什么不喜欢附加某些内容在你的名单上?这不是一项耗时的工作。我要处理的序列非常大,而且我的内存有限。所以假设N(我的项目总数)不是2的幂(假设它是2^(t)-1来解释最坏的情况),我将不得不向我的列表中添加2^t+1个元素,这可能是一个非常大的数字。如果它是2^(t)-1,你应该添加一个数字,但总的来说,你最多应该添加两个时间数(你也可以不添加它,将超出范围的数字视为非常大的数字)所以在初始化时将其慢两倍并不坏。为什么你不喜欢在列表中添加一些内容?这不是一项耗时的工作。我处理的是非常大的序列,而且我的内存有限。所以…假设N(我的项目总数)不是2的幂(假设它是2^(t)-1以说明最坏的情况),我必须将2^(t)-1元素添加到我的列表中,这可能是一个非常大的数字。如果它是2^(t)-1,您应该添加一个数字,但在所有情况下,您最多应该添加两个时间数字(也可以不添加它,并将超出范围的数字视为非常大的数字)因此,在初始化过程中使其慢两倍并不坏。谢谢!这与前面的人所建议的非常相似。但是正如我在上面的评论中提到的,我之所以避免添加新元素是因为我可能(潜在地)必须添加大量项目,而我没有足够的内存。只有当前使用超过一半的内存时,您的内存才会耗尽,这似乎不太可能。我想我还有另一个答案要给您,我将很快发布。感谢您考虑一下。我工作的设置实际上有点复杂我想解释一下,但它的简化版本是“我必须避免添加新项目”:)在阅读了更多内容后,我几乎确信不可能合并这两个列表(使用奇偶合并)如果它们的元素数之和不是2的幂。啊,这很难,抱歉,伙计。我没有解决方案。别担心!我会继续努力,如果我最终找到了一些东西,我会在这里发布。谢谢!这与前一个人的建议非常相似。但是正如我在上面的评论中提到的,我避免添加的原因添加新元素是因为我可能(潜在地)必须添加大量项目,而我没有足够的内存。只有当前使用超过一半的内存时,您的内存才会耗尽,这似乎不太可能。我想我还有另一个答案要给您,我将很快发布。感谢您考虑一下。我工作的设置实际上有点复杂我想解释一下,但它的简化版本是“我必须避免添加新项目”:)在阅读了更多内容后,我几乎确信,如果这两个列表的元素数之和不是2的幂,则不可能合并这两个列表(使用奇偶合并)。啊,很抱歉,伙计。我没有办法给你。别担心!我会继续努力,如果我最终有什么想法,我会在这里发布。