快速排序(qsort) 本质是分治思想 排序的一次划分算法从两头交替搜索,直到low和high重合,因此其时间复杂度是O(n);而整个快速排序算法的时间复杂度与划分的趟数有关。 快速排序三个步骤 1、确定区域,左边界(l),右边界(r),基准值(x = l+r>>2) 2、保证区间内,x左侧的任意值 ...
分类:
编程语言 时间:
2020-01-22 21:44:38
阅读次数:
73
1.概念 快速排序 快速排序,听这个名字就能想到它排序速度比较快方法,是一种分治思想,现在各种语言中自带的排序库很多使用的都是快速排序。快速排序是一种原地排序,只需要一个很小的栈作为辅助空间,空间复杂度为O(log2n),适合在数据集比较大的时候使用。时间复杂度比较复杂,最好的情况是O(n),最差的 ...
分类:
编程语言 时间:
2020-01-01 13:43:42
阅读次数:
77
一.前提知识(分治思想) 将原问题分解为几个规模较小但类似与原问题的子问题,递归的求解这些子问题,然后再合并这些子问题的解来建立原问题的解。 分治模式在每层递归时都有三个步骤: 1.分解原问题为若干子问题,这些子问题是原问题的规模较小的实例。 2.解决这些子问题,递归地求解各子问题。当子问题的规模足 ...
分类:
编程语言 时间:
2019-12-29 11:11:06
阅读次数:
65
最近读了吴伟民老师的《数据结构》,学习有感,在此记录 当我们面对规模庞大的问题的时候,往往会一头雾水不知所措 但是如果我们能把这个大问题分解成小一点的问题,再把小一点的问题分解成更小的问题 最终分解成不能再分解的原子问题(Primitive Problem) 如果我们能找到一个通用的方法适用于所有原 ...
分类:
编程语言 时间:
2019-12-19 00:09:19
阅读次数:
146
分治思想 将较大规模的问题分解为规模较小的子问题,通过解决规模较小的子问题得到较大规模问题的答案 比如 归并排序 或者 快速傅立叶变换 都运用了分治思想 $CDQ$分治 ~~既然加了前缀肯定和普通分治不同~~ $cdq$分治重要思想在于将问题分解为较小规模的子问题后,用一个子问题计算对另一个子问题的 ...
分类:
其他好文 时间:
2019-12-15 20:08:43
阅读次数:
101
求 Top K 的算法主要有基于快速排序的和基于堆的这两种,它们的时间复杂度都为 $O(nlogK)$。借助于分治思想,以及快速排序的区间划分,我们可以做到 $O(n)$ 时间复杂度。具体算法思路如下: 第 1 步,我们将原数据 5 个一组划分为若干个组,最后余下的不足 5 个的额外作为一组,总组数 ...
分类:
其他好文 时间:
2019-12-03 23:45:32
阅读次数:
122
逆序对 对于一个数论$a_{1},a_{2}......a_{n}$,定义有一对序列${i,j}$,当且仅当$ia_{j}$为逆序对 归并排序 归并排序是基于分治思想进行的,把区间$[l,r]$拆分成$[l,mid]$和$[mid+1,r]$两部分,分治下去进行排序,每次合并的复杂度就是当前[l,r ...
分类:
其他好文 时间:
2019-11-23 16:08:51
阅读次数:
80
教材学习内容总结 本周初步学习了数据结构,并大概了解其学习框架:分为应用层、逻辑层与实现层三个方面;而逻辑层有包括1:1的线性表,1:买的树以及m:n的图,线性表又包括栈(LIFO)、队列(FIFO);实现层方面包括数组(随机存储,查找效率高)、链表(字节数组,顺序存储,插入删除效率高)。重点学习了 ...
分类:
其他好文 时间:
2019-11-17 20:34:12
阅读次数:
89
思想分类 分治是把一个大规模的问题不断地变小然后进行推导的过程。 回溯则是从问题的起始点出发,不断地进行尝试,回头一步甚至多步再做选择,直到最终抵达终点的过程。 分治 思想 将一个问题的规模变小,然后再利用从小规模问题中得出的结果,结合当前的值或者情况,得出最终的结果。 模板 复杂度 公式法可以说是 ...
分类:
其他好文 时间:
2019-11-15 18:22:20
阅读次数:
38
摘自《算法竞赛进阶指南》。 线段树是一种基于分治思想的二叉树结构,用于在区间上进行信息统计。 线段树的基本特征:1.线段树的每个节点都代表一个区间。2.线段树具有唯一的根节点,代表的区间是整个统计范围,如[1,N]。3.线段树的每个叶节点都代表一个长度为1的元区间[x,x]。4.对于每个内部节点[l ...
分类:
其他好文 时间:
2019-11-08 20:41:50
阅读次数:
107