摘要: 7.4-5 快速排序+插入排序粗略证明如下:从书中证明可知,只要划分是常数比,那么最后期望都是一样的。故假设每次划分都是均匀的。假设划分深度为h时,每个块的规模都不超过k,则有k*2^h = n,h = lg(n/k)。又因为在最底层,规模不超过k的子序列有n/k个,所以每个子序列内部插入排序时间为O(k^2),总的插入排序时间为O(nk)。(注意:这一步证明不严格,每个都是O(K^2),加起来可能比O(nk)要大。)每一次划分为O(n),总共有lg(n/k)层,所以划分的复杂度为O(nlg(n/k)),所以,总的时间为O(nk + nlg(n/k))。7-4 快速排序的堆栈深度优化的尾递归: 阅读全文
posted @ 2014-04-08 21:53 鬼蜮流风 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 6-2 对d叉堆的分析a)用A[1]表示根,则其儿子为A[2]到A[d+1],其孙子为A[d+2]到A[d^2+d+1],以此类推。所以有d-parent(i):return [(i-2)/d + 1] (方括号表示下取整)d-child(i,j):return d(i-1) + j + 1b)由于每个节点有d个儿子,所以含n个元素的d叉堆的高度为O(logdn) = O(lgn/lgd)。c)由于输出最大值后的调整,需要从d个儿子中选出最大的,故每层的调整都需要d次,有logdn层,故为O(d*logdn)。d)树的高度,为O(logdn)。e)跟插入一样,为O(logdn)。6-3 You 阅读全文
posted @ 2014-04-08 21:07 鬼蜮流风 阅读(150) 评论(0) 推荐(0) 编辑