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

2014年4月16日

《算法导论》笔记 第10章 10.2 链表

摘要: 【笔记】哨兵不能降低各种操作的渐进时间界,但可以降低常数因子,简化代码。template class list {private: struct DATA{ ITEM key; DATA *prev, *next; DATA() {} DATA(ITEM x):key(x) {} }NIL; DATA *nil; int sz;public: list(){ nil = &NIL; nil->next=nil; nil->prev=nil; } ~list... 阅读全文

posted @ 2014-04-16 16:22 电子幼体 阅读(602) 评论(0) 推荐(0) 编辑

《算法导论》笔记 第10章 10.1 栈和队列

摘要: 【笔记】栈:后进先出 LIFO队列:先进先出 FIFOtemplateclass stack {private: ITEM S[MAXN]; int tp;public: stack() { tp = 0; } bool empty() { return tp == 0; } void push(ITEM x) { if (tp == MAXN) throw "stack overflow"; S[tp++] = x; } ITEM top() { if (tp == 0... 阅读全文

posted @ 2014-04-16 12:01 电子幼体 阅读(533) 评论(0) 推荐(0) 编辑

2014年4月15日

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

摘要: 【思考】9-1 已排序的i个最大数给定一个含n个元素的集合,我们希望能用一个基于比较的算法来找出按顺序排列的i个最大元素。请找出能实现下列每一种方法的、具有最佳的渐进最坏运行时间的算法,并分析各种方法的运行时间(用n和i表示)。a) 对输入数排序,并列出i个最大的数。O(nlogn)的排序。b) 对输入数建立一个优先级队列,并调用EXTRACT-MAX过程i次。建堆O(n),每次调用O(logn),共O(n+ilogn)c) 利用一个顺序统计量算法来找到第i个最大元素,然后划分输入数组,再对i个最大数排序。寻找第i大元素O(n),排序O(ilogi),共O(n+ilogi)9-2 带权中位数对 阅读全文

posted @ 2014-04-15 21:33 电子幼体 阅读(1079) 评论(4) 推荐(0) 编辑

2014年4月14日

《算法导论》笔记 第9章 9.3最坏情况线性时间选择

摘要: 【笔记】SELECT最坏运行情况是线性的。【练习】9.3-1 在算法SELECT中,输入元素被分为每组5个元素。如果它们被分为每组7个元素,该算法会仍然以线性时间工作吗?证明如果分成每组3个元素,SELECT无法在线性时间内运行。考虑每组分为k个元素。则大于或小于中位数的中位数的数至少为因此在最坏情况下SELECT将处理最多n-(n/4-k)=3n/4+k个元素。递归式用代换法解决,假设算法是线性的,猜测有T(n)=4时成立。因此该算法对4个及4个以上的分组是线性的。当k=3时该算法的复杂度是Ω(nlgn)。9.3-2 分析SELECT,并证明如果n>=140,则至少有n/4个元素大于中 阅读全文

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

《算法导论》笔记 第9章 9.2以期望线性时间做选择

摘要: 【笔记】在平均情况下,任何顺序统计(特别是中位数),都可以在线性时间内得到。int partition(int A[],int p,int r) { int x = A[r]; int i = p-1; for (int j=p;jp+1时,若q在边界处,即q=r或q=p,若答案在A[q]处,转到情景1。否则转到情景3或情景2。因此递归过程中不会出现长度为0的数组。9.2-2 证明:指示器随机变量Xk和T(max(k-1,n-k))是独立的。9.2-3 写出RANDOMIZED-SELECT的一个迭代版本。int NonRecursiveRandomizedSelect(in... 阅读全文

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

《算法导论》笔记 第9章 9.1最小值和最大值

摘要: 【笔记】对于确定最小值问题,可以得到n-1次比较的这一下界。同时找出最小值和最大值,至多3*(n/2)次比较足以。将输入成对比较,较小者与最小值比较,较大者与最大值比较,每个元素3次比较。【练习】9.1-1 证明:在最坏情况下,利用n+seil(lgn)-2次比较,即可找到n个元素中的第2小元素。对元素两两进行比较,找出最小值,共n-1次比较。此时形成一个二叉树,高度为logn,根为最小元素。则次小元素一定在最小元素上升过程中的比较值中。即logn-1个比较值,因此最坏情况用n+seil(lgn)-2次比较即可找到次小元素。*9.1-2 证明:在最坏情况下,同时找到n个数字中的最大值和最小值需 阅读全文

posted @ 2014-04-14 16:08 电子幼体 阅读(296) 评论(0) 推荐(0) 编辑

2014年4月12日

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

摘要: 【思考】8-1 比较排序的平均情况下界8-2 以线性时间原地置换排序有一个由n个数据记录组成的数组要排序,且每个记录的关键字为0或1。1) 算法的运行时间为O(n)2) 算法是稳定的。3) 算法是原地进行排序的。a) 给出一个满足1、2的算法。计数排序。b) 给出一个满足1、3的算法。采用类似快速排序中的PARTITION的方法,用两个指针分别从前往后、从后往前扫描,若(i>=j)则推出循环,否则将前面的第一个1与后面的最后一个0交换。c) 给出一个满足2、3的算法。所有稳定的原地排序算法皆可。d) 在a、b、c中给出的算法能否用来在O(bn)时间内,对有b位关键字的n个记录进行基数排序 阅读全文

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

《算法导论》笔记 第8章 8.4桶排序

摘要: 【笔记】桶排序假设元素均匀而独立的分布在区间[0,1)上。桶排序的思想就是把区间[0,1)划分成n个相同大小的子区间,或称桶。将n个输入数分布到各个桶中去。整个桶排序算法以线性期望时间排序。void bucketSort(double A[],int n) { list B[MAXN]; for (int i=1;i::iterator it=B[i].begin();it!=B[i].end();it++) A[++cnt] = *it; }}【练习】8.4-1 说明BUCKET-SORT作用于数组 A = 。i = 0i = 1 0.13 0.16i = 2 0.2i =... 阅读全文

posted @ 2014-04-12 18:00 电子幼体 阅读(826) 评论(0) 推荐(0) 编辑

2014年4月11日

《算法导论》笔记 第8章 8.3基数排序

摘要: 【笔记】基数排序按最低有效位数字进行排序。给定n个d位数,每一个数位可取k种可能的值。如果所用的稳定排序需要Θ(d(n+k))的时间正确地堆这些数进行排序。给定n个b位数和任何正整数r<=b,如果采用稳定排序需要Θ(n+k)时间,那么RADIX-SORT能在Θ((b/r)(n+2^r))时间内正确的对这些数进行排序。【练习】8.3-1 示出基数排序RADIX-SORT作用于下列英语单词上的过程:"COW","DOG","SEA","RUG","ROW","MOB",&q 阅读全文

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

《算法导论》笔记 第8章 8.2计数排序

摘要: 【笔记】计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,此处k为某个整数。当k=O(n)时,计数排序的运行时间为Θ(n)。计数排序是稳定的。void countingSort(int A[],int B[],int n,int k) { int C[MAXK]; for (int i=0;i=1;j--) { B[C[A[j]]] = A[j]; C[A[j]]--; }}【练习】8.2-1 说明COUNTING-SORT在数组 A = 上的处理过程。C = C = C[i]表示最后一个值为i的元素应在的位置。倒序将A[i]中的元素复... 阅读全文

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

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

导航