首页 > 编程语言 >并行排序算法:双调排序

并行排序算法:双调排序

时间:2024-11-15 15:18:16浏览次数:1  
标签:双调 交换 算法 序列 操作 排序 log

引入

有一个排列,你可以通过“比较并交换”这个操作将该排列排好序,即,每次选择一对数 \((i,j)\),若 \(a_i>a_j\) 则交换,否则不交换。

但是,你可以把多对 \((i,j)\) 放在一次操作里并行“比较并交换”,此时操作数记 1,与数对的对数无关,但是每个 \(i\) 只能出现至多一次。要求操作数最小。

定义

双调序列:先单增后单减,或者先单减后单增。即,单峰数列或单谷数列。

算法流程

定理:设一个长度为 \(2^k\) 的序列 \(\{a_i\}\),将该序列劈成两半,然后将两个序列的对应位置 \((i,i+2^{k-1})\) 执行“比较并交换”,则操作结束后两个序列也都是双调序列。

考虑 01 序列,显然序列形如 001100 或者 110011,不妨设其为 001100,分类讨论一下中点落在哪即可。对于一般情况,对于所有 \(x\),令 \(b_i\leftarrow [a_i\le x]\) 就转化为了 01 序列问题。

那么如果我们想要把一个双调序列排序的话,根据定理我们就可以将 \(2^k\) 的问题划分成两个 \(2^{k-1}\) 的独立子问题,递归下去即可。由于分治的每一层每个节点相互独立,所以双调序列排序可以在 \(O(\log n)\) 次操作内完成。

考虑将一般序列排序。还是考虑分治,假设我们已经将 \(a_{[1,2^{k-1}]},a_{(2^{k-1},2^k]}\) 排好序,那么将后一半序列翻转一下,就转化成了双调序列了。实现中,为了实现翻转,只需要把 \((i,i+2^{k-1})\) 操作变成 \((i,2^k-i+1)\) 即可。同理,每一层的点还是相互独立,一般序列排成双调序列也可以在 \(O(\log n)\) 的时间内完成。

故总操作次数为 \(O(\log^2n)\)。由于该排序常规时间复杂度 \(O(n\log^2n)\),故在常规排序中不实用。

标签:双调,交换,算法,序列,操作,排序,log
From: https://www.cnblogs.com/dcytrl/p/18548060

相关文章

  • 论文分享:DiskANN查询算法
    详细总结了三篇有关DiskANN最邻近查询图算法的论文欢迎大家来点赞,更欢迎感兴趣的友友来探讨!DiskANN的提出(NurIPS’19)文献分享:Vamana图算法以及面向SSD的DiskANN文章浏览阅读797次,点赞21次,收藏8次。NurIPS‘19_vamana图索引https://blog.csdn.net/qq_64091900/article/det......
  • cmu15545笔记-Join算法(Join Algorithms)
    目录OverviewNestedLoopJoinNaïveBlockIndexSort-MergeJoinHashJoinSimpleHashJoinPartitionHashJoin总结Overview输出形式:早物化与晚物化(OLAP一般都是晚物化)代价分析:一般用IO次数计算(最终结果可能落盘,也可能不落盘,所以我们只计算输出结果之前的IO次数)。Join左边称为......
  • python实现的扫雷游戏的AI解法(启发式算法)
    相关:python编写的扫雷游戏如何使用计算机程序求解扫雷游戏本文中实现的《扫雷》游戏的AI解法的项目地址:https://openi.pcl.ac.cn/devilmaycry812839668/AI_mine_game该项目的解法效果:之前介绍了网上的一些解决《扫雷》游戏的一些解法,包括DQN和启发式等AI算法,看着这......
  • 【算法】二分查找
    基本内容提高在有序的数组中查找满足某一条件的索引二分查找的基本类型①有多种情况满足条件,找到满足条件的最右索引,例如找到值为4的最右索引(也可以换为小于5的最后一个元素)​ ②有多种情况满足条件,找到满足条件的最左索引,例如找到大于4的第一个元素...​ ③仅存......
  • 视频智能分析网关反光衣检测算法在提升工人安全意识方面有哪些优势?
    在工业自动化和智能制造的浪潮中,工作场所的安全监控正变得越来越重要。反光衣检测视频分析网关正是为了满足这一需求而设计的高性能、低功耗的AI边缘计算硬件设备。以下是对视频智能分析网关视频分析网关的介绍,以及反光衣检测算法在提升工人安全意识方面的优势分析。一、产品介......
  • 某app最新版 vmp算法分析一
    本系列预计3篇某app使用了一种X开头的HTTP签名。该应用程序对服务器的请求在其标头中有6个x签名。该应用程序通常使用此签名来确保数据的安全性和完整性。代号花露水.6个x签名都来自古希腊神话中的某个神.分别是蛇发女妖(G),柯罗诺斯(K,时间之神),拉顿(L),阿尔戈斯(A),赫利......
  • Java 常用加密解密算法
    Java常用加密解密算法 概要  加密算法是一种用数学方法对数据进行变换的技术,目的是保护数据的安全,防止被未经授权的人读取或修改。加密算法可以分为三大类:对称加密算法、非对称加密算法和哈希算法(也叫摘要算法)。  本文来梳理下开发中常用到的数据编码中的Base64以及常......
  • 百度 2025届秋招提前批 文心一言大模型算法工程师
    文章目录个人情况一面/技术面1h二面/技术面1h三面/技术面40min个人情况先说一下个人情况:学校情况:211本中9硕,本硕学校都一般,本硕都是计算机科班,但研究方向并不是NLP,而是图表示学习论文情况:1A(NeurIPS)+1B(ICDM)已录用,还有一篇A会(AAAI2025)最近快出结果了,以及一......
  • 重生之我在学Java算法系列(一)
    一.题目评委打分需求:在唱歌比赛中,有6名评委给选手打分,分数范围是(0-100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分二.做一道题目最重要的点在于需求分析如题一所示首先我们需要什么六名评委的分数第二......
  • 从零开始:数学建模算法汇总之MATLAB与Python在建模中的应用对比
    目录从零开始:数学建模算法汇总之MATLAB与Python在建模中的应用对比前言最小二乘法数值分析方法数值分析方法图论算法线性规划整数规划动态规划贪心算法分支定界法蒙特卡洛方法随机游走算法遗传算法粒子群算法神经网络算法人工智能算法模糊数学时间序列分析......