分治算法一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排...
分类:
编程语言 时间:
2015-05-26 00:08:22
阅读次数:
206
No.148 Sort ListSort a linked list inO(nlogn) time using constant space complexity.分析: 常量空间且O(nlogn)时间复杂度,单链表适合用归并排序,双向链表适合用快速排序 有一个问题是:若算上栈空间,空间复杂度.....
分类:
其他好文 时间:
2015-05-25 18:00:34
阅读次数:
160
Title:Sort a linked list inO(nlogn) time using constant space complexity.思路:考虑快速排序和归并排序,但是我的快速排序超时了ListNode* sortList(ListNode* head) { if (!he...
分类:
其他好文 时间:
2015-05-25 16:21:19
阅读次数:
153
引言 本文从多个方面讲解了快速排序的知识点,包括快排分而治之的思想,以及他与归并排序注重点的不同,快排的性能,包括最优最差以及平均性能,并以均匀分布为例,证明了快排的平均性能是1.39*(n+1)logn,接下来又从熵的角度说明了一下快排为什么下界只能达到nlogn,为什么堆排比快排慢,而基排又能够...
分类:
其他好文 时间:
2015-05-25 09:50:36
阅读次数:
175
归并排序是以O(NlogN)最坏情形运行时间运行,而所使用的比较次数几乎是最优的。它是递归算法的一个很好的实例。 归并排序的也遵循分治的思想。直观上其操作如下: 分解:分解待排序的n个元素的序列成各具n/2个元素的子序列。 解决:使用归并排序递归地排序两个子序列。 合并:合并两个已排序的...
分类:
编程语言 时间:
2015-05-24 12:52:30
阅读次数:
118
与归并排序一样,快速排序使用也使用了分治的思想。下面是对一个典型的子数组A[p,...,r]进行快速排序的三步分治过程: 分解:数组A[p,...,r]被划分成两个(可能为空)子数组A[P,...,q-1]和A[q+1,...,r],使得A[p,...,q-1]中每个元素都小于等于A[q],而...
分类:
编程语言 时间:
2015-05-22 21:05:52
阅读次数:
261
1 #include 2 3 void Merge_Sort(int *a,int l,int r) 4 { 5 int len=r-l; 6 if(len 2 3 int temp[900000]; 4 __int64 number; 5 void Merge_Sort(in...
分类:
编程语言 时间:
2015-05-21 19:00:11
阅读次数:
157
题目链接:https://leetcode.com/problems/sort-list//*题意:对链表进行排序*//** *思路:归并排序 * 分治:将链表分成两段:用slow和fast指针,slow每次只走一步,fast每次 * 走两步。当fast为空时,slow所在位置就...
分类:
编程语言 时间:
2015-05-20 18:12:21
阅读次数:
104
桶排序_BUCKETSORT
桶排序的思想
桶排序的代码编写
总结桶排序_BUCKETSORT假设你有五百万份试卷,每份试卷的满分都是100分,如果要你对这些试卷按照分数进行排序,天噜啦,五百万份试卷啊,快速排序?堆排序?归并排序?面对这么多的数据,平均下来上面的每一种一种算法至少都要花费nlogn=5000000log5000000=111267433nlogn=5000000log5000000...
分类:
编程语言 时间:
2015-05-20 14:54:16
阅读次数:
136
在之前写过的插入排序,归并排序,堆排序,快排都是比较排序,它们个个元素之间的次序依赖于他们之间的比。
计数排序不是一个比较排序的算法,它的所有代码完全没有在输入元素之间的比较。计数排序的基本思想是:对没一个输入元素x,确定小于x的元素个数。用这个信息,就可以把x放到它输出数组上的位置。
#include
#include
using namespace std;
void countsort(...
分类:
编程语言 时间:
2015-05-19 22:50:20
阅读次数:
166