我有数据由映射到值的键组成,如下所示:
---------------------
Key | Value
---------------------
(0, 0, 0, 0) | a
(0, 0, 0, 1) | b
(0, 1, 0, 1) | c
(0, 1, 1, 0) | d
....
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种数据结构,可以通过密钥有效地执行搜索查询,其中查询可以是完整的或部分地指定密钥.例如:
(0, 0, 0, 1) -> a
(0, *, *, *) -> [a, b, c, d]
(0, 1, *, *) -> [c, d]
Run Code Online (Sandbox Code Playgroud)
我现在的想法是使用常规树来实现它,类似于:
叶节点表示值,非叶节点是键的一部分(即,w,x,y和z节点分别是键的第一,第二,第三和第四部分).可以使用简单的BFS算法来回答任何查询.但问题是这棵树随着密钥的每个新部分呈指数级增长.
什么数据结构/算法更适合解决这个问题?请注意,关键部分可以是数字或字符串.