zoukankan      html  css  js  c++  java
  • 算法导论第八章习题答案(第三版) Introduction to Algorithm

    Exercises

    8.1-1

    最小深度为n,下一次需比较的元素比当前最大元素大即可。

    8.1-2

    将其拆为两项的和即可。

    [lg n! = sumlimits_{k = 1}^n {lg k} = sumlimits_{k = 1}^{n/2} {lg k} + sumlimits_{k = n/2 + 1}^n {lg k} le sumlimits_{k = 1}^{n/2} {lg frac{n}{2}} + sumlimits_{k = n/2 + 1}^n {{mathop{ m lgn} olimits} } = frac{n}{2}lg frac{n}{2} + nlg n = O(nlg n)]

    [lg n! = sumlimits_{k = 1}^n {lg k} = sumlimits_{k = 1}^{n/2} {lg k} + sumlimits_{k = n/2 + 1}^n {lg k} ge frac{n}{2}lg 2 + frac{n}{2}lg frac{n}{2} = Omega (nlg n)]

    所以上式可证。

     8.1-3

    只需要计算的是是否有这么多的叶结点使得树高为Θ(n)即可。

    经计算可知1/2和1/n均不可以(至于1/2n,不会算,还望大家告之)。

    8.1-4

    书上提示简单的将每个子序列的下界进行合并是不合理的,那是因为独立解决每个子序列不一定是最优的。

    高为h的决策树至少有2h个叶结点,所以({2^h} ge k{!^{frac{n}{k}}})。

    所以可以求解。

    8.2-1.略。

    8.2-2

    前面的循环中,当有重复元素的时候,存入数组是从前往后存入的,最后是从后向前循环,元素插入的顺序就变为从后向前插入的,后插入的位置自然放后,所以正好是稳定的。

    8.2-3

    不稳定

    8.2-4

    C数组中最终存放的是小于等于c的元素个数,所以只要求出C[b]-C[a-1]的值即可。

    8.3-1.略。

    8.3-2

    插入排序和归并排序是稳定的,快速排序和堆排序是不稳定的。为每个元素从[大到小增加一个编号,当两个元素相等的时候就比较编号。带来的额外空间花费是O(n)。

    8.3-3

    在证明排序第d位有两个相等元素并不改变d-1位已经排好元素的顺序的时候。

    8.3-4

    把这n个数看成n进制的数,那么只需要3位即可对0到n3-1的数进行排序。很显然基数排序,时间复杂度是O(n)。

    8.3-5

    排序第i位十进制数需要10i-1遍,所以等比数列求和可得最坏情况学(10d-1)/9遍,在最坏情况下工序10d个堆。

    8.4-1.略。

    8.4-2

    如果所有元素都不幸的被放在同一个桶中,那么对n个元素进行插入排序,就是最坏运行时间Θ(n2)。对每一桶内的排序选用最坏运行时间为Θ(nlgn)的排序算法。

    8.4-3

    根据概率论相关知识,可以很简单的算出:E[X2]=3/2,E2[X]=1。

    8.4-4

    明显类似桶排序,数据服从均匀分布,分成n个桶,每个桶半径的差值为1/n。

    8.4-5

    Thinking Problems

    8-1

    a.n个互异的输入元素共有n!中输入,所以到达每个叶子节点的概率为1/n!,没有其他的情况,所以概率为0。

    b.画出决策树就很显然可以看出了。

    c.

    8-2

    a.计数排序。

    b.快速排序。

    c.插入排序。

    d.a可以,b不可以,因为是不稳定的,c不可以,因为最坏运行情况是Θ(n2)。

    e.将书中计数排序最后一步的改为i从1到A.length的循环,这样,每次都把等于i的元素依次放入A中,直到c[i]=0,再继续外层循环。

    但是这个算法却不是稳定的。

    8-3

    a.先用计数排序对数字的位数进行排序需O(n),再用计数排序分别对每个位数的桶进行排序也是O(n)。

    b.递归调用计数排序。

    8-4

    a.最简单的穷举算法,一个一个一一比较即可。

    b.

    c.从红色水壶中随机选择一个,以这个红色水壶为主元,对蓝色水壶进行划分,此时可以找到一个与其相等水量的蓝色水壶,再用这个蓝色水壶对红色水壶进行划分,之后递归调用这些步骤,有点类似于快速排序。

    8-5

    a.就代表这个数组是排序的。

    b.略。

    c.因为数组A是k排序的,那么将原式展开化简即可得到A[i]≤A[i+k]。

    d.分别对1,1+k,1+2k,1+3k......;2,2+k,2+2k,k,k+k,k+2k...排序,每段有n/k个元素,共有k段,所以利用归并排序可以在O(nlg(n/k))时间内对其排序。

    e.共有k段,每一段有n/k个元素,对其进行堆排序。如6.5-9中,所以可在O(nlgk)时间内完成。

    f.比较排序的下界是nlgn,所以共有k段元素,每段n/k个元素,所以需Ω(nlgn/k)的时间复杂度。

    8-6

    a.(2n)!/(n!)2

    后面不会证明,希望网友们告知正确答案

    8-7

    列排序,0-1引理甚是高明,但真心不会证明。

     (若有错误和不足,欢迎大家积极指正!)

  • 相关阅读:
    学习手机安全卫士项目源码记录(一)
    AIDL Service
    让一个Activity在开机后自动显示
    如何拦截手机屏幕休眠和唤醒动作
    润前报表简单问题
    javaEE框架的session获取
    UEditer使用
    jQuery动态绑定生成的元素
    javadoc 生成乱码
    个人异常收集_SE_EE_WEB...
  • 原文地址:https://www.cnblogs.com/hlj-ljz/p/3403814.html
Copyright © 2011-2022 走看看