以下是来自 Richard Bird 的 Functional Algorithm Design Pearls(2010年)第6页内容的翻译:
对于纯函数式编程人员,更新操作在数组大小的对数时间内完成。公平地说,过程式编程人员也认为,只有在数组很小的情况下才能实现常数时间索引和更新。
何时会出现非常数时间访问数组的情况?这与 CPU 缓存有关吗?
以下是来自 Richard Bird 的 Functional Algorithm Design Pearls(2010年)第6页内容的翻译:
对于纯函数式编程人员,更新操作在数组大小的对数时间内完成。公平地说,过程式编程人员也认为,只有在数组很小的情况下才能实现常数时间索引和更新。
何时会出现非常数时间访问数组的情况?这与 CPU 缓存有关吗?
需要明确的是,我并不是说你不应该了解底层实现细节和工作原理,因为它们会影响你编写的软件的性能..但是把这两者混在一起是没有意义的。例如,说“数组没有常数时间访问(使用索引)”,这样的说法有意义吗?
就像我的苹果和橙子例子一样,当您阅读我越来越荒谬的例子时,希望我要表达的观点是清楚的。
结论 - 任何一天,我都会回答问题“数组是否具有常数时间O(1)访问(使用索引)”,答案是是的..毫无疑问或如果和但是,他们确实。