我有这个问题:
f(n) = log(n) (it's log base 2 btw)
如果问题需要f(n)微秒,那么一秒内可以解决的问题的最大尺寸n是多少?
好吧,因为f(n)是log(n),问题需要log(n)微秒,对吗?一秒钟就有一百万微秒,对吗?所以我把它设置成这样:
log(n) = 1000000
但是这给了2 ^ 1000000作为答案,这是一个绝对令人讨厌的巨大数字。我做错了吗?
答案 0 :(得分:3)
没关系。 O(log(n))算法非常快。
当然在现实生活中,f(n)永远不会是log(n),如果你正在处理一些数据集,你将耗尽内存并开始打到磁盘,这将是慢一点,稍后你将耗尽地球上的所有磁盘空间......
答案 1 :(得分:3)
你的数学是正确的。
在log(n)时间内运行的算法可以将问题的大小每次减少一半。一个例子是在二叉搜索树中找到一个项目。最糟糕的情况是,如果您要查找的项目位于其中一个叶子中。
因此,每当你选择一个孩子时,你就砍掉了一半的树。一开始你有2 ^ 1 000 000个节点。当你下到下一个孩子时,你有一半的节点,2 ^ 999 999.经过100万次操作后,你应该在包含你正在寻找的节点的叶子上。