Реализации алгоритмов/Расстояние Левенштейна: различия между версиями

Содержимое удалено Содержимое добавлено
добавлена реализация на языке Scala
Строка 246:
}
 
</source>
 
 
== [[w:Scala|Scala]] ==
 
<source lang="Scala">
class Lowenstein(s1: String, s2: String) {
 
private val m: Int = s1.length
private val n: Int = s2.length
 
private val matrix = Array.ofDim[Int](m + 1, n + 1)
 
private val distance: Int = {
 
def mo(i: Int, j: Int): Int = if (s1(i) == s2(j)) 0 else 1
def min(numbers: Int*): Int = numbers.min
 
for (i <- 0 to m) matrix(i)(0) = i
for (i <- 1 to n) matrix(0)(i) = i
 
for (i <- 1 to m; j <- 1 to n) {
matrix(i)(j) = min(
matrix(i - 1)(j) + 1,
matrix(i)(j - 1) + 1,
matrix(i - 1)(j - 1) + mo(i - 1, j - 1)
)
}
 
matrix(m)(n)
}
 
def getDistance = distance
 
}
 
</source>
пример использования:
<source lang="Scala">
println( new Lowenstein("Hi, men!", "Hi, women!").getDistance )
</source>