我不相信标准库提供了计算两个字符串之间距离的任何东西,而且我似乎在Boost StringAlgo中找不到任何内容。那么,还有其他库可以使用吗?
我对算法不是太挑剔。Jaro-Winkler可以,Levenshtein也可以,我也愿意听取建议,我不想编写已经有人编写过的代码。
我不相信标准库提供了计算两个字符串之间距离的任何东西,而且我似乎在Boost StringAlgo中找不到任何内容。那么,还有其他库可以使用吗?
我对算法不是太挑剔。Jaro-Winkler可以,Levenshtein也可以,我也愿意听取建议,我不想编写已经有人编写过的代码。
{ 0 if x = y
d(x, y) = {
{ 1 otherwise
因此,前三个条件得到满足:
d(x,y)≥0
d(x,y)=0,当且仅当x=y
对于x=y,d(x,y)=d(y,x)=0
,对于x≠y,d(x,y)=d(y,x)=1
对于最后一个条件,有两种情况:
d(x,z)=0
。右侧唯一可行的值为0
、1
和2
,其中任何一个都满足条件。d(x,z)=1
。假设右侧不大于等于一。这意味着右侧必须为零。然后右侧的两个项都必须是0
,这意味着x=y
且y=z
。第二个条件表示x=z
,进而意味着d(x,z)=0
。这是矛盾的,因此右侧必须大于等于一。那么我们可以定义度量为:
int d(std::string x, std::string y) {
if (x == y) {
return 0;
} else {
return 1;
}
}
或者使用libdistance库,该库实现了Levenshtein、Dameru、Needleman-Wunsch、Hamming、Bloom Filter、Jaccard和Minkowski距离。
语音算法也可能会引起兴趣。