【问题标题】:Transform two strings in such a way that the distance between the input strings is 'reflected' in the distance between the output strings?以这样一种方式转换两个字符串,使输入字符串之间的距离“反映”在输出字符串之间的距离中?
【发布时间】:2012-04-19 07:37:50
【问题描述】:

我有一个很长的用户标识符列表。每次 HTTP 请求附带的标识符可能并不完全相同,因此我使用模糊字符串比较来验证用户身份。出于这个原因,我无法对标识符进行哈希处理,因为我的模糊字符串比较算法不适用于哈希值,因为即使是稍微不同的纯文本在哈希处理时也会产生完全不同的值。现在是否有一些算法 algx 使得距离(s1,s1')在某种程度上与距离(algx(s1),algx(s1'))成正比?或者有没有其他方法可以解决这个问题? 注意:这种意义上的距离是指将一个文本转换为另一个文本所需的编辑量。

【问题讨论】:

  • 等等,这是为了用户认证?你为什么不检查(不区分大小写)的准确性?
  • 标识符可能会发生一些变化,因为它是从浏览器配置生成的,可能会发生变化。这不是用于基本身份验证,而是作为基本身份验证之外的安全强化。
  • 必须是字符串之间的“距离”吗?转换以便它们的二进制表示之间的“距离”可能更容易。

标签: algorithm hash string-matching


【解决方案1】:

一种解决方案是对每个字母进行计数并比较计数数组。计数之间的不匹配意味着字符串肯定不相似。

【讨论】:

    【解决方案2】:

    听起来您正在寻找locality-sensitive hashing

    【讨论】:

    【解决方案3】:

    您可以使用Levenshtein distance 之类的东西来测量两个字符串之间的差异。还有一个同名的PHP function

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 2013-04-25
      • 2016-05-25
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多