冒泡排序、插入排序、选择排序这三种算法的时间复杂度都为 $O(n^2)$,只适合小规模的数据。今天,我们来认识两种时间复杂度为 $O(nlogn)$ 的排序算法——归并排序(Merge Sort)和快速排序(Quick Sort),他们都用到了 分治思想 ,非常巧妙。 1. 归并排序(Merge S ...
分类:
编程语言 时间:
2018-10-18 16:52:19
阅读次数:
217
前言:上次算法课主要对分治思想进行了介绍,在这里进行以下总结和几个例子的应用。 一、分治算法 设计过程:(1)分解:将问题分解为子问题,子问题的形式与原问题是一样的,只是规模减小了。 (2)求解:递归地求解出子问题。 (3)合并:将子问题的解组合成原问题的解。 分治算法中最重要的就是递归求解子问题, ...
分类:
编程语言 时间:
2018-10-13 11:35:13
阅读次数:
1151
首先读出题意,然后发现这是一道DP,我们可以获得递推式为 然后就知道,不行啊,时间复杂度为O(n2),然后又可以根据递推式看出这里面可以拆解成多项式乘法,但是即使用了fft,我们还需要做n次多项式乘法,时间复杂度又变成O(n2 * log n),显然不可以。然后又利用c分治思维吧问题进行拆分问题但是 ...
分类:
系统相关 时间:
2018-10-01 23:13:32
阅读次数:
265
FFT是基于分治思想对DFT和IDFT的优化。 DFT: $\mathbb{C} ^{N}\rightarrow \mathbb{C} ^{N}: \left( x_{1},\ldots ,x_{N}\right) \rightarrow \left( y_{1},\ldots ,y_{N}\rig ...
分类:
其他好文 时间:
2018-09-29 21:29:02
阅读次数:
190
题目链接:https://pintia.cn/problem-sets/434/problems/5404 法一: 这个算法的算法复杂度是O(N^3),是个非常差劲的算法,在pat提交时,提示时间超时,下面是提交结果 法二: 在法一的基础上进行了改进,将算法复杂度降到了O(N^2),已经比算法一好了 ...
分类:
其他好文 时间:
2018-09-27 18:05:02
阅读次数:
208
我们都做过一道题(?)货币兑换,是用cdq分治来解决不单调的斜率优化 现在它放到了树上.. 总之先写下来dp方程,$f[i]=min\{f[j]+(dis[i]-dis[j])*p[i]+q[i]\} ,j是i的祖先,dis[i]-dis[j]<=l[i]$ ,其中dis[i]表示1号点到i号点的距 ...
分类:
其他好文 时间:
2018-09-24 18:56:27
阅读次数:
159
之前搞了一个树的中心,结果当时把点分治给扔下了,现在搞一搞。其实点分治的分治思想很明显,就是把树切成一个个小树,然后在重心的位置再分治就行了。 代码实现有一定困难,但就我觉得前一个函数和树刨的dfs1很像吗,详情见代码。 题干: 代码: ...
分类:
其他好文 时间:
2018-09-23 22:15:00
阅读次数:
137
1分治思想 1.1比大小在分区 1.2从数组中取出一个数做基准数 1.3将比他小的数全放在他的左边,比他大的数全放在他的右边 1.4然后递归 左边 和右边 } ...
分类:
编程语言 时间:
2018-09-14 01:05:00
阅读次数:
163
目的:掌握 快速排序 的 基本思想与过程、代码实现、时间复杂度 1、基本思想与过程:(分治思想,挖坑填数) (1)从数列中选择一个数作为key值; (2)将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边; (3)对左右两个小数列重复第二步,直至各区间只有1个数。 下面对数组【42, ...
分类:
编程语言 时间:
2018-08-30 14:58:46
阅读次数:
156
前言 无论是计算机算法概论、还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多少。算法中log级别的时间复杂度都是由于使用了分治思想,这个底数直接由分治的复杂度决定。如果采用二分法,那么就会以2为底数,三分法就会以3为底数,其他亦然。 ...
分类:
编程语言 时间:
2018-08-22 11:09:22
阅读次数:
240