上一页 1 2 3 4 5 6 7 8 ··· 40 下一页

2014年4月9日

《算法导论》笔记 第8章 8.1排序算法时间的下界

摘要: 【笔记】任意一个比较排序算法在最坏情况下,都需要做Ω(nlogn)次的比较。堆排序和合并排序都是渐进最优的比较排序算法,运行上界O(nlogn)与最坏情况下界Ω(nlogn)是一致的。【练习】8.1-1 在于某种比较排序算法对应的决策树中,一个叶结点最小可能的深度是多少?8.1-2 不用斯特林近似公式,给出log(n!)渐进紧缺界。8.1-3 证明:对于长度为n的n!种输入中的至少一半而言,不存在具有线性运行时间的比较排序算法。对n!中的1/n部分而言又怎样呢?1/2^n部分呢?假设有m个结点存在线性运行时间的比较排序算法,由高度为h的二叉树至多有2^h个子结点,则2^h>=m。两边取对 阅读全文

posted @ 2014-04-09 20:41 电子幼体 阅读(779) 评论(0) 推荐(0) 编辑

2014年4月8日

《算法导论》笔记 第7章 总结与思考

摘要: 【思考题】7-1 Hoare 划分的正确性a) 说明 HOARE-PARTITION 算法在数组 A = 上的运行过程,并说明在第 4~11 行中 while 循环的每一轮迭代后,数组中各元素的之和辅助值的情况。p=1, r=12[i=0] 13 19 9 5 12 8 7 4 11 2 6 21 [j=13]6 [i=1] 19 9 5 12 8 7 4 11 2 [j=11] 13 216 2 [i=2] 9 5 12 8 7 4 11 [j=10] 19 13 21i=10, j=9return j = 9b) 下标i和j满足这样的特点,即我们从不会访问数组A的、在子数组A[p..r]. 阅读全文

posted @ 2014-04-08 19:51 电子幼体 阅读(344) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第7章 7.4快速排序分析

摘要: 【笔记】利用RANDOMIZED-PARTITION,快速排序算法期望的运行时间当元素值不同时,为O(nlgn)。【练习】7.4-1 证明:在递归式:中,T(n)=Ω(n^2)。采用代换法。猜测 T(n) <= c*n^2,c为某个常数。选择足够大的c,使得 c*(2*n-1)可以支配Θ(n), T(n) <= c*n^2成立。7.4-2 证明:快速排序的最佳情况运行时间为Ω(nlgn)。7.4-3 证明:在q=0,1,...,n-1区间上,当q=0或q=n-1时,q^2+(n-q-1)^2取得最大值。令x=q一元二次函数,开口向上,x=(n-1)/2 为对称轴。因为 0<= 阅读全文

posted @ 2014-04-08 15:54 电子幼体 阅读(475) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第7章 7.3快速排序的随机化版本

摘要: 【笔记】新的排序调用RANDOMIZED-PARTITION。int randomizedPartition(int A[],int p,int r) { int i = rand() % (r-p+1) + p; swap(A[r],A[i]); return partition(A,p,r);}【练习】7.3-1 我们为什么要分析一个随机化算法的平均情况性能,而不是其最坏情况性能呢?随机化算法下输入较为平均,最坏情况极难出现。7.3-2 在过程RANDOMIZED-QUICKSORT的运行过程中,最坏情况下对随机数产生器RANDOM调用了多少次?最佳情况下调用了多少次?以... 阅读全文

posted @ 2014-04-08 09:40 电子幼体 阅读(370) 评论(0) 推荐(0) 编辑

2014年4月7日

《算法导论》笔记 第7章 7.2快速排序的性能

