"ImmutableVector" (データ構造)

"ImmutableVector"

変更が新しいデータ構造を生成し,要素が一般式である不変ベクトルを表す.

詳細

  • 不変ベクトルは,存在するデータ構造を変更することなく,効率的に要素を追加したり削除したりするために役立つ.
  • 不変ベクトルは構造共有を使うので,結果として保証はパフォーマンスに縛られる.
  • CreateDataStructure["ImmutableVector"]新しい空の"ImmutableVector"を作成する
    CreateDataStructure["ImmutableVector",elems]elems を含む新しい"ImmutableVector"を作成する
    Typed[x,"ImmutableVector"]x"ImmutableVector"型を与える
  • "ImmutableVector"型のデータ構造には,以下の演算が使える.
  • ds["Append",x]xds に付加された新しい不変ベクトルを返すtime: O(log n)
    ds["DropLast"]ds の最終要素を削除した新しい不変ベクトルを返すtime: O(log n)
    ds["Elements"]ds の要素のリストを返すtime: O(n)
    ds["EmptyQ"]ds に要素がない場合には,Trueを返すtime: O(1)
    ds["Fold",fun,init]funds の要素に適用する.init で始めて,結果を累積するtime: O(n)
    ds["JoinBack",elems]elemsds の後ろに繋げるtime: O(nelems)
    ds["Length"]ds に保存される要素の数time: O(1)
    ds["Part",i]dsi 番目の部分を返すtime: O(log n)
    ds["ReplacePart",i,x]i 番目の部分を x で置き換えた新しい不変ベクトルを返すtime: O(log n)
    ds["Visualization"]ds の可視化を返すtime: O(n)
  • 以下の関数もサポートする.
  • dsi===dsjdsidsj に等しい場合はTrue
    FullForm[ds]ds の完全形
    Information[ds]ds についての情報
    InputForm[ds]ds の入力形
    Normal[ds]ds を通常の式に変換する

例題

すべて開くすべて閉じる

  (2)

新しい"ImmutableVector"は,CreateDataStructureを使って作成できる:

要素は追加できる:

長さを返す:

もとのベクトルの長さは変わらない:

第1要素を抽出する:

要素を置き換える:

ds1は変わらない:

ds2の値は置換された:

ds の式バージョンを返す:

要素を付加することは効率的である:

データ構造の可視化が生成できる:

全要素を合計する:

スコープ  (2)

効率性  (1)

"ImmutableVector"は,要素を効率的に追加する:

通常のリスト式はあまり速く追加できない:

連想も速く追加できるが,データの指標ではなく,キーを返す:

情報  (1)

新しい"ImmutableVector"は,CreateDataStructureを使って作成できる:

データ構造 ds についての情報: