概述

双调合并排序(Bitonic mergesort)是一个并行排序算法。它也用作建立一个排序网络的一种构造方法。这个算法是由Ken Batcher提出来的。基于它生成的排序网络包含了个比较操作和的延时,这里的n是要排序的元素个数。

一个排好序的序列是一个单调非降(或单调非增)序列。一个双调序列是一个满足对于特定的k(),,或者是该序列的循环移位序列。

例如,

或者

双调排序的基本思路

考虑到大小是 n 的双调序列 S , 它的前半部分是递增的,后半部分是递减的。

可以通过“Pair-wise min-max comparison”,将一个双调序列,分裂成两个双调序列。如下所示:

这两个子双调序列有如下特性:

  1. 都是双调序列。
  2. 中存在一个元素b满足:b前面的元素递增,b后面的元素递减。
  3. 中存在一个元素c满足:c前面的元素递减,c后面的元素递增。
  4. 中的所有元素小于中的元素(因为,b是的最大值,c是的最小值)。

这4个特征是双调排序的基础。

使用双调序列合并完成双调序列排序

标识是一个递增序列,标识是一个递减序列。

上面的排序还差最后一步才能完成。左边是输入,右边是输出。

下图是一个完整的双调排序图。

其中,

  1. 浅蓝色:标识是一个单调递增序列;
  2. 浅绿色,标识一个单调递减序列;
  3. 箭头的尾指向头,是指这两个数值作比较和交换,箭头指向的那条线存储max,箭头尾部那条线存储min。

我认为双调排序在排序算法中性能肯定不是最优的,但是,它的优势在于并行化。可以看到,它的每一级合并操作都是并行的。

15.1双调排序(Bitonic sort)相关推荐

  1. 三十分钟理解:双调排序Bitonic Sort,适合并行计算的排序算法

    双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU.fpga来计算. 1.双调序列 在了解双调排序算法之前,我们先来看看什么是双调序 ...

  2. bucket sort sample sort 并行_双调排序Bitonic Sort,适合并行计算的排序算法

    双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU.fpga来计算. 1.双调序列 在了解双调排序算法之前,我们先来看看什么是双调序 ...

  3. 双调排序(Bitonic sort)学习

    之前的时候参加浙大的考核,学习了一下双调排序,正好现在在学习CUDA编程,因此把之前的学习成果整理一下. 问题说明:  ***********************  给出分成m段 的n个浮点数,输 ...

  4. CUDA(六). 从并行排序方法理解并行化思维——冒泡、归并、双调排序的GPU实现

    在第五讲中我们学习了GPU三个重要的基础并行算法: Reduce, Scan 和 Histogram,分析了 其作用与串并行实现方法. 在第六讲中,本文以冒泡排序 Bubble Sort.归并排序 M ...

  5. FPGA设计篇之双调排序

    FPGA设计篇之双调排序(Bitonic Sort) 一.写在前面 二.双调排序算法原理 2.1 双调序列 2.2 Batcher定理 2.3 双调排序算法 2.4 构造双调序列 三.双调排序算法RT ...

  6. 并行计算实战-双调排序

    1.双调序列 假设序列A是一个单调递增序列,B是一个单调di'j递减序列,那么由A与B拼接而成的序列C就是一个双调序列.如图1: 接下来我们要介绍的一个概念是双调分裂操作: 1)将数列的前半部分的各个 ...

  7. 算法 - 并行排序算法之双调排序(Bitonic_Sort)

    目录 引言: 了解: 什么是并行计算: 并行计算分为时间上并行和空间上并行: 并行排序算法与双调排序之间的关系: 学习: 双调排序(Bitonic_Sort)的介绍及原理: 双调排序中的双调序列: 贝 ...

  8. C++Bitonic Sort双调排序/比并排序的实现算法(附完整源码)

    C++Bitonic Sort双调排序/比并排序的实现算法 C++Bitonic Sort双调排序/比并排序的实现算法完整源码(定义,实现,main函数测试) C++Bitonic Sort双调排序/ ...

  9. 【并行计算】Bitonic Sort(双调排序)基础

    双调序列 双调序列(Bitonic Sequence)是指由一个非严格增序列X和非严格减序列Y构成的序列,比如序列(23,10,8,3,5,7,11,78). 定义:一个序列a1,a2,-,an是双调 ...

最新文章

  1. 每日学习笔记(18)
  2. no scp yes 不提示_linux脚本实现scp命令自动输入密码和yes/no等确认信息
  3. python中的抽象含义_Python中下划线的5种含义你都知道吗?
  4. linux创建永不过期用户,linux下如何设置用户密码永不过期_网站服务器运行维护...
  5. 分数优先遵循志愿php源码_分数优先 遵循志愿
  6. 大专学的pHp找什么工作,大专毕业能做什么工作 毕业都去干嘛了
  7. vbs按钮传递过程_哈希传递攻击仍然是一种威胁
  8. geoda空间自相关分析_【方法笔记4】Geoda空间计量1 空间自相关
  9. 程序员面试金典——5.3最接近的数
  10. Hive依据key获取value
  11. View相关知识学习总结
  12. 数字云财务迈入价值重塑新阶段,未来财务已来
  13. 20181120 复习菜鸟教程中的node.js
  14. android listview表格分页显示,android实现listview分页的方法
  15. 干货:分析学中常用的3种分析方法!
  16. C++ 模板的显示具体化
  17. Red Gate 破解
  18. 用Java实现二叉树的遍历
  19. python条件运算符_Python中的条件运算符
  20. decodeString

热门文章

  1. 从UEBA到SOAR
  2. Ubuntu 系统的常用快捷键 Ubuntu操作基本快捷键
  3. [LTSPICE]LTSPICE仿真50nm晶体管的I-V,C-V曲线
  4. MySQL case when then 用法
  5. 三、DMSP/OLS夜间灯光数据校正一相互校正、饱和校正
  6. 牛客C基础题型复习打卡(2)
  7. vivo 全球商城:亿级订单中心架构设计与实践
  8. buu-[FlareOn5]Ultimate Minesweeper
  9. Office word图表目录多个标题之间的空行无法删除
  10. 所有浏览器都有mozilla的原因