【发布时间】:2014-10-02 12:01:53
【问题描述】:
我正在研究 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 的文件夹,是吗..?其中哪些是最新的/相关的?
【问题讨论】:
-
“大 O” 的计算无论如何都是很多的。如果散列很差,那么 O(log N) 数就超出了窗口。并且给定的插入可能会导致分裂并且比平均时间长 1000 倍。
-
@HotLicks ,我同意,我只是出于好奇想知道,为什么源代码中的文档和 cmets 会有差异。
标签: ios core-foundation cfdirectory