并行排序算法:双调排序

news/2024/11/15 15:31:18/文章来源:https://www.cnblogs.com/dcytrl/p/18548060

引入

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

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

定义

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

算法流程

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

考虑 01 序列,显然序列形如 001100 或者 110011,不妨设其为 110011,分类讨论一下中点落在哪即可。对于一般情况,对于所有 \(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)\),故在常规排序中不实用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834060.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轮廓线DP

讲解轮廓线DP的两种常见形式以及例题。更新日志概念 类似于状态压缩DP,但我们储存的是轮廓线上的状态。 有些时候,也不需要进行状态压缩,而可以用某一点的状态代表一个区域的状态。 思路 轮廓线就是已经决策的与尚未决策的部分的分界线,我们储存分界线上已经决策过的所有节…

Nuxt.js 应用中的 schema:written 事件钩子详解

title: Nuxt.js 应用中的 schema:written 事件钩子详解 date: 2024/11/15 updated: 2024/11/15 author: cmdragon excerpt: schema:written 钩子是 Vite 提供的一种生命周期钩子,在模式写入完成后调用。通过这个钩子,开发者可以在配置被正式应用之后执行一些后续操作,比如记…

概率与期望基础

实验、结果、样本空间、事件 事件 \(A\) 是否发生取决于一系列影响它的因素,这些因素影响 \(A\) 的过程称为一次 experiment 实验 或 trial 试验 一次试验的 result 结果 称为它的 outcome 结局。\(\text{result}\) 指由原因所引起的结果 \(\text{outcome}\) 强调事件特有的结…

4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明

4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明 @目录4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明前言1. Ribbon 介绍1.1 LB(Load Balance 负载均衡)2. Ribbon 原理2.2 Ribbon 机制3. Spring Cloud Ribbon 实现负载均衡算法-应用实例4. 总结:5. 最后:前…

WSL2的介绍和使用

WSL2的介绍和使用 一、什么是WSL2? WSL是Windows Subsystem for Linux的简称,它是微软为Win10和Win11引入的一项功能。WSL允许用户在Windows上运行Linux操作系统及其相关命令和应用程序,而无需使用虚拟机或安装双系统。 1.1 WSL2与WSL1、传统虚拟机比较WSL1:没有完整的Linu…

插件大总结

加注释插件搜索接口插件mybatis-plus插件

Windows系统日志报错:生成了一个严重警告并将其发送到远程终结点。这会导致连接终止。TLS协议所定义的严重错误代码是10。Windows SChannel错误状态是1203是怎么回事?

当我们检查Windows系统日志发现有一个报错:生成了一个严重警告并将其发送到远程终结点。这会导致连接终止。TLS协议所定义的严重错误代码是10。Windows SChannel错误状态是1203。导致报错的原因是什么?该如何处理?驰网飞飞和你分享当我们检查Windows系统日志发现有一个报错:…

Windows三种提权实验

以win7为例手动提权 上线 将一句话木马上传到win7当中,本地使用蚁剑进行链接。信息收集 systeminfo查询杀软信息 wmic process list briefWindows杀软在线查询无匹配杀软进程。 根据系统信息和杀软信息查询提权EXP Windows 提权辅助 | 在线安全工具以列出的微软编号MS17-017为…

量化训练及精度调优经验分享

本文提纲:fx 和 eager 两种量化训练方式介绍 量化训练的流程介绍:以 mmdet 的 yolov3 为例 常用的精度调优 debug 工具介绍 案例分析:模型精度调优经验分享第一部分:fx 和 eager 两种量化训练方式介绍 首先介绍一下量化训练的原理。上图为单个神经元的计算,计算形式是加权…

Tomcat Windows 服务 JVM 内存参数设置

Tomcat 在 Windows 平台上启动服务的方式是 Commons Daemon,JVM 的启动参数可以有多种设置方法。本文介绍 Commons Daemon 的大致组成和参数设置方法。 Commons Daemon 由两部分组成。 一是由 C 语言开发负责和操作系统交互的平台相关程序,在 Windows 上平台相关部分是 procr…

FileZilla的安装配置和使用教程

一、FileZilla简介 FileZilla是一款免费开源的FTP软件,有以下优点:非常易于使用,且跨平台(Linux、Windows、MacOs等) 支持FTP、FTPS、SFTP等多种文件传输协议 支持断点续传 支持建立多个标签(标签为一个FTP连接界面)同时工作 支持远程查找文件 自带功能强大的站点管理和…

云行 | 金陵古都焕发数智活力,天翼云为南京创新发展注入新动能!

10月29日,以“国云智算聚金陵 自主可控铸新基”为主题的天翼云中国行江苏南京站活动圆满举办。南京市数据局领导、中国电信江苏分公司领导、客户及合作伙伴代表莅临现场,共商转型发展新机遇,共创智慧江苏新未来。会上举行了天翼云全栈自主可控能力升级计划、南京城市算力调度…