热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

算法导论第四章4.1节代换法课后答案

第四章递归式4.1-1证明T(n)T(n2)+1的解为O(lgn).这个递归式和书中的T(n)T(n2)+T(n2)

第四章递归式
4.1-1 证明T(n)=T(n/2)+1的解为O(lgn).
这个递归式和书中的T(n)=T(n/2)+T(n/2)+1很像。
同时也猜测是否也差了一个常数1。
所以很多答案作者就自热而然的猜测出需要减去一个低阶项。既T(n)<=clg(n-b)
就有如下答案了。
假设T(n/2)<=clg(n/2-b)成立。 
T(n)=T(n/2)+1<=clg(n/2-b) +1
             <=clg(n/2-b+1) +1
              =clg((n-2b+2)/2)+1
              =c(lg(n-2b+2)-lg2)+1
              =clg(n-2b+2)-c+1
              =clg(n-b-b+2)+1-c  ....(1)
当-b+2<=0和1-c<=0时(c>=1&&b>=2)
            (1)<=clg(n-b) 得证。


以下是我个人的解决方案。
因为要证明T(n)=O(lgn) 所以就要证明T(n)<=clgn c为一个常数。
假设T(n/2)<=clg(n/2)成立
T(n)=T(n/2)+1<=clg(n/2)+1
              =c(lgn-lg2)+1
              =clgn-clg2+1
              =clgn-c+1
当-c+1<=0时(c>=1)<=clgn 得证。
这里由于-c+1可能不是一个正数,所以c必有一个界,使得常数项为负数,
从而能够证明原题。书上给出的含有常数项的式子中的c不能给出一个界,
所以才用到了减常数项的方法。以上仅是我个人观点,如有问题请留言!    


4.1-2 证明T(n)=2T(n/2)+n的解为Ο(nlgn),同时这个递归解也是Ω(nlgn).
得到解为Θ(nlgn).
证明Ο(nlgn)成立。
假设T(n)=Ο(nlgn)在n/2成立。所以就有T(n/2)<=c(n/2)lg(n/2)
T(n)=2T(n/2)+n<=2c(n/2)lg(n/2)+n
               =cnlg(n/2)+n
               =cn(lgn-lg2)+n
               =cn(lgn-1)+n
               =cnlgn-cn+n
当-c+1<=0时(c>=1)<=cnlgn 得证。 

证明Ω(nlgn)成立。
假设T(n)=Ο(nlgn)在n/2成立。所以就有T(n/2)>=c(n/2)lg(n/2)
T(n)=2T(n/2)+n>=2c(n/2)lg(n/2)+n
               =cnlg(n/2)+n
               =cn(lgn-lg2)+n
               =cn(lgn-1)+n
               =cnlgn-cn+n
当-c+1>=0时(c<=1)>=cnlgn 得证。

如果要使 Ο(nlgn)成立,同时Ω(nlgn)也成立 。那么当仅当c=1时才能使
Θ(nlgn)成立。


4.1-3 证明:通过作不同的递归假设,对递归式4.4我们可以克服在证明边界条件T(1)时的困难
也无需调整归纳证明中的边界情况。
与原文不同的猜想:T(n)=O(nlgn+n)
假设T(n)在n/2上成立,所以
T(n/2)<=c((n/2)lg(n/2)+n/2)
T(n)<=2c((n/2)lg(n/2)+n/2)+n  
T(n)<=2cn/2(lg(n/2)+1)+n
T(n)<=cnlgn+n
T(n)<=c(nlgn+n)+(1-c)n
当1-c<=0(c>=1)时,T(n)<=c(nlgn+n) 
这样就可以克服在证明边界条件T(1)时的困难。
也无需调整归纳证明中的边界情况。


