0

我正在寻找一种可以将每个字符串编码为唯一数字的编码,这样 ->

  1. 每两个相似的字符串必须具有彼此接近的值。
  2. 每两个彼此接近的值必须代表相似的字符串。

字符串的相似性意味着一个字符串中的一些替换可以形成另一个字符串。不考虑添加或删除。

字符串只能有字符 A、C、T 和 G(只有四种可能)

我尝试过的事情->

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

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

如果您知道任何针对此特定问题的方法,请提出一种方法。

4

1 回答 1

1

我认为您正在寻找的是空间填充曲线: 彩色希尔伯特曲线

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

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

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

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

于 2017-08-15T09:49:06.157 回答