"ByteTrie" (データ構造)
"ByteTrie"
メンバがバイト列であるトライを表す.
詳細
- バイトトライは,効率的な挿入だけでなく,メンバシップの検証にも役立つ.
-
CreateDataStructure["ByteTrie", start, end] start から end までの範囲のバイト列用に新しい空の"ByteTrie"を作成する Typed[x,"ByteTrie"] x に"ByteTrie"型を与える - "ByteTrie"型のデータ構造については,以下の演算が使える.
-
ds["ByteLists"] バイトのリストのリストとして表される,ds に保存されたバイト列を返す time: O(n) ds["ByteLists",s] 列 s で始まる,ds に保存されたバイト列を返す time: O(n) ds["ByteRange"] ds が持つことのできるバイトの範囲 time: O(1) ds["Copy"] ds のコピーを返す time: O(n) ds["EmptyQ"] ds が要素を持たない場合にTrueを返す time: O(1) ds["FreeQ",s] バイト列 s が ds に保存されていない場合にTrueを返す time: O(log n) ds["Insert",s] バイト列 s を ds に挿入する time: O(log n) ds["Length"] ds に保存されたバイト列の数 time: O(1) ds["MemberQ",s] バイト列 s が ds に保存されている場合にTrueを返す time: O(log n) ds["NumericArrays"] 数列のリストとして表される,ds のバイト列を返す time: O(n) ds["NumericArrays",s] 列 s で始まる,ds に保存されたバイト列を返す time: O(n) ds["Strings"] 文字列のリストとして表される,ds に保存されたバイト列を返す time: O(n) ds["Strings",s] 列 s で始まる,ds に保存されたバイト列を返す time: O(n) - 以下の関数もサポートする.
-
dsi===dsj dsi が dsj に等しい場合はTrue FullForm[ds] ds の完全形 Information[ds] ds についての情報 InputForm[ds] ds の入力形 Normal[ds] ds を通常の式に変換する - "ByteTrie"データ構造に保存されたバイト列は,バイト,文字列,数値配列のリストとして表すことができる.
- トライは,その要素を保存するのに接頭辞を使うので,ハッシュ計算を使うデータ構造のようなコリジョンの問題が起ることがない.
例題
すべて開くすべて閉じる例 (6)
スコープ (1)
情報 (1)
新しい"ByteTrie"は,CreateDataStructureを使って作成することができる:
アプリケーション (2)
コマンドの完了 (1)
バイトトライはコマンドの完了に使うことができる.これにはRandomWord関数を使うとよい.
1000個の単語のリストを作成する.ハイフンを削除し,すべてを小文字にする:
整数の保存 (1)
整数は,バイト列に分割することによって,バイトライトに保存することができる.
これを行う一つの方法はいくつかの演算が必要であるが,IntegerDigitsを効率的に使うこともできる: