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. js圣诞节倒计时网页

    在线预览:http://keleyi.com/keleyi/phtml/jstexiao/17.htm 以下是代码: <!DOCTYPE html> <html xmlns=&quo ...

  2. 轻松掌握:JavaScript观察者模式

    观察者模式 观察者模式也叫"订阅者/发布者"模式,定义对象间的一种一对多的依赖关系,发布者可以向所有订阅者发布消息. 观察者模式被广泛地应用于JavaScript客户端编程中.所有 ...

  3. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(四)地图导航控件模块

    config.xml文件的配置如下: <widget left="10" top="50" config="widgets/Navigation ...

  4. 路径分析之NetworkX实例

    #!/usr/bin/env python # -*- coding: utf-8 -*- import networkx as nx import numpy as np import json i ...

  5. SharePoint 2013 Excel Services REST API介绍

    前言:Excel Services 中的 REST API 是 Microsoft SharePoint Server 2010 的新增项.利用 REST API,可通过 URL 直接访问工作簿部件或 ...

  6. Android—基于Socket与上传图片到客户端

    最近项目中需要客户端和Socket互相传递数据时候需要相互传递图片所以做下总结以免以后忘记,也希望给大家带来帮助. 先上客户端的代码: 根据图片名称上传照相机中单个照片(此方法为自己封装) 参数所代表 ...

  7. iOS之UIScrollView循环滚动

    #import "ViewController.h" #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #d ...

  8. 简单的学习心得:网易云课堂Android开发第四章服务、广播与酷特性

    1.Service (1)含义:Service是在后台长时间运行的应用组件,所在线程是main线程. (2)使用方式:startService能够执行onStartCommand中操作,bindSer ...

  9. Objective-C Runtime 运行时之四:Method Swizzling

    理解Method Swizzling是学习runtime机制的一个很好的机会.在此不多做整理,仅翻译由Mattt Thompson发表于nshipster的Method Swizzling一文. Me ...

  10. 使用Project进行项目管理 - 项目管理系列文章

    前面当项目经理的时候曾经用到过Project来进行项目管理.这些天闲着无事,将代码翻出来留念了一下,现在将Project项目管理的东西也翻出来玩玩. 微软的Project是一款不错的软件,经过微软这么 ...