【发布时间】:2016-03-22 15:16:30
【问题描述】:
我已经看到了为什么 RAM is accessed in constant 时间 (O(1)) 以及为什么是 accessed in logarithmic time (O(n)) 的解释。坦率地说,这对我来说都没有多大意义。 big-O 符号中的n 是什么?使用 big-O 测量物理设备的运行速度有何意义?我理解在线性时间内访问 RAM 的一个论点是,如果您有一个数组 a,那么第 k 个元素将位于地址 a+k*size_of_type(点是地址可以很容易地计算)。如果你知道你想去load 或store 的地址,这难道不是一个恒定的时间量吗?有人告诉我在 RAM 中查找某些内容(例如数组中的元素)比O(n) 需要更长的时间,因为它需要找到正确的页面。这是错误的,因为分页与硬盘有关,而不是 RAM。
【问题讨论】:
-
“分页与硬盘有关,而不是 RAM。” 远非如此。在嵌入式实现中,当可用 RAM 超过可直接寻址时,可以对 RAM 进行分页。
-
访问一个数组的一个元素是O(1)。读取 整个 数组是 O(n)。线性时间,不是对数。它不像 O(n) 那样灵活地扩展,处理器缓存和驱逐其他 RAM 页面的需要可能使其非常不规则。但是大哦不担心这个。
-
在我看来,您不了解大 O 复杂性的概念,我强烈建议您先阅读该内容。您将算法复杂性与硬件实现细节混合在一起。此外,每个现代 CPU 都使用分页和分段来解决内存碎片问题,如果没有其他问题的话。例如,谷歌“TLB”。
-
-
Big-O 与读取数据所需的时间无关。读取一个字节可能需要一个小时,如果时间相同,则无论数据量(即 RAM 大小)如何,仍然是 O(1)。