次のように、値にマップされたキーで構成されるデータがあります。
---------------------
Key | Value
---------------------
(0, 0, 0, 0) | a
(0, 0, 0, 1) | b
(0, 1, 0, 1) | c
(0, 1, 1, 0) | d
....
キーに対して検索クエリを効率的に実行できるデータ構造を探しています。クエリはキーを完全または部分的に指定できます。例えば:
(0, 0, 0, 1) -> a
(0, *, *, *) -> [a, b, c, d]
(0, 1, *, *) -> [c, d]
私が今持っているアイデアは、これに似た通常のツリーを使用してこれを実装することです:
葉ノードは値を表し、非葉ノードはキーの一部です (つまり、w、x、y、z ノードは最初、2 番目です) 、それぞれキーの 3 番目と 4 番目の部分)。シンプルな BFS アルゴリズムを使用して、任意のクエリに応答できます。しかし問題は、このツリーが鍵の新しい部分ごとに指数関数的に成長していることです。
この問題を解決するには、どのデータ構造/アルゴリズムがより適切ですか? キー部分は数値または文字列であることに注意してください。