【问题标题】:Largest puzzle solvable in one second, assuming it takes f(n) microseconds?假设需要 f(n) 微秒,可在一秒钟内解决的最大难题?
【发布时间】:2011-09-07 21:53:55
【问题描述】:

我有这个问题:

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

假设问题需要 f(n) 微秒,在一秒钟内可以解决的问题的最大大小 n 是多少?

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

log(n) = 1000000

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

【问题讨论】:

  • 这个等式肯定少了一个大哦。

标签: performance math time execution-time


【解决方案1】:

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

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

【讨论】:

  • 严格来说你不能“说 O(log(n)) 算法非常快”。 O() 是关于在极限内发生的事情,不一定是关于 n 的任何现实世界值。剖析通常是了解算法实现有多快的唯一方法。
【解决方案2】:

你的数学是正确的。

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

所以每次你挑选一个孩子,你就砍掉了一半的树。一开始你有 2^1 000 000 个节点。当您下一个子节点时,您有一半的节点,即 2^999 999。经过 100 万次操作后,您应该位于包含您要查找的节点的叶子节点。

【讨论】:

  • 换一种说法,如果你能把解空间减半一百万次,那么它就是一个该死的大解空间。
  • 换个角度想一想……如果你把一张纸对折 42 次,它就足够高到可以到达月球……每折一次,纸张的大小就翻了一番,因此,如果您可以将一张纸折叠成 50 万次,那将比理解的要大。
  • 换一种说法,如果你将可观测的宇宙切成两半,大约 614 次,你就会得到一个立方普朗克长度,表面上是有意义的最小体积。
猜你喜欢
  • 1970-01-01
  • 2022-07-26
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2014-07-10
相关资源
最近更新 更多