merge sort 一些变种、应用

2023-10-28

1 逆序对数目:

分治公式:总的逆序对个数 = 前半部分逆序对个数 + 后半部分逆序对个数 + merge时候每取一次后半部分的数,累加一次前半部分剩余的数的个数

int countInvertion(vector<int> &A, int l, int r, vector<int> &B) {
	if (l >= r) return 0;
	int m = (l + r) / 2;
	int a = countInvertion(A, l, m, B);
	int b = countInvertion(A, m + 1, r, B);
	int i = l, j = m + 1, c = 0;
	for (int k = l; k <= r; k++) {
		if (j > r) B[k] = A[i++];
		else if (i > m)  B[k] = A[j++];
		else if (A[i] <= A[j]) B[k] = A[i++];
		else {
			B[k] = A[j++];
			c += m - i + 1;
		}
	}
	for (int k = l; k <= r; k++) A[k] = B[k];
	return a + b + c;
}



2 完美shuffle, abcd1234 - > a1b2c3c3,要求O(1)空间

分治策略:前后两部分都还是偶数:把前半部分后一半和后半部分前一半对调,abcd1234 - > ab12cd34,然后递归完美shuffle两个子问题。

两半部分是奇数,先把后半部分第一个元素像插入排序那样插到整个数组第二个位置,这样两个部分的第一个元素处理好了(挨着了),剩下的部分递归。

def f(A, l, r):
    if r - l + 1 <= 2: return
    m = l + (r - l) / 2
    if (m - l + 1) % 2 == 1:
        for i in xrange(m, l, -1):
            A[i], A[i + 1] = A[i + 1], A[i]
        f(A, l + 2, r)
    else:
        j = m + 1
        for i in xrange((l + m) / 2 + 1, m + 1):
            A[i], A[j] = A[j], A[i]
            j += 1
        f(A, l, m)
        f(A, m + 1, r)



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

merge sort 一些变种、应用 的相关文章

  • 2023电工杯数学建模B题思路分析

    文章目录 0 赛题思路 1 竞赛信息 2 竞赛时间 3 组织机构 4 建模常见问题类型 4 1 分类问题 4 2 优化问题 4 3 预测问题 4 4 评价问题 0 赛题思路 赛题出来以后第一时间在CSDN分享 1 竞赛信息 中国电机工程学会

随机推荐

  • NOIP中的数学--第8课 容斥原理(一)

    小学数学知识 容斥原理 容斥原理的题目都可以借助韦恩图这一工具来解决 并且非常快速与准确 一 关于两个集合的容斥原理 集合 A 与B 的并集的元素个数 等于集合 A 的元素个数与集合B 的元素个数的和 减去集合A 与 B 的交的元素个数 即
  • nn.AvgPool2d——二维平均池化操作

    PyTorch学习笔记 nn AvgPool2d 二维平均池化操作 torch nn AvgPool2d kernel size stride None padding 0 ceil mode False count include pad
  • 常见合并两个数组的方法

    数组合并方法 concat concat 方法合并数组不改变原数组 let arr1 1 3 4 5 let arr2 1 4 6 7 let result arr1 concat arr2 console log result 1 3 4
  • set实现返回小于给定值的数的个数

    使用pbds平衡树实现 头文件代码如下 for policy based data structures include
  • zookeeper报错Java Home Is Not Set

    安装zookeeper在网站上下载 https zookeeper apache org releases html 解压放在目录D bigdata 本文所用的目录 下 关于zookeeper以及kafka的目录 路径中最好不要出现空格 比
  • 机器学习之朴素贝叶斯方法(Naive Bayes)原理和实现

    目录 一 贝叶斯理论 二 实战朴素贝叶斯 实战朴素贝叶斯1 实战朴素贝叶斯3 三 scikit learn中朴素贝叶斯的分类算法的适用 四 贝叶斯算法的优缺点 一 贝叶斯理论 贝叶斯模型 现在我们来看一下怎么操作 假设我有m个样本数据 这大
  • Nginx(6)安装模块

    1 下载并解压第三方模块 要与nginx版本一致 下载原nginx源码包并解压 2 产看原nginx 编译参数 nginx V 3 进入到解压的nginx源码包目录里重新编译 configure help可以查看所有所需模块对应的编译选项
  • java中正则表达式的基本使用

    正则表达式的常用语法 正则在线检验 http tool chinaz com regex 更多地语法可以参考jdk api中的Pattern类 http tool oschina net apidocs apidoc api jdk zh
  • 传导骚扰的一些其他总结

    传导骚扰测试分类 实际上涉及到一款产品时 这个测试需要测哪些物理量 然后需要用到哪些设备 做骚扰测试 不管你是RE 辐射骚扰 还是CE 传导骚扰 核心的设备还是EMI测试接收机 或者是频谱仪 这两种机器测的是我受平端口的内心和外兜底里的电压
  • [Windows] bat查看端口占用命令, 并且关闭对应进程

    找到进程ID netstat ano find 8080 关闭进程 taskkill PID 13340 F
  • Centos7安装Rabbitmq

    一 下载安装包 RabbitMq需要erlang配合 所以需要安装Rabbitmq server和erlang wget http www rabbitmq com releases rabbitmq server v3 5 0 rabbi
  • CVPR 2023

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 点击进入 gt 计算机视觉 微信技术交流群 转载自 CSIG文档图像分析与识别专委会 本文简要介绍CVPR 2023录用论文 Turning a CLIP Model
  • JavaWeb基础2——JDBC

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud SpringCloudAlibaba 黑马旅游 谷粒商城 目录 一 JDBC 1 1 JDBC概述 1 1 1
  • unity编程实践-制作血条

    作业要求 血条 Health Bar 的预制设计 具体要求如下 分别使用 IMGUI 和 UGUI 实现 使用 UGUI 血条是游戏对象的一个子元素 任何时候需要面对主摄像机 分析两种实现的优缺点 给出预制的使用方法 部署工作 IMGUI
  • 同一个界面多个子控制器切换视图

    先看示例 EssenceViewController为父控制器 AllViewController 全部 VideoViewController 视频 VoiceViewController 声音 PictureViewController
  • react点击事件控制div盒子的显示隐藏

    index jsx import React Component from react class show extends Component constructor props super props this state cls pa
  • 智慧教室系统--低碳节能管控系统

    随着全球气候变化的日益严重 环保 节能 低碳已经成为各行各业追求的目标 教育行业也不例外 建设低碳 环保的智慧教室已经成为学校和政府的共同关注点 智慧教室系统的解决方案正是基于此 旨在通过AIOT数字化平台 智慧教室和智能管控等技术手段 实
  • list(链表)——STL

    文章目录 list list构造函数 3 list 赋值和交换 list 大小操作 list 插入和删除 list 数据存取 list反转和排序 list 将数据进行链式存储 链表 list 是一种物理存储单元上非连续的存储结构 数据元素的
  • vue 项目动态引入css(sass)文件(判断后加载对应的 sass 文件)

    vue 项目动态引入css文件 preface 问题 解决方案 preface 最新在写后台 管理 应 业务需求 众多菜单业务中 有个菜单需要独立出来给领导使用 改领导有独特喜欢的颜色格调 快速开发 只是做了菜单的权限控制 然后和样式 控制
  • merge sort 一些变种、应用

    1 逆序对数目 分治公式 总的逆序对个数 前半部分逆序对个数 后半部分逆序对个数 merge时候每取一次后半部分的数 累加一次前半部分剩余的数的个数 int countInvertion vector