当前位置: 首页 > 知识库问答 >
问题:

外部排序和外部合并之间的区别

艾弘义
2023-03-14

我在postgresql里看到有两个独立的算法叫做外部排序和外部合并进行排序。我觉得两者是一样的。据我所知,外部排序是一个排序算法的集合,当整个批次无法在内存(RAM)中排序时,它处理大量数据的排序,并有两个阶段,第一阶段是对小块数据进行排序并将其存储在临时文件中,第二阶段是合并所有这些子文件以获得最终数据集。

我还知道外部合并排序算法是外部排序技术的一个示例。

所以在我的例子中,外部排序和外部合并不是几乎一样吗?我想知道区别以及何时使用这些算法(在什么类型的数据上)。

PS:对于相同类型的数据,外部合并要比外部排序花费更长的时间

共有1个答案

谷梁振
2023-03-14

我想你很困惑。

“合并排序”绝对是排序算法的一种类型。其他排序算法有快速排序、气泡排序、堆排序等。

然而,在数据库中(我一般会说在Dag中),< code>merge指的是稍微不同的东西。合并是将两个排序后的数据集进行合并。它可以通过在并行遍历两个元素时逐个比较元素来做到这一点。

这与合并排序算法有关。这种合并是在幕后发生的。但是在这种情况下,合并运算符正在合并已经排序的列表。

我还应该指出,mer是许多数据库中允许在单个语句中进行插入和更新的语句。Postgres中并非如此(它在冲突中使用),但它是该域中“合并”的另一种用法。

 类似资料:
  • 我在理解外部排序算法中的合并步骤时遇到了一定的困难。我在维基百科上看到了这个例子,但我无法理解。 外部排序的一个例子是外部合并排序算法,它对每个适合RAM的块进行排序,然后将排序后的块合并在一起。例如,对于仅使用100 MB RAM对900 MB数据进行排序:1)读取主内存中的100 MB数据,并通过一些常规方法进行排序,如快速排序。2) 将排序后的数据写入磁盘。3) 重复第1步和第2步,直到所有

  • 本文向大家介绍内部和外部碎片化之间的区别,包括了内部和外部碎片化之间的区别的使用技巧和注意事项,需要的朋友参考一下 在这篇文章中,我们将了解内部和外部碎片化之间的区别- 内部碎片 分配的内存和所需空间之间的差异称为内部碎片。 在这种分段中,使用固定大小的存储块来处理数据。 当某个方法或过程大于所需的内存时,将发生此过程。 内部分段使用的方法是“最佳拟合”块。 当内存被划分为固定大小的分区时,会发生

  • 本文向大家介绍Java中的序列化和外部化之间的区别,包括了Java中的序列化和外部化之间的区别的使用技巧和注意事项,需要的朋友参考一下 序列化和外部化都是将对象转换为流字节并将字节流存储在数据库或内存中的过程。实现java.io.Serializable接口的类可以序列化。另一方面,根据应用程序的要求,外部化用于自定义序列化。外部化扩展了java.io.Serializable。  序号 键 序列

  • 本文向大家介绍内部碎片与外部碎片之间的区别,包括了内部碎片与外部碎片之间的区别的使用技巧和注意事项,需要的朋友参考一下 在从内存中加载和删除进程时,可用内存空间会分成几小块。考虑到有时由于无法将进程分配给存储块而导致其无法使用,因此有时无法将其分配给存储块。此问题称为碎片。 内部碎片 分配给进程的内存块更大。内存的某些部分未使用,因为它不能被其他进程使用。通过有效分配最小的分区但足够大的分区,可以

  • 我正在尝试理解外部合并排序算法是如何工作的(我看到了相同问题的一些答案,但没有找到我需要的东西)。我正在阅读Jeffrey McConnell的《算法分析》一书,我正在尝试实现那里描述的算法。 例如,我有输入数据:,我只能将4个数字加载到内存中。 我的第一步是以4个数字块读取输入文件,在内存中对它们进行排序,然后将其中一个写入文件A和文件B。 我得到: 现在我的问题是,如果这些文件中的块不适合内存

  • 我只是面临一个让我发疯的问题。我不明白为什么在我的tableView顶部和作为我的tableViewHeader的视图底部之间增加了一个额外的空间。标头的视图是pageViewController的视图,它在底部有自己的pageControl。 这很奇怪,因为iOS没有在这些项目之间添加空格。默认情况下,它们总是堆叠在一起,没有额外的填充。而且这个空间不是从头的视图中得到的,我在Xcode的视图调