算法设计技巧与分析习题参考答案.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
习题4.13 (b)元素最大交换次数:A9~A5 各1次;A4~A3 各2次;A2最多3次;A1最多4次(最多共需16次元素交换 4.13另解: 考虑第i个节点,其子节点为2i,则最多可交换1次; 若子节点有子节点22i, 则最多可交换2次; 若…..有子节点i×2k, 则最多可交换k次; 因此有 i×2k ≤ 19 求出满足上述不等式的最大的k值即可。 i=1时, k=4; i=2时, k=3; i=3或4时, k=2; i=5~9时, k=1; 因此最多交换4+3+2×2+1×5=16次 6.5 用分治法求数组A[1…n]元素和,算法的工作空间是多少? 输入:数组A[1…n] 输出:数组的所有元素之和∑A[i] {i=1…n} SUM(low, high) if high = low then return A[low] else mid←((low+high)/2( s1←SUM(low,mid) s2←SUM(mid+1, high) return s1+s2 end if 工作空间:mid~((logn), s1s2~((1)(后序遍历树,不断释放空间,故为常数((1)),总的工作空间为((logn). 6.6 用分治法求元素x在数组A中出现的频次。 freq(A[low, high], x) if high=low then if A[low]=x then return 1 else return 0 end if else mid ←((low+high)/2( f1 ←freq(A[low, mid]) f2 ← freq(A[mid+1, high]) return f1+f2 end if 复杂度:T(n)=T((n/2()+ T((n/2()≈2T(n/2) (设2k≤n2k+1) =…=2kT(n/2k) =2kT(1) = n 6.16修改后的MERGESORT算法 最大比较次数 最小比较次数 令n/2k=m≥2,展开可知: T(n)= 2kT(n/2k) + kn - (2k-1) = n/m×m(m-1)/2 + nlog(n/m)- n/m+1 = n(m-1)/2 + nlog(n/m) -n/m+1 若T(n)=((nlogn), 其中表达式有nm, nlogn, nlogm, n/m等. 有n/m nlogm nm 且须有nm=O(nlogn), i.e., nm ≤ c·nlogn, 则须有m≤c·logn. 可令c=1,则m≤logn. 另一方面, C(n) = 2kC(n/2k)+kn/2 = n/m×(m-1) + (n/2)log(n/m)= ((nlogn) 6.35 split(A[low,...high]) 1. x←A[low] //备份为x 2. while (lowhigh){ 3. while (lowhigh A[high]0) --high; 4. A[low] ←A[high] 5. while (lowhigh A[low]≤0) ++low; A[high] ←A[low] } A[low] ← x //这时, low=high 7.3 动态规划法计算二项式系数,并分析其时间复杂度。 1. for i←1 to n 2. C[i,0] ← 1; C[i, i] ←1 3. end for 4. for i←2 to n 5. for j←1 to i-1 / min(k, i-1) //例如计算C[6,2] 6. C[i,j] ←C[i-1,j-1] + C[i-1,j] 7. end 8. end for 9. return C[n.k] 复杂度分析: 或 硬币的面值为1, 2, 4, 8, ..., 2k, 要兑换的值n2k+1,用贪心算法解这个问题,要求算法复杂度为O(logn) 输入:k+1个不同硬币的面值,其中包括单位币(面值为1) 输出:若要兑换的值n,给出各个面值硬币的数目num[0…k] 将k+1个不同的面值按递增顺序排列,记为Value[0...k] num[0…k]←0 for j← k downto 0 num[j] ← (n/Value[j]( n←n - num[j]×Value[j] end for return num[0…k] 8.16 修改Dijkstra算法,使它找出最短路径和它的长度。 1. X={1}; Y←V-{1}; λ[1]←0; pre[1]←0; 2. for y←2 to n 3. if y 相邻于1 then λ[y]←lengt

文档评论(0)

***** + 关注
实名认证
文档贡献者

本账号下所有文档分享可拿50%收益 欢迎分享

1亿VIP精品文档

相关文档