摘要: 【笔记】最佳情况划分:两个子问题的大小都不大于n/2。平衡的划分:每当按照常数比例进行划分时,总的时间都是O(nlogn)【练习】7.2-1 利用代换法证明:递归式T(n)=T(n-1)+⊙(n)的解为T(n)=⊙(n^2)。假设可以选择合适的常数C_1 C_2。得出T(n) = ⊙(n^2)。7.2-2 当数组A的所有元素都具有相同值时,QUICKSORT 的运行时间是什么?O(n^2)7.2-3 证明:当数组 A 包含不同的元素、且按降序排序时,QUICKSORT 的运行时间是⊙(n^2)。当元素按降序排列时,每次都是最大不对称划分,因此运行时间是⊙(n^2)。7.2-4 对几乎已拍好序的 阅读全文

posted @ 2014-04-07 21:48 电子幼体 阅读(513) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第7章 7.1快速排序的描述

摘要: 【笔记】快速排序的最坏运行时间为O(n^2),期望运行时间为O(nlogn)。int partition(int A[],int p,int r) { int x = A[r]; int i = p-1; for (int j=p;j 上的过程。7.1-2 当数组 A[p..r] 中的元素均相同时,PARTITION 返回的q值是什么?修改 PARTITION,使得当数组 A[p..r] 中所有的元素值相同时,q = (p+r)/2。是r。if (i+1==r) return (p+r)/2;7.1-3 简要地证明在大小为n的子数组上,PARTITION的运行时间为⊙(n)。... 阅读全文

posted @ 2014-04-07 21:04 电子幼体 阅读(455) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第6章 总结与思考

摘要: 【完整代码】templateclass CHeap{private: Type *A; int heapSize; int length; inline int left(int x) { return x>1; }public: CHeap(){} CHeap(Type B[],int n) { init(B,n); } void init(Type B[],int n) { A = B; length = n; heapSize = 0; } void heapSort() ... 阅读全文

posted @ 2014-04-07 19:46 电子幼体 阅读(226) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第6章 6.5优先级队列

摘要: 【笔记】一个最大优先队列支持以下操作:insert x:把元素x插入集合。maximum:返回集合中具有最大关键字的元素。extract-max:去掉并返回集合中具有最大关键字的元素。increase-key x k:将元素x的关键字增加到k,这里k值不能小于x的原关键字的值。 Type heapMaximum() { return A[1]; } Type heapExtractMax() { if (heapSize 1 && A[parent(i)] 执行 HEAP_EXTRACT_MAX 操作的过程。记录返回值为15,将最后一个元素移动到... 阅读全文

posted @ 2014-04-07 15:59 电子幼体 阅读(274) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第6章 6.4堆排序算法

摘要: 【笔记】反复将大根堆的根与最后一个结点交换,堆的大小减一,对根结点执行MAX_HEAPIFY维护堆的性质。最终A 数组按升序排列。 void heapSort() { buildMaxHeap(); for (int i=length;i>=2;i--) { swap(A[1],A[i]); heapSize--; maxHeapify(1); } }【练习】6.4-1 说明 HEAPSORT 在数组 A = 上的操作过程。A = 6.4-2 讨论在使用如下循环不变式时,H... 阅读全文

posted @ 2014-04-07 11:56 电子幼体 阅读(645) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第6章 6.3建堆

摘要: 【笔记】从最后一个非叶子结点n/2开始,自底向上调用MAX_HEAPIFY建堆。证明:BUILD_MAX_HEAP 运行时间的界为O(n)一个n元素堆的高度为floor(logn),在任意高度h上,至多有ceil(n/2^(h+1))个结点。【练习】6.3-1 示出 BUILD_MAX_HEAP 作用于数组 A= 的过程。6.3-2 在 BUILD_MAX_HEAP 的第2行代码中,为什么希望循环下标i从 length[A]/2 降到1,而不是从1升到length[A]/2?MAX_HEAPIFY 仅适用于子树均为大根堆的情况,从1升到length[A]/2时,子树不为大根堆,不满足调用MAX 阅读全文

posted @ 2014-04-07 11:07 电子幼体 阅读(221) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 ··· 40 下一页

导航