質問

ある資源の漸近的計算量(ビッグ-Oの他の方法です。純コレクションクラス(Dictionary<K,V>, List<T> など---)?

のを知っているC5図書館のドキュメントを含むについての情報でものに興味がある私にとってます。純集。(PowerCollectionsの情報もあくまでも目安となります。

役に立ちましたか?

解決

MSDNこれらのリスト:

など。例えば:

のSortedList(TKey,TValue一般 クラスはバイナリ検索としたツリー O(log n)の検索と 要素数を辞書で調べました。これと同様の SortedDictionary(TKey,TValue一般 クラスです。二つの教室が似てい オブジェクトモデルとO(log n) 検索。の二つのクラス が異なるメモリ使用速度 挿入、削除:

SortedList(TKey,TValue)使用 メモリによSortedDictionary(TKey, TValue).

SortedDictionary(TKey,TValue) 高速挿入と削除 業務用紙データをO(log n) に対してO(n) SortedList(TKey,TValue).

場合のリストは人口のすべてを一度に からのソートデータSortedList(TKey, TValue)よりはるかに高 SortedDictionary(TKey,TValue).

他のヒント

このページ 顕著な遅の時間comlplexitiesのための各種収集タイプとJava、もう全く同じです。います。

私のテーブルからページの変化を生じ/拡大します。NET framework.も参考にしてくださいMSDNページ SortedDictionarySortedList, は、詳細に複雑に必要な多彩な事業展開を行っています。


検索

種検索/コレクションの種類複雑さのコメント
Linear search Array/ArrayList/LinkedList  O(N)        Unsorted data.
Binary search sorted Array/ArrayList/     O(log N)    Requires sorted data.
Search Hashtable/Dictionary<T>            O(1)        Uses hash function.
Binary search SortedDictionary/SortedKey  O(log N)    Sorting is automated.

検索および挿入

配列の操作/ArrayList LinkedList SortedDictionary SortedList
Access back       O(1)             O(1)        O(log N)          O(log N)
Access front      O(1)             O(1)        N.A.              N.A.
Access middle     O(1)             O(N)        N.A.              N.A.
Insert at back    O(1)             O(1)        O(log N)          O(N)
Insert at front   O(N)             O(1)        N.A.              N.A.
Insert in middle  O(N)             O(1)        N.A.              N.A.

削除されていてとて複雑化し挿入のために収集します。

SortedListは、いくつかの顕著な特殊性のための挿入および検索。

挿入を追加方法:

このメソッドはO(n)の操作 紙データです。であ O(log n)の操作の場合は新しい 要素できるものではありませんの 一覧です。る場合の挿入の原因になサイズの変更 操作はO(n)

検索(商品):

検索このプロパティの値 でO(log n)の操作が 数です。設定には O(log n)の操作の場合は、キーが 既にSortedList<( <(TKey, TValue>)>).そのキーがないの リスト設定にはO(n) 運用紙データ、またはO(log n)の場合は新しい要素できるものではありません 終了をクリックします。る場合の挿入の原因に リサイズは動作にはO(n)

ご注意 ArrayList に相当 List<T> の複雑さのすべての事業です。


私は、一般的には知らない(他の答えはちょうど、おそらくあなたが後にしている正確に何を与え掲載) - しかし、あなたはこれと(真FSharpコードと少しぎこちない、)ILSpyを使用して、もちろん他の方法を反映することができ、これは、最終的にはC#のように、この機能をもたらします:

internal static a maximumElementAux<a>(SetTree<a> s, a n)
{
  while (true)
  {
    SetTree<a> setTree = s;
    if (setTree is SetTree<a>.SetOne)
    {
      break;
    }
    if (setTree == null)
    {
      return n;
    }
    SetTree<a>.SetNode setNode = (SetTree<a>.SetNode)s;
    SetTree<a> arg_23_0 = setNode.item3;
    n = setNode.item1;
    s = arg_23_0;
  }
  return ((SetTree<a>.SetOne)s).item;
  return n;
}

さてこれは、C#の点で正確に「適切な」コードではありません - しかしwhile(true)ループの存在は、それが少なくともO(1)にすることはできません意味します。それは実際にある何のためとして...よく、私の頭が出て見つけることがあまりにも多くを痛い:)

このページでは、ほとんどの.NETコレクションのためのいくつかの重要な長所と短所についての短いノートを提示します:

http://geekswithblogs.net/BlackRabbitCoder/archive/2011/06/16/c.net-fundamentals-choosing-the-right-collection-class.aspxする

「コレクションクラスの複雑さ」のようなものはありません。むしろ、これらのコレクションに異なる操作が異なる複雑さを持っています。例えば、Dictionary<K, V> ...

  

... O(1)の動作に近づきます。容量は、新しい要素を収容するために大きくしなければならない場合、このメソッドはnCountあるのO(N)の動作となります。

Dictionary<K, V>から要素を取得するのに対し ...

  

...(1)運転Oに近づく。

ドキュメントは、バイナリツリーの上に構築され、そして最大の要素を追跡言及していないと言います。ドキュメントが正しい場合、それはそれはO(ログn)でなければならないことを意味します。そこのコレクションのドキュメント(バイナリ検索ツリーとして配列担保データ構造を参照)内に少なくとも1つのミスでしたが、それは修正されました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top