擅长:python、mysql、java
<p>由于数据表示的是缩写字符串而不是打字错误或其他错误,因此您应该能够通过消除简单的选择来执行此操作。在</p>
<p>考虑这两个例子(我不知道大峡谷是如何缩写的,所以这只是一个猜测来说明这一点):</p>
<pre><code>GRAND CANYON -> GR CANYON
MELBOURNE REEF -> MELBRNE REEF
</code></pre>
<p>GR峡谷不可能与墨尔本礁有关,所以没有必要对此进行测试。按字符串的左前缀分组来编写这个测试,您应该会看到一个非常高的命中率,因为缩写通常会保留第一个字母。在</p>
<p>所以,你只比较以“G”开头的缩写词与同样以“G”开头的全名,“M”与“M”开头的缩写词等等</p>
<p>还请注意,这不一定要提供完美匹配;您将维护不匹配字符串的列表,并在找到匹配项时将其删除,因此在比较分组字符串并删除匹配项之后,<strong>不匹配项的最终列表将是原始数据的一个非常小的子集,可以使用原始蛮力方法相对快速地进行比较</strong>。在</p>
<p>只需使用第一个字符,就可以将每个列表中要比较的字符串数量减少26倍,这将使比较数量减少26*26倍,速度快了676倍!在</p>
<p>由于在最初的消除步骤中不需要完全精确,所以您可以将此分组扩展到第一次迭代的不止第一个字符,从而减少每次额外迭代的字符数,直到达到零个字符为止。使用2字符分组,可以将每个列表中要比较的项目数减少26*26,这将使比较总数减少26*26*26*26,或者从2500亿减少到大约50万个比较。有3个字符的分组,从2500亿下降到809个。在</p>
<p>通过使用这种迭代方法,您将执行指数级更少的模糊操作,而不会失去准确性。在</p>