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

Encoding for strings (preferrably a value) such that closer values means more similar Strings?

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

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

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

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

我尝试过的东西 ->

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

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

如果您知道解决此特定问题的任何方法,请提出建议。

我想你要找的是 space 填充曲线: A coloured Hilbert Curve

把一个字符串看成一个N维的字符向量,在N维有一个对应点space。任意两个字符串的曼哈顿距离等于它们字符之差的总和,因此在这种表示中靠近的字符串是相似的字符串。

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

看图,直线是连续的,满足条件2。希尔伯特曲线本质上是广义格雷码。

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