4.1-6 通过改变求解递归式T(n)=2T(√n)+1.得到的解应当是渐近紧确的。不必担心值是否为整数。
设m=lgn(这个代数变换源于原书中所给例子)
n=2^m=>T(2^m)=2T(2^(m/2))+1
设S(m)=T(2^m)=>S(m)=2S(m/2)+1 
由于没有学到递归树和主方法,所以在某些答案中提前用到这个知识并不妥。
于是我就想到,这个和原书给的含有常数项但无法证明出期望的结果一样,
必须减去一个低阶项,所以就有S(m)<=cm-b (b>=1,c足够大)
S(m)=T(2^m)=T(n)<=clgn-b<=clgn 所以T(n)=O(lgn)



推荐阅读
  • 本文通过个人经历引出关于数学教学中的一个常见误解——被零除的结果,并深入探讨了浮点数中负零的存在及其背后的数学原理。 ... [详细]
  • 本文详细解析了LeetCode第300题——最长递增子序列的解题方法,特别是如何使用动态规划来高效解决问题。文章不仅提供了详细的代码实现,还探讨了常见的错误理解和正确的解题思路。 ... [详细]
  • 本文探讨了Lua中元表和元方法的使用,通过具体的代码示例展示了如何利用这些特性来实现类似C语言中的运算符重载功能。 ... [详细]
  • Java数组面试常见问题及解析
    在Java编程面试中,数组作为基础且重要的知识点,经常成为考察的重点。本文将探讨数组的基础知识和相关面试题,帮助考生更好地准备面试。 ... [详细]
  • 本文介绍了一个基础算法题目,旨在通过求解特定范围内所有数字的阶乘之和来提升编程技能。重点在于理解和实现双重循环结构。 ... [详细]
  • 本文详细介绍了在使用Node.js处理JWT时遇到的'invalid algorithm'错误的解决方案。问题源于生成和验证token时使用的算法不一致,具体表现为生成token时使用HS256算法,而在验证时误用了RS256算法。 ... [详细]
  • 计算机视觉初学者指南:如何顺利入门
    本文旨在为计算机视觉领域的初学者提供一套全面的入门指南,涵盖基础知识、技术工具、学习资源等方面,帮助读者快速掌握计算机视觉的核心概念和技术。 ... [详细]
  • 【Java数据结构和算法】008栈
    目录0、警醒自己一、栈的应用场景和介绍1、栈的应用场景一个实际的场景:我的思考:2、栈的介绍入栈演示图:出栈演示图 ... [详细]
  • 深入理解Git与GitHub:分支管理与冲突解决
    本文详细探讨了Git中的分支管理技术,包括如何创建、切换和合并分支,以及如何有效解决分支合并时可能遇到的冲突。同时,文章还介绍了Git的基本原理,如哈希算法的应用和文件管理机制。 ... [详细]
  • 本章节深入讨论了线性光与感知均匀性的概念,强调了灰度图像中每个像素值如何反映视觉亮度的主观性质。文章进一步解析了亮度与光强度、辐射等物理量的区别,并探讨了这些概念在数字图像处理中的应用。 ... [详细]
  • 本文介绍了两种在MATLAB中用于识别和提取图像中封闭孔洞及其边界的高效方法。第一种方法通过图像填充和差分操作实现;第二种方法则基于Flood-Fill泛洪算法。 ... [详细]
  • 本文探讨了如何通过积累团队管理经验、促进团队成员的学习成长、建立公正的绩效考核体系以及明确奖惩机制来提升团队的整体效能。同时,文章还强调了领导者应具备的关键能力和如何通过团队成员的表现来评估领导者的管理水平。 ... [详细]
  • 多用户密码验证与加密登录系统
    本文介绍了一种基于多用户密码文件的加密登录方法,通过读取用户密码文件并使用简单的加密算法实现安全登录。文中详细描述了程序的设计思路及其实现过程。 ... [详细]
  • 本文通过一个经典问题——使用最少的老鼠在限定时间内找出含有毒药的瓶子,深入探讨了二分法的应用及其背后的逻辑原理。不仅展示了二分法在非传统排序问题中的有效应用,还扩展讨论了三分法的可能性与限制。 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
author-avatar
静风疾水
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有