/// <summary> /// Calculating of LCS algorithm! /// </summary> /// <returns>LCS alg value</returns> public override int Execute() { int u = 0, v = 0; var arr1 = FirstParam.ToArray(); var arr2 = SecondParam.ToArray(); int len1 = arr1.Count(); int len2 = arr2.Count(); int res = 0; if (len1 != 0 && len2 != 0) { var a = new int[len1 + 1, len2 + 2]; for (int i = 0; i < len1; ++i) { for (int j = 0; j < len2; ++j) { if (arr1[i] == arr2[j]) { a[i + 1, j + 1] = a[i, j] + 1; if (a[i + 1, j + 1] > a[u, v]) { u = i + 1; v = j + 1; } } } } res = a[u, v]; } return(res); }
/// <summary> /// Calculating of Levenshtein algorithm! /// </summary> /// <returns>Levenshtein alg value</returns> public override int Execute() { // Алгоритм расстояния Левенштейна int m = FirstParam.Count; // Размер исходного контейнера int n = SecondParam.Count; // Размер контейнера, с которым сравниваем var arr1 = FirstParam.ToArray(); var arr2 = SecondParam.ToArray(); int value_algorithm = 0; // Число, полученное из алгоритма Левенштейна if (m != 0 && n != 0) { // Результирующая матрица var matrix = new int[m + 1, n + 1]; // По левому и верхнему краю значения от 0 до (m и n соотв.) for (int i = 0; i <= m; ++i) { matrix[i, 0] = i; } for (int i = 0; i <= n; ++i) { matrix[0, i] = i; } int cost; // Проход по матрице for (int i = 1; i <= m; ++i) { for (int j = 1; j <= n; ++j) { cost = arr1[i - 1] == arr2[j - 1] ? 0 : 1; // Если равны, ничего не присваиваем, иначе стоимость равна 1 matrix[i, j] = Math.Min(Math.Min(matrix[i - 1, j] + 1, matrix[i, j - 1] + 1), matrix[i - 1, j - 1] + cost); } } value_algorithm = matrix[m, n]; // Результат -- последний элемент //result = 1.0 - (1.0 * value_algorithm / std::max(m, n)); // Максимум -- длина наибольшей строки. Вычитаем из 1, так как при 1 у нас совпадений нет) } return(value_algorithm); }
public ConcreteTypeMultiParam(FirstParam param1, SecondParam param2) { _f = param1; _s = param2; }
public ConcreteTypeMultiParam(FirstParam param1, SecondParam param2, IInterfaceParam iParam) { _f = param1; _s = param2; _i = iParam; }
public Constructed([BeanReference] FirstParam firstParam ) { this.FirstParam = firstParam; }