04 2014 档案
摘要:10.4-5 O(n)非递归O(1)空间遍历二叉树树节点转自http://blog.csdn.net/mishifangxiangdefeng/article/details/7708490采用类似中序遍历的处理方法,对一个结点,可以分为以下几种情况1.从父结点进入子结点进行处理(1)如果有左孩子,...
阅读全文
摘要:9.1-1 同时找出最小值和次小值比较过程同足球比赛淘汰赛阶段一样,两两比较,构成一个比较树。次小值只会出现在哪些跟最小值比较过的元素中,这些元素总共有的数目跟树高一样,为[lgn]。所以,总共花费(n-1) + ([lgn]-1)9.3-6 k分位数先找第(k-1)/2个分位数,然后将数组分成两部分,在前一部分找(k-1)/2前的那些中位数,在后一部分找(k-1)/2后的那些中位数,则有T(k) = 2*T(k/2) + O(n)。每一层的代价均为O(n),总共有lgk层。即为O(nlgk)9.3-7 最接近中位数的k个数step1:求出数组S的中位数的值:O(n)step2:计算数组每个数
阅读全文
摘要:8.1-4 n/k个k大小的有序子序列排序每个k大小的序列有k!种排列可能,所以n/k个子序列有(k!)^(n/k)个子序列,也即决策树至少要有这么多个叶子。设树高为h,则有2^h >=(k!)^(n/k),得h >= lg((k!)^(n/k)) = (n/k)lg(k!) >=(n/k)lg((k/2)^(k/2)) = (n/2)lgk8-3 排序不同长度的数据项a) 先用计数排序按“数字位数”进行排序,然后再用基数排序对位数相同的每个桶内的数字排序。b) 根据第一个字母排序(计数排序),然后对第一个字母相同的每组递归用按首字母排序计数排序。8-5 平均排序d) 建立k
阅读全文
摘要: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 快速排序的堆栈深度优化的尾递归:
阅读全文
摘要: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
阅读全文

浙公网安备 33010602011771号