对字符串进行编码(最好是一个值),使得更接近的值意味着更相似的字符串?

时间:2017-08-15 08:37:16

标签: string encoding hamming-distance gray-code

我正在寻找一种可以将每个字符串编码为唯一编号的编码,例如 - >

  1. 每两个相似的字符串必须具有彼此接近的值。
  2. 每两个彼此接近的值必须代表相似的字符串。
  3. 字符串的相似性意味着一个字符串中的一些替换可以形成另一个字符串。不考虑添加或删除。

    字符串只能包含字符A,C,T和G(只有四种可能性)

    我尝试过的事情 - >

    1. 格雷码 - >它满足第二个但不满足第一个标准。两个相似的字符串不一定意味着它们在格雷码中具有更接近的值。

    2. 参考字符串的汉明距离 - >很明显,如果汉明距离是相同的,它并不意味着字符串是相似的,只是它们与参考相同。所以它不符合第二个标准。

    3. 如果您对此特定问题了解,请提供一种方法。

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是空间填充曲线: A coloured Hilbert Curve

将字符串视为字符的N维向量,并在N维空间中具有对应点。任何两个字符串的曼哈顿距离都等于其字符差异的总和,因此在此表示中靠近的字符串是相似的字符串。

我们将N维向量转换为0到n之间的数字,其中n是使用希尔伯特曲线的最高可能值字符串。在图像中,我们只有两个维度,但希尔伯特曲线可以推广到更高维度。

如果你看图像,这条线是连续的,因此满足条件2.希尔伯特曲线本质上是一个广义的格雷码。

在大多数情况下,条件1也是如此。如果你看图像,希尔伯特曲线的颜色会在它的长度上缓慢变化。希尔伯特曲线的相邻区域之间的颜色通常非常相似,在这种情况下的例外是在左侧的中间,颜色从橙色变为蓝色。然而,希尔伯特曲线将在移动到下一个之前填充一个小区域,因此大多数相似的字符串将具有彼此接近的整数表示。它并不完美,但它相当不错。