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 电子幼体 阅读(517) 评论(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 电子幼体 阅读(462) 评论(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 电子幼体 阅读(228) 评论(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 电子幼体 阅读(282) 评论(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 电子幼体 阅读(650) 评论(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 电子幼体 阅读(226) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第6章 6.2保持堆的性质

摘要: 【笔记】当 MAX_HEAPIFY(A, i) 被调用时,我们假定LEFT(i)、RIGHT(i)为根的两棵二叉树都是最大堆。若子结点中有最大元素,将 A[i] 与其交换,对该子树调用 MAX_HEAPIFY。若 A[ i ] 为最大元素,结束循环。MAX_HEAPIFY 作用于一个高度为 h 的结点所需的运行时间为 O(h)。 void maxHeapify(int i) { int l = left(i); int r = right(i); int largest = i; if (l A[largest]) largest... 阅读全文

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

导航