随笔分类 - 算法导论
摘要:10.4-5 O(n)非递归O(1)空间遍历二叉树树节点转自http://blog.csdn.net/mishifangxiangdefeng/article/details/7708490采用类似中序遍历的处理方法,对一个结点,可以分为以下几种情况1.从父结点进入子结点进行处理(1)如果有左孩子,...
阅读全文
摘要: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
阅读全文
摘要:5.1-2 生成Random(a,b) 运行b-a次Random(0,1),累加和,最后再加a。利用公式F(z) = w解出z即可,其中F(z)为目标分布,w为区间0-1内的均匀分布。5.1-3 等概率生成0和1 Biased-Random 以概率p输出1,以概率1-p输出0, 则1-Biased-Random 以概率p输出0,以概率1-p输出1 则调用Biased-Random后接着调用1-Biased-Random,出现的概率为 调用结果 00 01 10 11 出现概率 (1-p)*p (1-p)*(1-p) p*p p*(1-p)则1...
阅读全文
摘要:4-2找出所缺的整数1. 遍历整数0到n的第一位,分成两个数组:P1[1] 和P0[1],分别代表第一位是1、0的数,并记录第一位是1的个数CountN,代价为O(n)。2. 遍历数组A[0...n]的第一位, 分成两个组:Q1[1]和Q0[1],分别代表第一位是1、0的数,并记录1的个数CountA,代价为O(n)。3. 比较CountN和CountA的值,结果可能有两种情况CountN = CountA,或者CountN = CountA + 1, 前者表明所缺数的第一位为0, 后者为1,代价为O(1)。4. 通过3的结果,随后我们可以在P1[1]和Q1[1](CountN>Coun
阅读全文

浙公网安备 33010602011771号