Show that the solution to T(n)=2T(n/2+17)+n is O(nlgn)//lgn是以2为底的

frog2006 2006-04-22 01:17:56
不知道如何去证明,大家帮我想想办法,我的分数也不多了,就给10分吧!
...全文
1680 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CD2006 2006-04-24
  • 打赏
  • 举报
回复
呵呵,看到你的信息了,谢谢!我也回了短消息!

你的来信主要是集中在我不能丢弃17的问题上,显然,只要充分说明丢弃17,不影响最后结果就行了,如果不影响最后结果,带着它又有什么意义呢?反而使整个证明晦涩。

O表示复杂度,本身就是近似的,所以只要找到算法的最高阶项,就可以了,如果你觉得17不能丢弃的话,那我还想说,为什么证明中,n可以假设成2的整幂次呢?(不妨去看看一般的算法分析书)你要严格说明的话只能假设: 2^(m-1) < n <= 2^m,然后带着顶函数或底函数往下证明,这明显是不必要的。

如果你能说明你的近似不影响最终结果,那么就不失去数学的严格性。而且这种简化应当积极采纳,因为你的证明将更简洁,更容易被更多的人看懂。

也是因为编辑和版面的原因,不能写的更好,希望能原谅,书面表达肯定更好。

最后你觉得我的证明走了弯路,想恳请你再指点一二,谢谢!!
frog2006 2006-04-24
  • 打赏
  • 举报
回复
小英雄,我已经给你发过短消息了
CD2006 2006-04-24
  • 打赏
  • 举报
回复
呵呵,为何?敢请frog2006(青蛙)指点一下?
frog2006 2006-04-24
  • 打赏
  • 举报
回复
楼上的朋友,你的方法证明的不对!
CD2006 2006-04-24
  • 打赏
  • 举报
回复
清华的那本算法设计与分析的书上好像有这类递归方程的一般通解式
CD2006 2006-04-22
  • 打赏
  • 举报
回复
算了,本来想让你自己解出来的,但忍不住杀题欲望:
首先补一个边界条件:T(0)=h; h为常数;
为了求O表示的时间复杂度,常量级的17可以省去不考虑,直接设n=2^k
那么原方程转化为:T(2^k)=2*T(2^(k-1))+2^k;
令:g(k)=T(2^k),则方程进一步转化成:
g(k)=2(k-1)+2^k;
通过迭代可得:g(k)=2^m * g(k-m) + m * 2^k;
m = k时;
g(k)=2^k * g(0) + k * 2^k;
because : g(0)=h;
so: O(g(k))=O(2^k * h + k * 2^k)=O(k * 2^k)=O(nlogn)

证毕收工
jp1984 2006-04-22
  • 打赏
  • 举报
回复
发现大家写递归方程总不给初始条件.
CD2006 2006-04-22
  • 打赏
  • 举报
回复
通常都是使用展开递归式的方法来解这类方程

33,026

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