`
talin2010
  • 浏览: 520768 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

两种外排序的思路sorting by merging&sorting by distribution

阅读更多

很早以前我写过一篇博客推荐过一本书《Algorithms and Data Structures for External Memory

http://blog.csdn.net/pennyliang/archive/2010/02/28/5334218.aspx

今天我思考了一个问题,顺便翻了翻,对外排序进行了些思考,分享如下:

假定在磁盘上有16个数字,而内存只能容下4个数进行排序,那么归并的排序和桶排序有怎样的区别呢?其实各有千秋。归并的排序无疑是最常用的,思想简单,但最后一步多路归发挥多核优势有困难,桶排序的方法充分发挥多核优势,难点在于如何让桶内distributing进来的关键字数量一致,详细可参考我曾推荐的这本书。

为了便于理解我举了个例子:

input:1 4 2 8 12 11 3 6 9 40 28 27 21 7 6 3

output

sorting by merge

(1)分段 (2)内排序 3)多路归并(败者树)

1 4 2 8 1 2 4 8

12 11 3 6 3 6 11 12

9 40 28 279 27 28 40 1 2 3 3 4 6 6 7 8 9 11 12 21 27 28 40

21 7 6 3 3 6 7 21

(1)其实是什么也不做

磁盘IO量0

input:1 4 2 8 12 11 3 6 9 40 28 27 21 7 6 3

output

(2)

磁盘IO量16*2=32字节(读16字节,写16字节)

input:1 2 4 8 3 6 11 12 9 27 28 40 3 6 7 21

output

(3)

磁盘IO量读16*2 = 32字节

input: 1 2 4 8 3 6 11 12 9 27 28 40 3 6 7 21

output1 2 3 3 4 6 6 7 8 9 11 12 21 27 28 40

如果有4CPU,第一、二个阶段4CPU可以同时参与计算,第三阶段最多可有2CPU可参与计算,一个从output开头写,一个从output结尾写,两头往中间写,直到满。文件可以采用内存映射的方式,实现两头往中间写。

sorting by distribution

(1)分桶 (2)内排序(排序后,则按桶的顺序自然有序)

1 2 3 3 1 2 3 3

4 6 7 6 4 6 6 7

8 9 12 11 8 9 11 12

40 28 27 2121 27 28 40

(1)

磁盘IO量16*2 = 32字节

input: 1 4 2 8 12 11 3 6 9 40 28 27 21 7 6 3

output1 2 3 3 4 6 7 6 8 9 12 11 40 28 27 21

(2)

磁盘IO量16*2 = 32字节

input: 1 4 2 8 12 11 3 6 9 40 28 27 21 7 6 3

output1 2 3 3 4 6 6 7 8 9 11 12 21 27 28 40

如果有4CPU,第一、二个阶段4CPU可以同时参与计算。但难点是如何让每个桶的数均匀。

分享到:
评论

相关推荐

    拓扑排序 Topological Sorting 两种实现

    拓扑排序的两种实现

    排序算法一览-排序(Sorting)是计算机程序设计中的一种重要操作

    排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列。作为排序依据的数据项称为“排序码”,也即数据元素的关键码。为了便于查找,通常...

    selection sorting选择排序,c++

    生成一个可以控制上下界限的随机数列,并使用选择排序selection sorting算法对其排序。

    快速排序sorting

    快速排序是一种高效的排序算法,由英国计算机科学家C.A.R. Hoare在1960年提出。它的基本思想是分治法(Divide and Conquer),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的...

    使用MPI实现的PSRS并行排序算法

    使用MPI计算的完整的PSRS(并行排序(parallel sorting by regular sampling))代码。并行计算课实验所用代码。

    JavaScript-使用javascript开发的排序算法-sorting.zip

    在这个"JavaScript-使用javascript开发的排序算法-sorting.zip"压缩包中,很可能是包含了各种常见的排序算法实现,比如冒泡排序、插入排序、选择排序、快速排序、归并排序以及堆排序等。 1. **冒泡排序**:冒泡排序...

    sorting算法

    本文将详细探讨"Insertion Sorting"、"Swap Sorting"(可能指的是Bubble Sort或Counting Sort,因为通常没有直接称为"Swap Sorting"的算法)、"Selection Sorting"这三种常见的排序算法,以及在实现这些算法时可能...

    PHP-使用php实现的排序算法-Sorting.zip

    首先,排序算法是用来对一组数据进行排列的逻辑过程,它可以是升序或降序,常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。在PHP中,我们可以直接使用内置的`sort()`、`rsort()`、`a...

    计算机程序设计与艺术第三卷:排序与查找Sorting and Searching(中英)

    快速排序是一种分治策略的体现,通过选取一个基准元素将数组分为两部分,然后递归地对这两部分进行排序。归并排序则采用合并两个已排序的子序列来达到全局有序,适合大数据量的排序。而堆排序利用了完全二叉树的特性...

    ruby-使用ruby实现的排序算法-sorting.zip

    归并排序也是一种分治策略,它将数组分成两半,分别排序,然后合并。Ruby中可以使用递归实现: ```ruby def merge_sort(array) return array if array.length mid = array.length / 2 left = merge_sort(array...

    数据结构课设_sdu_cs_大二_输者树外排序代码

    在这个"数据结构课设_sdu_cs_大二_输者树外排序代码"项目中,我们聚焦于输者树(Loser Tree)这一特殊的数据结构,以及如何用它来执行外排序(External Sorting)。 输者树是一种用于高效比较多个元素的数据结构,...

    NGUI Sorting Layer script

    在这个修改版中,可能包含了对Sorting Layer支持的增强,比如添加新的API来设置或获取面板的排序层,或者修改了绘制逻辑以正确处理自定义的排序层。 2. **UIPanelInspector.cs**:这是Unity编辑器中UIPanel组件的...

    Job-sorting-problem.rar_sorting problem_作业排序

    "Job-sorting-problem.rar"这个压缩包文件中包含的"Job sorting problem.txt"文本文件,很可能是对解决作业排序问题的一种算法或程序的描述。在阅读这份文件时,我们可以期待了解以下几个方面的内容: 1. **问题...

    sound-of-sorting-0.6-win32

    在压缩包内,有两个关键文件:"sound-of-sorting.exe"是主程序,它是整个应用的执行文件,用户可以直接运行来体验各种排序算法的声音表现;另一个是"README.txt",这通常包含了关于软件的使用说明、开发者信息、许可...

    山东大学数据结构课程设计第一部分代码——外排序

    外排序(External Sorting)是处理大规模数据时的一种关键技术,特别是在内存不足以容纳所有数据的情况下。在“山东大学数据结构课程设计第一部分代码——外排序”这个项目中,学生将学习并实现这种高级排序算法。 ...

    Insertion sorting,插入排序,c++

    插入排序(Insertion Sort)是一种简单直观的比较排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用...

    排序sorting.c

    利用c语言,编写几种排序方法:冒泡、选择、插入、堆排序等。将他们集中起来,写到一个文件进行比较。在此,运用了栈、数组,循环等结构,可以自行选择排序方法进行排序,调试后比较满意。

    几种c语言排序优缺点

    在C语言中,排序是程序设计中常见的任务之一,涉及到多种不同的排序算法,每种算法都有其特定的优点和缺点。以下是一些常见的排序方法及其特点: 1. **冒泡排序 (Bubble Sorting)**: - 简单描述:通过不断地交换...

    Sorting-Algorithm-summary.zip_排序

    本资料包“Sorting-Algorithm-summary.zip”聚焦于几种基本的排序算法,包括直接排序、冒泡排序、堆排序、二分法排序、归并排序和快速排序,以及较少提及的基数排序。下面我们将对这些算法进行详细介绍。 1. 直接...

    8种排序算法可视化

    排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。 八种排序算法分别是: 1.冒泡排序; 2.选择排序; 3.插入排序; 4.快速排序...

Global site tag (gtag.js) - Google Analytics