我有一个问题,我想匹配数据库中所有与给定字符串存在一定编辑距离的字符串。
我的想法是生成一个正则表达式,匹配所有与字符串s的编辑距离为d的字符串。
例如,我想为'd=1'和's='abc''生成一个形如'r='abc|.abc|.bc|a.c|ab.|abc.'的正则表达式。但我不确定这是否非常高效,或者是否已经有了解决这个问题的好算法?我想考虑编辑距离中甚至包括字符交换,所以'acb'也应该是'r'的一部分。我想在PHP中实现它,然后进行SQL查询:SELECT * FROM table WHERE name RLIKE TheRegularExpression。
这样做合适吗?或者你有什么建议?
我的想法是生成一个正则表达式,匹配所有与字符串s的编辑距离为d的字符串。
例如,我想为'd=1'和's='abc''生成一个形如'r='abc|.abc|.bc|a.c|ab.|abc.'的正则表达式。但我不确定这是否非常高效,或者是否已经有了解决这个问题的好算法?我想考虑编辑距离中甚至包括字符交换,所以'acb'也应该是'r'的一部分。我想在PHP中实现它,然后进行SQL查询:SELECT * FROM table WHERE name RLIKE TheRegularExpression。
这样做合适吗?或者你有什么建议?
O(nCd)
,其中n
是字符串的长度,d
是您的距离。这可能会导致非常大的模式。例如,对于一个长度为80个字符的字符串,希望距离为5,您将向数据库发送约2GB的正则表达式。(这仅考虑字符替换,不包括转位。)但是,如果您确定字符串将很短和/或d
非常小或非常接近n
,那么这可能是可行的。 - millimoose