String 对字符串(最好是值)进行编码,使值越接近意味着字符串越相似?

String 对字符串(最好是值)进行编码,使值越接近意味着字符串越相似?,string,encoding,hamming-distance,gray-code,String,Encoding,Hamming Distance,Gray Code,我正在寻找一种编码,它可以将每个字符串编码成一个唯一的数字,这样-> 每两个相似的字符串必须具有彼此相近的值 彼此接近的每两个值必须表示相似的字符串 字符串的相似性意味着一个字符串中的几个替换可以形成另一个字符串。不考虑添加或删除 字符串只能包含字符A、C、T和G(只有四种可能) 我尝试过的事情-> 格雷码->它满足第二个条件,但不满足第一个条件。两个相似的字符串并不意味着它们在格雷码中的值更接近 与参考字符串的汉明距离->很明显,如果汉明距离相同,这并不意味着字符串是相似的,只是它们与参考字符

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

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

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

    我尝试过的事情->

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

  • 与参考字符串的汉明距离->很明显,如果汉明距离相同,这并不意味着字符串是相似的,只是它们与参考字符串的距离相等。因此,它不满足第二个标准


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

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

    假设一个字符串是N维的字符向量,并且在N维空间中有一个对应的点。任何两个字符串的曼哈顿距离等于它们的字符差之和,因此在这种表示法中靠得很近的字符串是相似的字符串

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

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


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

    谢谢,这正是我想要的。我会试试看它是否适合我。