双调序列

双调序列(Bitonic Sequence)是指由一个非严格增序列X和非严格减序列Y构成的序列,比如序列(23,10,8,3,5,7,11,78)。

定义:一个序列a1,a2,…,an是双调序列(Bitonic Sequence),如果:
(1)存在一个ak(1≤k≤n), 使得a1≥…≥ak≤…≤an成立;或者
(2)序列能够循环移位满足条件(1)

Batcher定理

将任意一个长为2n的双调序列A分为等长的两半X和Y,将X中的元素与Y中的元素一一按原序比较,即a[i]与a[i+n] (i < n)比较,将较大者放入MAX序列,较小者放入MIN序列。则得到的MAX和MIN序列仍然是双调序列,并且MAX序列中的任意一个元素不小于MIN序列中的任意一个元素。

Bitonic merge(双调合并)

假设我们有一个双调序列,则我们根据Batcher定理,将该序列划分成2个双调序列,然后继续对每个双调序列递归划分,得到更短的双调序列,直到得到的子序列长度为1为止。这时的输出序列按单调递增顺序排列。

由于每次划分后问题长度都会减半,故所需要的划分次数为log n。

这个应用双调划分来对双调序列进行排序的过程称为Bitonic merge(双调合并)。


合并一个有16个元素的双调序列

双调合并网络

Bitonic Sort(双调排序)

对于两个元素x,y,如果x<=y,则x,y都位于双调序列的递增部分,而递减部分没有元素,如果x>=y,则x,y都位于双调序列的递减部分,而递增部分没有元素,于是x和y构成一个双调序列。因此,任何无序的序列都是由若干个只有2个元素的双调序列连接而成。

于是,对于一个无序序列,我们按照递增和递减顺序合并相邻的双调序列,按照双调序列的定义,通过连接递增和递减序列得到的序列是双调的。最终,我们可以将若干个只有2个元素的双调序列合并成1个有n个元素的双调序列。


将无序的输入序列转换成双调序列

如上图,最终再对得到的双调序列进行一次双调合并,即可得到有序序列。

这是今天学到的双调排序的一些基础知识。双调排序多用于并行计算,有空我再针对并行设计总结一下~

【并行计算】Bitonic Sort(双调排序)基础相关推荐

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

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

  2. Bitonic sort(双调排序)

    最近在上Udacity的<Introduction to parallel programming>课程,里面介绍了一种很有趣的平行算法--Bitonic sort(双调排序)算法.在课程 ...

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

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

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

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

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

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

  6. 15.1双调排序(Bitonic sort)

    概述 双调合并排序(Bitonic mergesort)是一个并行排序算法.它也用作建立一个排序网络的一种构造方法.这个算法是由Ken Batcher提出来的.基于它生成的排序网络包含了个比较操作和的 ...

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

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

  8. [Java基础] sort方法--------排序的那些事

    引言 在学习Java过程中,排序sort是我们常用的功能:在Java里,数组有Arrays.sort()可以排序,集合则是Collections.sort()方法排序:默认情况下是升序排列,但是降序又 ...

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

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

最新文章

  1. jdk自带压测工具_FULL GC分析过程分享
  2. .NET开发中 springMVC+NHibernate注入失败的几个常见错误
  3. php科学计数法转string,php如何将科学计数法转数字
  4. 介绍Ext JS 4.2的新特性的《深入浅出Ext JS》上市
  5. sql server数据库性能的优化
  6. python爬虫案例——根据网址爬取中文网站,获取标题、子连接、子连接数目、连接描述、中文分词列表
  7. matlab两个数据放在一起,问个小问题,怎么把两个图像放在一起?
  8. linux-centos8安装oracle11
  9. 如何在vue-cli中配置amazeui的vue版本
  10. navicat can not load oci dll,193,126
  11. 腾讯敏捷开发及快速迭代
  12. F28335第十篇——增强型捕获模块(eCAP)
  13. linux系统的超级管理员,系统的超级管理员:root《 Linux 文件与目录权限 》
  14. 阿里-蚂蚁金服-一面电面-上海-java研发实习生
  15. cmd命令行配置windows防火墙
  16. ICCV 2021 |首届 SoMoF 人体序列预测比赛冠军方案分享
  17. 全国各地土特产一览表
  18. 连接手表_用EMUI11连接华为手机与手表 出门不用全程盯着手机
  19. 机器学习之朴素贝叶斯实现垃圾邮件过滤
  20. asp.net 的 web form 过时了吗?

热门文章

  1. 【Unity】安卓打包环境搭建-通过安装包离线搭建
  2. 如何在网页标题栏中插入图片图标
  3. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java双笙映画ou5oj
  4. android MediaPlayer 的SeekTo 方法
  5. android seekto 黑屏,Android-VideoView.seekTo() 不正确问题原因分析
  6. sqlalchemy自定义to_dict
  7. HTML5标签使用的常见误区
  8. 量子隐形传态过程的推导(Quantum teleportation)
  9. N5105小主机/软路由-AIDA64监控模板分享
  10. [JavaScript] 小练习 US telephone number validator