假设它需要f(n)微秒,在一秒钟内可以解决的最大难题?

时间:2011-09-07 21:53:56

标签: performance math time execution-time

我有这个问题:

f(n) = log(n) (it's log base 2 btw)

如果问题需要f(n)微秒,那么一秒内可以解决的问题的最大尺寸n是多少?

好吧,因为f(n)是log(n),问题需要log(n)微秒,对吗?一秒钟就有一百万微秒,对吗?所以我把它设置成这样:

log(n) = 1000000

但是这给了2 ^ 1000000作为答案,这是一个绝对令人讨厌的巨大数字。我做错了吗?

2 个答案:

答案 0 :(得分:3)

没关系。 O(log(n))算法非常快。

当然在现实生活中,f(n)永远不会是log(n),如果你正在处理一些数据集,你将耗尽内存并开始打到磁盘,这将是慢一点,稍后你将耗尽地球上的所有磁盘空间......

答案 1 :(得分:3)

你的数学是正确的。

在log(n)时间内运行的算法可以将问题的大小每次减少一半。一个例子是在二叉搜索树中找到一个项目。最糟糕的情况是,如果您要查找的项目位于其中一个叶子中。

因此,每当你选择一个孩子时,你就砍掉了一半的树。一开始你有2 ^ 1 000 000个节点。当你下到下一个孩子时,你有一半的节点,2 ^ 999 999.经过100万次操作后,你应该在包含你正在寻找的节点的叶子上。