"ImmutableVector" (データ構造)
"ImmutableVector" (データ構造)
"ImmutableVector"
変更が新しいデータ構造を生成し,要素が一般式である不変ベクトルを表す.
詳細
- 不変ベクトルは,存在するデータ構造を変更することなく,効率的に要素を追加したり削除したりするために役立つ.
- 不変ベクトルは構造共有を使うので,結果として保証はパフォーマンスに縛られる.
-
CreateDataStructure["ImmutableVector"] 新しい空の"ImmutableVector"を作成する CreateDataStructure["ImmutableVector",elems] elems を含む新しい"ImmutableVector"を作成する Typed[x,"ImmutableVector"] x に"ImmutableVector"型を与える - "ImmutableVector"型のデータ構造には,以下の演算が使える.
-
ds["Append",x] x が ds に付加された新しい不変ベクトルを返す 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] fun を ds の要素に適用し,結果を累積する time: O(n) ds["Fold",fun,init] fun を ds の要素に適用する.init で始めて,結果を累積する time: O(n) ds["JoinBack",elems] elems を ds の後ろに繋げる time: O(nelems) ds["Length"] ds に保存される要素の数 time: O(1) ds["Part",i] ds の i 番目の部分を返す time: O(log n) ds["ReplacePart",ix] i 番目の部分を x で置き換えた新しい不変ベクトルを返す time: O(log n) ds["Visualization"] ds の可視化を返す time: O(n) - 以下の関数もサポートする.
-
dsi===dsj dsi が dsj に等しい場合はTrue FullForm[ds] ds の完全形 Information[ds] ds についての情報 InputForm[ds] ds の入力形 Normal[ds] ds を通常の式に変換する
例題
すべて開く すべて閉じる例 (2)
新しい"ImmutableVector"は,CreateDataStructureを使って作成できる:
ds = CreateDataStructure["ImmutableVector"]ds1 = ds["Append", f[1]]ds1["Length"]ds["Length"]ds1["Part", 1]ds2 = ds1["ReplacePart", 1 -> g[1]]ds1["Part", 1]ds2["Part", 1]Normal[ds2]ds = CreateDataStructure["ImmutableVector"];
Do[ds = ds["Append", i], {i, 1, 1000}]ds["Visualization"]ds["Fold", Plus, 0]スコープ (2)
効率性 (1)
"ImmutableVector"は,要素を効率的に追加する:
ds = CreateDataStructure["ImmutableVector"];
Do[ds = ds["Append", i], {i, 1, 50000}]//AbsoluteTiminglist = {};
Do[list = Append[list, i], {i, 1, 50000}]//AbsoluteTimingassoc = <||>;
Do[assoc = Append[assoc, i -> i], {i, 1, 50000}]//AbsoluteTiming情報 (1)
新しい"ImmutableVector"は,CreateDataStructureを使って作成できる:
ds = CreateDataStructure["ImmutableVector"]Information[ds]履歴
2021 で導入 (12.3)