algorithm - Big-O 表示法和时间复杂度混淆
问题描述
我们的老师给了我们这个关于时间复杂度分析的小组作业。
一个算法需要 100 秒来处理 5000 条数据,如果需要 2400 秒来处理 400000 条数据,那么这个算法的时间复杂度近似值是多少?(大 O 表示法)
我们制作了这个 Python 脚本来近似大 O 符号。
import math
def O(n):
return (n**(1/4))*(math.log(n, 2)**5)
print(O(400000)/O(5000)) # Prints 23.82907726248897 this is the best approximation we've got
此外,我们已经讨论了很远,关于其中一些符号,它们是否相同?
- O(2^n) 和 O(3^n)
- O(n^k) 和 O(n^(k+1))
- O(n^(1/2)) 和 O(n^(1/3))
先感谢您。
解决方案
我认为您对小组作业的近似值已经足够了。干得好!但是人们很少以黑盒方式(计算时间和近似值)分析他们的程序,因为人们总是知道算法和实现。所以不要把作业看得太认真;)
正如您所提到的,以下符号对确实是不同的:
- O(2^n) 和 O(3^n)
- O(n^k) 和 O(n^(k+1))
- O(n^(1/2)) 和 O(n^(1/3))
每对符号之间都有不可忽略的间隙。
推荐阅读
- spring-boot - 为什么我的 Spring MVC(Tomcat NIO、RestHighLevelClient)在负载测试中优于 Webflux(Netty、ReactiveElasticsearchClient)?
- javascript - 尝试更新板,但返回 true
- javascript - 有没有办法让 JQuery 动画功能阻塞
- python - 无法在开发模式下启动 Plaid 快速入门应用
- android - 如何关闭我的 esp32 无源蜂鸣器?
- java - Java.lang.ArithmeticException:/LinearProbingHashSet 中的零
- ios - 点击 UITextField 时,出现 DatePicker
- api - 如何关闭谷歌地图并只显示路线?
- javascript - 提到的User.joinedAt 返回“未定义”
- javascript - 访问 XMLHttpRequest 已被 CORS 阻止,尝试一切仍然失败