2个不稳定版本
0.2.0 | 2020年10月3日 |
---|---|
0.1.0 | 2020年9月20日 |
#2407 in 算法
15KB
299 行
README
这是一个允许对不同元素的操作进行任意加权的Levenshtein距离的泛型实现。
泛型
此crate可以对任何类型的切片进行操作。它可以
- 计算两个字符串之间的字符距离
assert_eq!(distance("abc", "aaxcc"), 3);
- 计算两个字符串之间的单词距离
assert_eq!(
distance(
"The quick brown fox".split (' ').collect::<Vec<_>>(),
"The very quick brown cat".split (' ').collect()),
2);
- 或者计算任意序列之间的距离
assert_eq!(distance(vec![1, 2, 3], vec![0, 1, 3, 3, 4]), 3);
加权
此crate允许为每个符号上的每个操作定义自定义权重。可以通过实现 EditWeight
trait 为自定义类型指定这些权重。
例如
enum MyType {
A,
B,
}
impl EditWeight for MyType {
fn add_cost(&self) -> usize {
match *self {
MyType::A => 1,
MyType::B => 2,
}
}
fn rm_cost(&self) -> usize {
match *self {
MyType::A => 1,
MyType::B => 2,
}
}
fn sub_cost(&self, other: &Self) -> usize {
if self == other {
0
} else {
3
}
}
}
assert_eq!(distance(vec![MyType::A], vec![MyType::B, MyType::B]), 5)