首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Big-O算法分析

Big-O算法分析
EN

Stack Overflow用户
提问于 2009-10-18 22:22:31
回答 2查看 1.2K关注 0票数 2

问题:alt text http://img12.imageshack.us/img12/2706/image2ot.jpg

我做了什么:alt text http://img29.imageshack.us/img29/9192/image3sc.jpg

但我完全不知道3.5和3.6之间的区别。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-18 22:40:30

如果你在3.5版本的解决方案中稍微小心一点,区别就会更明显一些。你的第一句话

代码语言:javascript
运行
复制
T(n) <= n/4 (lg n)/4 + 3n/4 (3 lg n)/4 + n

是不太正确的。首先,归纳假设是存在一个常数C,使得

代码语言:javascript
运行
复制
T(n) <= C n log n

所以你可能应该把那个C放在身边。其次,您跳过了删除floor函数的步骤。您真正知道的是(为了简单起见,忽略常量C )是

代码语言:javascript
运行
复制
T(n) <= floor(n/4) lg (floor(n/4)) + floor(3n/4) lg (floor(3n/4)) + n

那么你是如何打理地板的呢?好吧,floor(x) <= x;但是lg(floor(x)) (它出现了两次)呢?这里的关键是lg是一个递增的函数,所以lg(floor(x)) <= lg(x)也是。所以

代码语言:javascript
运行
复制
T(n) <= n/4 lg(n/4) + 3n/4 lg(3n/4) + n

现在使用对数的一些属性来清理它(您将需要使用关于lg 3的提示),并完成归纳步骤。

好了,知道了这一点,3.6有什么不同?好了,现在你有了天花板函数,而不是地板函数,所以你不能忽略它。但

代码语言:javascript
运行
复制
ceiling(x) <= x + 1

因此,您可以使用类似的方法,但需要一些额外的+ 1因素。尝试使用他们的提示,这应该是好的。

票数 10
EN

Stack Overflow用户

发布于 2009-10-18 22:29:47

3.5和3.6之间的区别是T(n/4)中的ceil和floor函数。除此之外,它们是相同的。据我所知,差异对O(T(n))的计算并不重要,正如您可以从预期结果中看到的那样。

我希望这能帮到你。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1586189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档