0

我正在研究 Core Foundation 和 CFDictionary,在Apple 文档中我发现了这个,

对于任何实现,CFDictionary 对象中值的访问时间保证在最坏情况下为 O(log N),但通常为 O(1)(恒定时间)。插入或删除操作通常也是在恒定时间内进行的,但在最坏的情况下是 O(N*log N)。通过键访问值比直接访问它们更快。字典往往比具有相同数量值的数组使用更多的内存

令我惊讶的是,在CFDictionary source中,我发现了这个,

对于任何当前和未来的实现,字典中值的访问时间保证在最坏的情况下为 O(N),但通常为 O(1)(恒定时间)。插入或删除操作通常也是常数时间,但在某些实现中最坏的情况是 O(N*N)。通过键访问值比直接访问值更快(如果有任何此类操作)。与具有相同数量值的数组相比,字典往往会使用更多的内存。

为什么会有这样的差异..?还是我找错地方了?

编辑:在苹果 OpenSource Browser中,为什么有这么多看起来像 Core Foundation 不同版本的文件夹,是吗?其中哪一个是最新的/相关的?

4

1 回答 1

0

“在某些实现中”。由于您有源代码,因此您可以轻松检查最坏的情况是您的实现。对于最坏的情况,假设字典中的每个对象都返回 0 的哈希值 :-)

顺便提一句。当哈希表已满并完全重建时,将发生最坏的情况。这就是为什么您在摊销时间使用,而不是在最坏时间使用,除非单次插入的最坏时间对您很重要。

于 2014-10-02T12:09:40.867 回答