"OrderedHashSet" (データ構造)
"OrderedHashSet"
メンバが一般式であり,ハッシュ関数を使ってメンバシップが計算され,メンバを挿入する順序が保存される集合を表す.
詳細
- 順序付きのハッシュ集合は,効率的な挿入と削除だけでなく,挿入の順序を保存することが重要であるメンバシップの検証に役立つ.
-
CreateDataStructure["OrderedHashSet"] 新しい空の"OrderedHashSet"を作成する CreateDataStructure["OrderedHashSet",elems] elems を含む新しい"OrderedHashSet"を作成する Typed[x,"OrderedHashSet"] x に"OrderedHashSet"型を与える - "OrderedHashSet"型のデータ構造には,以下の演算が使える.
-
ds["Complement",list] list に現れる要素を ds から削除する time: O(n) ds["Copy"] ds のコピーを返す time: O(n) ds["Delete",x] x を ds から削除する.x が実際に要素である場合にはTrueを返す time: O(1) ds["DeleteAll"] ds からすべての要素を削除する time: O(n) ds["Elements"] ds の要素のリストを返す time: O(n) ds["EmptyQ"] ds が要素を持たない場合はTrue time: O(1) ds["Insert",x] x を集合に加え,追加に成功した場合にはTrueを返す time: O(1) ds["Intersection",list] list に現れない要素を ds から削除する time: O(n) ds["Length"] ds に保存される要素の数を返す time: O(1) ds["MemberQ",x] x が ds のメンバである場合はTrue time: O(1) ds["Pop"] ds から要素を削除し,それを返す time: O(1) ds["Union",list] list に現れる要素を ds に加える time: O(n) ds["Visualization"] ds の可視化を返す time: O(n) - 以下の関数もサポートする.
-
dsi===dsj dsi が dsj に等しい場合はTrue FullForm[ds] ds の完全形 Information[ds] ds についての情報 InputForm[ds] ds の入力形 Length[ds] ds の長さ Normal[ds] ds を通常の式に変換する
例題
すべて開く すべて閉じる例 (2)
新しい"OrderedHashSet"は,CreateDataStructureを使って作成できる:
ds = CreateDataStructure["OrderedHashSet"]ds["Insert", f[1]]ds["Length"]ds["MemberQ", f[1]]式が保存されていない場合には,Falseが返される:
ds["MemberQ", f[2]]要素を集合から削除する.何かが実際に削除された場合には,Trueを返す:
ds["Delete", f[1]]Normal[ds]ds = CreateDataStructure["OrderedHashSet"];
Do[ds["Insert", i], {i, 100}]ds["Visualization"]ds["Elements"]スコープ (16)
作成 (2)
空の"OrderedHashSet"を作成する:
CreateDataStructure["OrderedHashSet"]初期要素を含む"OrderedHashSet"を作成する:
CreateDataStructure["OrderedHashSet", {x, y, z}]情報 (1)
新しい"OrderedHashSet"は,CreateDataStructureを使って作成することができる:
ds = CreateDataStructure["OrderedHashSet"]Information[ds]演算 (13)
"Complement" (1)
初期要素を含む"OrderedHashSet"を作成する:
ds = CreateDataStructure["OrderedHashSet", Range[100]]もとの"OrderedHashSet"のメンバであるが,与えられたリストのメンバではない要素を含む新しい集合を作成する:
ds1 = ds["Complement", Range[50]]ds1["Elements"]"Copy" (1)
初期要素を含む"OrderedHashSet"を作成する:
ds = CreateDataStructure["OrderedHashSet", Range[4]]ds1 = ds["Copy"]{Normal[ds], Normal[ds1]}ds1["Insert", 42];
{Normal[ds], Normal[ds1]}"Elements" (1)
初期要素を含む"OrderedHashSet"を作成する:
ds = CreateDataStructure["OrderedHashSet", Range[10]]ds["Elements"]Normalは同じリストを返す:
Normal[ds]"EmptyQ" (1)
"OrderedHashSet" が空かどうかをテストする:
ds = CreateDataStructure["OrderedHashSet"];
ds["EmptyQ"]ds["Insert", f[x]];
ds["EmptyQ"]"Delete" (1)
"OrderedHashSet"から要素を削除し,削除が成功した場合にはTrueを返す:
ds = CreateDataStructure["OrderedHashSet", {f[x], f[y], f[z]}];
ds["Delete", f[x]]集合いない要素を削除することは不可能であるので,Falseが返される:
ds["Delete", f[w]]"DeleteAll" (1)
"OrderedHashSet"内のすべての要素を削除する:
ds = CreateDataStructure["OrderedHashSet", Range[300]];
ds["DeleteAll"]ds["EmptyQ"]"Insert" (1)
"OrderedHashSet"に要素を挿入し,挿入に成功した場合にはTrueを返す:
ds = CreateDataStructure["OrderedHashSet"];
ds["Insert", f[x]]同じ要素をもう一度挿入することはできないので,Falseが返される:
ds["Insert", f[x]]"Intersection" (1)
初期要素を含む"OrderedHashSet"を作成する:
ds = CreateDataStructure["OrderedHashSet", Range[100]]もとの"OrderedHashSet"と指定されたリストに共通の要素のみを含む新しい集合を作成する:
ds1 = ds["Intersection", Range[50]]ds1["Elements"]"Length" (1)
初期要素を含む"OrderedHashSet"を作成する:
ds = CreateDataStructure["OrderedHashSet", Range[100]]ds["Length"]Lengthは同じ値を与える:
Length[ds]"MemberQ" (1)
ある要素が"OrderedHashSet"内に存在するかどうかをテストする:
ds = CreateDataStructure["OrderedHashSet", {f[x], f[y], f[z]}]{ds["MemberQ", f[x]], ds["MemberQ", f[w]]}"Pop" (1)
初期要素を含む"OrderedHashSet"を作成する:
ds = CreateDataStructure["OrderedHashSet", {f[x], f[y], f[z]}];
ds["Elements"]ds["Pop"]"Union" (1)
初期要素を含む"OrderedHashSet"を作成する:
ds = CreateDataStructure["OrderedHashSet", Range[10]]もとの"OrderedHashSet"と与えられたリストの両方に存在する要素を含む新しい集合を作成する:
ds1 = ds["Union", Range[10, 20]]ds1["Elements"]"Visualization" (1)
初期要素を含む"OrderedHashSet"を作成する:
ds = CreateDataStructure["OrderedHashSet", Range[300]]ds["Visualization"]アプリケーション (2)
安定した重複 (1)
list = RandomChoice[{"A", "B", "C", "D"}, 20]最初に起った順序を維持しながら,リストから重複する要素を削除する:
ds = CreateDataStructure["OrderedHashSet"];
ds["Union", list];ds["Elements"]DeleteDuplicatesと比べる:
DeleteDuplicates[list]特性と関係 (5)
InputForm (1)
InputFormは,"OrderedHashSet"の連続番号付きのコンテンツを返す:
InputForm[CreateDataStructure["OrderedHashSet", Range[10]]]この連続番号付きの形式を使ってデータ構造を再作成することができる:
DataStructure["OrderedHashSet", {"Data" -> Range[10]}]Length (1)
Lengthを使って,"OrderedHashSet"内の要素数を得る:
ds = CreateDataStructure["OrderedHashSet", Range[10]];
Length[ds]ds["Length"]Normal (1)
Normalを使って"OrderedHashSet"の要素を得ることができる:
ds = CreateDataStructure["OrderedHashSet", Range[10]];
Normal[ds]ds["Elements"]SameQ (1)
SameQを使って,2つのハッシュ集合に同一の要素が同じ順序で含まれているかどうかをテストする:
ds1 = CreateDataStructure["OrderedHashSet", Range[10]];
ds2 = CreateDataStructure["OrderedHashSet", Range[10]];
ds1 === ds2"HashSet" (1)
"HashSet"に使えるアルゴリズムの多くは,"OrderedHashSet"にも使える.
"HashSet"の場合とは違って,要素が"OrderedHashSet"に挿入される順序は保存される.
履歴
2020 で導入 (12.1)