1. Batcher比较器

  Batcher比较器是指如果在两个输入端给定输入x,y,再在两个输出端输出最大值max{x,y}和最小值min{x,y}。如图1所示,我们规定Batcher比较器的上输出端输出最小值,下输出端输出最大值。

2. 双调序列

  所谓双调序列(Bitonic Sequence)是指由一个非严格增序列X和非严格减序列Y(其中X的最小元素正好是Y的最大元素)构成的序列,比如序列(23,10,8,3,5,7,11,78)。23,10,8为减序列,8,3,5,7,11,78为增序列,8为中间元素。具体的数学定义是酱紫de:

  定义:一个序列a1,a2,…,an是双调序列(Bitonic Sequence),如果

  (1)存在一个ak(1≤k≤n), 使得a1≥…≥ak≤…≤an成立;或者

  (2)序列能够循环移位满足条件(1)

  总的来说,双调序列存在一个中间元素,该元素左边为一个增序列(或减序列),右边为一个减序列(或增序列)。如图2所示(向下和向上的斜线分别表示减序列和增序列):

3. Batcher定理

  Batcher定理是说将任意一个长为2n的双调序列A从中间切成两半,分成等长的两个序列X和Y,然后X和Y相同位置的元素xi与yi比较,小的放到Min序列,大的放到Max序列。由此得到的Max序列和Min序列也是双调序列。且Min序列的每个元素小于或等于Max序列的每个元素。如图3所示:

4. 基于Batcher定理的双调归并网络

  利用Batcher定理,我们可以将任意一个长为2n的双调序列A划分成Min序列和Max序列,再分别对Min序列和Max序列进行划分,以此类推,直到n=1。最后再将所有含两个元素的子序列归并成完全有序的序列。如图4所示:

5. 双调排序网络

  双调归并网络的输入必须是双调序列。如果要将其变成任意输入序列的排序网络,那么首先需要将输入序列转换成一个双调序列。主要思想是:将长度为2n的序列看成n个2个元素的有序序列,任意两个有序序列都可以组成一个4元素双调序列,则可以得到n/2个4元素的双调序列;4元素的双调序列通过一个4个输入的双调归并网络即可得到一个4元素的有序序列;两个4元素的有序序列又可以组成一个8元素的双调序列,再经过一个8输入的双调归并网络即可得到一个8元素的有序序列;以此类推,直到最后得到一个2n个元素的有序序列。如图5所示:

参考文献:

1. Batcher归并网络

2. 双调排序

3. 比较器网络的选择与排序

4. 并行计算——结构·算法·编程(第3版)陈国良编著

基于Batcher比较器的双调排序网络的更多相关文章

  1. DirectX11 With Windows SDK--27 计算着色器:双调排序

    前言 上一章我们用一个比较简单的例子来尝试使用计算着色器,但是在看这一章内容之前,你还需要了解下面的内容: 章节 26 计算着色器:入门 深入理解与使用缓冲区资源(结构化缓冲区/有类型缓冲区) Vis ...

  2. 【转载】双调排序Bitonic Sort,适合并行计算的排序算法

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

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

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 双调排序是data-indepen ...

  4. 【Udacity并行计算课程笔记】- Lesson 4 Fundamental GPU Algorithms (Applications of Sort and Scan)

    I. Scan应用--Compact 在介绍这节之前,首先给定一个情景方便理解,就是因为某种原因我们需要从扑克牌中选出方块的牌. 更formal一点的说法如下,输入是 \(s_0,s_1,...\), ...

  5. GPU并行编程小结

    http://peghoty.blog.163.com/blog/static/493464092013016113254852/ http://blog.csdn.net/augusdi/artic ...

  6. HBase Filter 过滤器之 Comparator 原理及源码学习

    前言:上篇文章HBase Filter 过滤器概述对HBase过滤器的组成及其家谱进行简单介绍,本篇文章主要对HBase过滤器之比较器作一个补充介绍,也算是HBase Filter学习的必备低阶魂技吧 ...

  7. 关于MapReduce中自定义带比较key类、比较器类(二)——初学者从源码查看其原理

    Job类 /**   * Define the comparator that controls    * how the keys are sorted before they   * are pa ...

  8. MVC中使用Entity Framework 基于方法的查询学习笔记 (三)

    紧接上文,我们已经学习了MVC数据上下文中两个常用的类,这两个类承载着利用函数方式进行数据查询的全部内容,我们既然已经了解了DbSet<TEntity> 是一个泛型集合,并且实现了一些接口 ...

  9. Scala比较器:Ordered与Ordering

    在项目中,我们常常会遇到排序(或比较)需求,比如:对一个Person类 case class Person(name: String, age: Int) { override def toStrin ...

随机推荐

  1. Nginx配置文件详解

    Nginx是一款面向性能设计的HTTP服务器,相较于Apache.lighttpd具有占有内存少,稳定性高等优势. ######Nginx配置文件nginx.conf中文详解##### #定义Ngin ...

  2. js事件处理、事件对象

    事件类型分类: 1 添加在html结构中的事件 <div id="div1" onclick="alert('append click event in html' ...

  3. 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore

    本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...

  4. Android自定义对话框

    在android中有自带的对话框,为了美观,很多开发者会使用自定义对话框,如下图: 点击“弹出自定义对话框按钮后”显示如图效果. 首先要自己定义一个xml文件定义自己对话框的样式: <?xml ...

  5. xcode svn commit is not under version control (1) & git commit

    使用Xcode提交一个第三方库时,由于包含资源文件,总是提交不了,提示报错:XXX commit is not under version control (1) 网上查了下,得知 xcode对于sv ...

  6. 在易语言中调用MS SQL SERVER数据库存储过程方法总结

    Microsoft SQL SERVER 数据库存储过程,根据其输入输出数据,笼统的可以分为以下几种情况或其组合:无输入,有一个或多个输入参数,无输出,直接返回(return)一个值,通过output ...

  7. RecyclerView-------MainActivity代码

    package com.example.administrator.recyclerview; import android.support.v7.app.AppCompatActivity; imp ...

  8. Play Framework 完整实现一个APP(十一)

    添加权限控制 1.导入Secure module,该模块提供了一个controllers.Secure控制器. /conf/application.conf # Import the secure m ...

  9. SQLite学习笔记(八)&&sqlite实现架构

    该系列的前面一些文章我重点讲了sqlite的核心功能,比如封锁机制,共享缓存,以及事务管理等.但对于sqlite的整体没有作一个全面的介绍,本文将从实现的层面,整体介绍sqlite的框架.各个核心模块 ...

  10. 《CLR via C#》---枚举标志和标志位

    枚举类型 枚举类型定义了一组符号名称/值配对. 如 private enum Color /* : byte */ { White, // Assigned a value of 0 Red, // ...