0

私はCore FoundationとCFDictionaryを調べていましたが、Appleのドキュメントでこれを見つけました。

CFDictionary オブジェクトの値のアクセス時間は、どの実装でも最低でも O(log N) であることが保証されていますが、多くの場合 O(1) (一定時間) です。通常、挿入または削除操作も一定の時間で行われますが、最悪の場合は O(N*log N) になります。値に直接アクセスするよりも、キーを介して値にアクセスする方が高速です。辞書は、同じ数の値を持つ配列よりもはるかに多くのメモリを使用する傾向があります

驚いたことに、CFDictionary ソースで、これを見つけました。

ディクショナリ内の値のアクセス時間は、現在および将来のすべての実装で最悪 O(N) であることが保証されていますが、多くの場合 O(1) (定数時間) になります。挿入または削除操作も通常は一定時間ですが、実装によっては最悪の場合 O(N*N) になります。キーを介した値へのアクセスは、値に直接アクセスするよりも高速です (そのような操作がある場合)。辞書は、同じ数の値を持つ配列よりもはるかに多くのメモリを使用する傾向があります。

なんでこんなに違うの…?または私は間違った場所を見ていますか?

編集:アップルの OpenSource Browserに、Core Foundation の異なるバージョンのように見えるフォルダーが非常に多くあるのはなぜですか..? それらのうちどれが最新/関連性がありますか?

4

1 に答える 1

0

「一部の実装では」。ソースがあるので、実装にとって最悪のケースが何であるかを簡単に確認できます。最悪の場合、ディクショナリ内のすべてのオブジェクトが 0 のハッシュ値を返すと仮定します :-)

ところで。最悪のケースは、ハッシュ テーブルがいっぱいになり、完全に再構築されたときに発生します。そのため、単一の挿入の最悪の時間が重要でない限り、最悪の時間ではなく、償却された時間に使用します。

于 2014-10-02T12:09:40.867 に答える