我有一个汉明立方体,具有一般尺寸,但实际上,尺寸通常为3到6。

搜索算法为:

Input: any vertex, `v`.
Find all vertices that lie in Hamming distance 1 from `v`.
Find all vertices that lie in Hamming distance 2 from `v`.
...

我事先不知道我需要离开v多远。例如,我可能会停在距离1处。

例如,给定这个立方体:

c++ - 海明立方体的数据结构-LMLPHP

并且v = 100,我需要汉明距离为1的顶点为000、101、110(任意顺序)。然后,我可能需要获取距离2中的顶点,即111、001、010。在不太可能也需要距离3的顶点的情况下,我也将获取011。

多维数据集的一个顶点可能包含ID(整数)。

哪种合适的数据结构可以存储此多维数据集并有效搜索?我对其他操作并不真正感兴趣。

我考虑过以某种方式对所有位序列进行排序,以便我可以轻松访问它们,但没有任何工作。

到目前为止,我的方法:

data-structure使用哈希表(特别是std::unordered_map),其中键是顶点,值是ID。

algorithm给定一个顶点v,生成汉明距离t(即1、2 ...)内的所有位序列。

但是,这要求我每次到达顶点v时都要调用一个函数(这经常发生)。我有一个基于this实现此目的的功能。

最佳答案

我对C++感到生疏,因此我将保留这一摘要。

海明立方体的给定点的邻居很容易计算。给定一个顶点的位序列,分别翻转每个位。

不过,您可以预先计算。您可以缓存neighbors()函数的结果,也可以将它们保存到数组中。每个顶点都有自己的邻居,因此每个顶点都有一个数组。从本质上讲,这为您提供了邻接表。

使用该邻接表,您可以使用深度限制搜索来搜索汉明多维数据集,深度搜索是DFS(或者我想是BFS,但空间复杂性更差)的一种变体,仅深入到k单元。

数据结构是一个不错的选择,但是请考虑您的顶点是二进制字符串,因此它们涵盖了从02^n - 1的所有点。您最好只使用一个数组-查找仍将是O(1),并且它将变得更紧凑,因为周围没有闲置的存储桶。

关于c++ - 海明立方体的数据结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44064395/

10-09 08:36
查看更多