对于包含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
一维: 峰值规定:a[i]>a[i-1] and a[i]>a[i+1],假定只存在一个峰值 1 2 1 9 5 0 例如9就是一个峰值 方法一:顺序遍历,时间复杂度O(n) 方法二:分治策略,将列表折半查找,第一次查找n/2,左右两边哪一边大继续折半查找哪一边 def search_peak(al ...
分类:
编程语言 时间:
2020-03-02 14:28:44
阅读次数:
82
摘要:递归与分治策略是五大常见算法策略之一,分治策略的思想就是分而治之,即先将一个规模较大的大问题分解成若干个规模较小的小问题,再对这些小问题进行解决,得到的解,在将其组合起来得到最终的解。而分治与递归很多情况下都是一起结合使用的,能发挥出奇效(1+1>2),这篇文章我们将先从递归说起,再逐渐向分治 ...
分类:
编程语言 时间:
2020-01-08 18:51:15
阅读次数:
76
分治法 分治策略: <1>分解:将原序列 a[s...t] 分解成两个子序列 a[s...i-1] 和 a[i+1...t]。其中 i = (s+t)/2; <2>求解子问题:若子序列的长度是0或1,则是有序的,直接返回;否则递归地求解各个子问题。 <3>合并:由于整个子序列存放在数组 a 中,排序 ...
分类:
编程语言 时间:
2020-01-04 18:39:39
阅读次数:
117