コード例 #1
0
ファイル: CompareLCS.cs プロジェクト: xguppy/ALS
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
 public ConcreteTypeMultiParam(FirstParam param1, SecondParam param2)
 {
     _f = param1;
     _s = param2;
 }
コード例 #4
0
 public ConcreteTypeMultiParam(FirstParam param1, SecondParam param2, IInterfaceParam iParam)
 {
     _f = param1;
     _s = param2;
     _i = iParam;
 }
コード例 #5
0
 public Constructed([BeanReference] FirstParam firstParam
                    )
 {
     this.FirstParam = firstParam;
 }