分治策略 分治策略是一种解决问题的思路: 将问题分为若干更小规模的部分 通过解决每一个小规模问题,并将结果汇总得到原问题的解。 PS:递归问题则体现了分治策略。 优化问题和贪心策略 1.优化问题例子:找零兑换问题 让自动售货机每次找零给顾客最少数量硬币。 贪心策略解决:我们每次都试图解决问题尽量大的 ...
分类:
编程语言 时间:
2020-04-16 19:35:55
阅读次数:
70
在我还会FFT的时候赶快写下一篇博客留着以后看。。。。。。 FFT是用来求解多项式乘法,那么首先我们要知道多项式是啥。 $$ A(x) = a_0+a_1x^1+a_2x^2+···+a_{n 1}x^{n 1} $$ 这是个n 1次多项式(最高项是$x^{n 1}$),$a_0,a_1,···a_ ...
分类:
其他好文 时间:
2020-04-15 01:08:59
阅读次数:
139
分治策略: 将父问题划分为多个子问题(注:子问题与父问题一定要具有自相似性),然后找递归出口。 1.子问题规模变小。2.子问题与父问题本质等价。 汉诺塔游戏简述:三个柱A、B、C,将从大到小的盘按规则从A柱移到B柱。 具体的分治算法实现: 1 - N从A移动到B,C为辅助。 等价于: 1、1 - ( ...
分类:
其他好文 时间:
2020-04-12 16:20:17
阅读次数:
66
对于包含n个数的暑期如的数组来说,快速排序是一种最坏的情况为时间复杂度为n2的排序算法。虽然最坏情况时间复杂度很复杂,但是快速排序法通常是实际应用中最好的选择,因为平均性能非常好。在元素互异的情况下,期望的时间 复杂度为nlog(n)。 快速排序同样采用了分治策略: 通过递归调用,对数组A[p, . ...
分类:
编程语言 时间:
2020-04-05 09:42:24
阅读次数:
89
问题引出:给出一个集合N,求出其中第k小的数,第K小的元素指对集合L中的元素升序排列好后第K的元素。 1:惯性思维是对该集合中的每个数进行排序,然后找到索引为k的元素,最好的情况应该是O(nlogn) 2:BFPTR算法,一个即使是最坏情况下,也能达到O(n)的算法,通过对这个算法的学习,很直观的感 ...
分类:
编程语言 时间:
2020-04-04 00:03:29
阅读次数:
94
解析: 1. 将n个元素每5个一组,分成n/5(上界)组。 2. 取出每一组的中位数,任意排序方法,比如插入排序。 3. 递归的调用selection算法查找上一步中所有中位数的中位数,设为x,偶数个中位数的情况下设定为选取中间小的一个。 4. 用x来分割数组,设小于等于x的个数为k,大于x的个数即 ...
分类:
其他好文 时间:
2020-03-31 18:59:54
阅读次数:
100
一.基本结构图 二.典例 1.以斐波那契递归为例: Fibonacci(int n) { if (n==1||n==0) return 1; // basis else return Fibonacci(n-1)+Fibonacci(n-2);//递归进行 } 我们找到了解决斐波那契数的方法,但是通 ...
分类:
编程语言 时间:
2020-03-31 12:08:41
阅读次数:
89
选择问题最常见的问题有: "1.1选最大" "1.2同时选最大和最小的算法" "1.3找第二大" "2选第k小(分治策略)" 1.1选最大 选择算法 统一描述:设L是n个算法的集合,从L中选出第k小的元素,11.2同时选最大和最小的算法 设计思想:先选最大,然后把最大的从L中删除,接着选最小。 == ...
分类:
其他好文 时间:
2020-03-29 15:29:21
阅读次数:
148
1.排序的分类 1) 内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序 2) 外部排序:无法全部加载到内存中,需要借助外部存储进行 3)图示: 2.算法的时间复杂度 1) 度量一个程序(算法)执行时间的两种方法 A.事后统计的方法 问题:a.需要实际运行该程序。b.时间也依赖于计算机的硬 ...
分类:
编程语言 时间:
2020-03-21 16:41:05
阅读次数:
66
分治策略 1)将问题分解为规模较小的子问题,子问题与原问题同质 2)迭代或者递归解决每个子问题 3)将子问题的解综合得到原问题解 例子:二分查找Binary Search 1 BinarySearch(T,l,r,x) 2 //输入数组T,下标从l到r,查找数x 3 //输出j,若x在T中输出下标, ...
分类:
编程语言 时间:
2020-03-16 13:17:50
阅读次数:
61