快速排序(Quick Sort) 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 1 算法描述 快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描 ...
分类:
编程语言 时间:
2019-08-13 22:34:35
阅读次数:
116
一、分治法 递归,找最大值最小值,整数相乘,归并排序,快速排序,线性时间选择,最近点对问题 二、动态规划 0-1背包问题 ,矩阵相乘问题,装配线调度问题,最长公共子序列,最优二分检索树,凸多边形最优三角剖分 三、贪心法 背包问题,活动选择问题,哈夫曼编码,最小生成树算法(Kruskal 和 Prim ...
分类:
编程语言 时间:
2019-08-12 23:38:19
阅读次数:
123
时间复杂度最坏n2,平均nlogn 解释:遍历一次O(n),快排采用分治法来遍历,看成二叉树,那么遍历的次数跟他的深度有关系,n个节点,那么深度至少是log(n+1),所以平均nlogn;二叉树最大深度那就是N了,所以最坏时间复杂度n2。 边界问题分析(第一个while循环条件i<=j): 当i=j ...
分类:
编程语言 时间:
2019-08-03 14:31:27
阅读次数:
122
问题描述:对于给定的含有n个元素的无序序列,求这个序列中最大和次大的两个不同元素。 问题求解分析(分治法):先给出无序序列数组a[low...high]。第一种情况为当数组中只有一个元素时,此时只存在一个最大值即为本身,次大值为负无穷,在这里我设置为-999999,第二种情况为数组中只有两个元素,此 ...
分类:
编程语言 时间:
2019-08-03 12:51:56
阅读次数:
166
思路:分治法 枚举4组数O(n^4)绝对超时 因此可以使用分治的思想,将 4 组数分为两组,然后每组再分别计算和,最后对两组合进行排序,让正数与负数相加判断是否为 0 即可 ...
分类:
其他好文 时间:
2019-08-02 09:16:17
阅读次数:
105
一、原理 ? 归并算法是采用分治法(Devide and Conquer)的一个典型应用,即先保证每个子序列有序,再将子序列进行合并,处理使得合并后的子序列有序,如此逐步得到一个有序的序列。 ? 归并算法在实现上分为自下向上的迭代归并排序和自上向下的递归式的归并排序。下面将分别以代码形式实现两种实现 ...
分类:
编程语言 时间:
2019-07-31 22:08:54
阅读次数:
143
▎什么是分治? ?『定义』 分治,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。在计算机科学中,分治法就是运用分治思想的一种很重要的算法。分治法是很多高效算法的基础,如 ...
分类:
编程语言 时间:
2019-07-23 09:39:29
阅读次数:
125
#include #include using namespace std; const int M = 10000; int x,n,i; int s[M]; int BinarySearch(int n,int s[],int x) { int low=0,high=n-1; while(low... ...
分类:
其他好文 时间:
2019-07-05 22:30:55
阅读次数:
123
原文: 十大经典排序算法(动图演示) 归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2- ...
分类:
编程语言 时间:
2019-07-03 15:27:36
阅读次数:
114
一、基本概念 分治法,顾名思义,即分而治之的算法,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题…… 二、基本思想及策略 设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 策略:对于一个规模为n的问题,若该问题可以容易地 ...
分类:
编程语言 时间:
2019-06-23 20:52:30
阅读次数:
215