CFDictionary的计算复杂性

时间:2014-10-02 12:01:54

标签: ios core-foundation cfdirectory

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

  

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

令我惊讶的是,在CFDictionary source,我找到了这个,

  

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

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

编辑:在apple OpenSource Browser中,为什么有这么多文件夹似乎是不同版本的Core Foundation,是吗......?哪些是最新的/相关的?

1 个答案:

答案 0 :(得分:0)

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

顺便说一句。当哈希表变满并完全重建时,最糟糕的情况就会发生。这就是为什么你在摊销时使用的原因,而不是在最糟糕的时候,除非单次插入的最差时间对你很重要。