我正在尝试计算 n 个节点图中每个节点之间的汉明距离。此图中的每个节点都有一个相同长度 (k) 的标签,用于标签的字母表是 {0, 1, *}。'*' 用作无关符号。例如,标签 101*01 和 1001*1 之间的汉明距离等于 1(我们说它们仅在第 3 个索引处不同)。
我需要做的是找到每个节点的所有 1 汉明距离邻居,并准确报告这两个标签在哪个索引处不同。
我正在逐个字符地将每个节点标签与所有其他节点标签进行比较,如下所示:
// Given two strings s1, s2
// returns the index of the change if hd(s1,s2)=1, -1 otherwise.
int count = 0;
char c1, c2;
int index = -1;
for (int i = 0; i < k; i++)
{
// do not compute anything for *
c1 = s1.charAt(i);
if (c1 == '*')
continue;
c2 = s2.charAt(i);
if (c2 == '*')
continue;
if (c1 != c2)
{
index = i;
count++;
// if hamming distance is greater than 1, immediately stop
if (count > 1)
{
index = -1;
break;
}
}
}
return index;
我可能有几百万个节点。k 通常在 50 左右。我使用的是 JAVA,这种比较需要 n*n*k 时间并且运行缓慢。我考虑使用尝试和 VP 树,但无法弄清楚哪种数据结构适用于这种情况。我还研究了 Simmetrics 库,但什么都没有出现在我的脑海中。我真的很感激任何建议。