using System; using System.Diagnostics; class EditDistance//Определяет класс EditDistance для вычисления редакционного расстояния между двумя строками. { static int Min(int a, int b, int c)//Вспомогательный метод, возвращающий минимальное из трех заданных целых чисел. { return Math.Min(Math.Min(a, b), c); } static int EditDistanceDP(string str1, string str2)//Статический метод, который вычисляет редакционное расстояние между двумя строками str1 и str2 с использованием динамического программирования.Содержит двумерный массив dp для хранения вычисленных значений. { int m = str1.Length; int n = str2.Length; int[,] dp = new int[m + 1, n + 1];//Инициализирует массив dp базовыми случаями: dp[i, 0] = i: Если строка str1 пуста, расстояние равно длине str2.dp[0, j] = j: Если строка str2 пуста, расстояние равно длине str1. // Заполняем базовые случаи for (int i = 0; i <= m; i++) { for (int j = 0; j <= n; j++) { if (i == 0) dp[i, j] = j; // Если первая строка пустая, расстояние - длина второй строки else if (j == 0) dp[i, j] = i; // Если вторая строка пустая, расстояние - длина первой строки else if (str1[i - 1] == str2[j - 1]) dp[i, j] = dp[i - 1, j - 1]; // Если символы совпадают, берем значение из диагонали else dp[i, j] = 1 + Min(dp[i - 1, j], // Удаление dp[i, j - 1], // Вставка dp[i - 1, j - 1]); // Замена } } return dp[m, n]; } static void Main(string[] args) { string str1 = "кот"; string str2 = "скат"; // Измерение времени выполнения Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); int distance = EditDistanceDP(str1, str2); stopwatch.Stop(); Console.WriteLine("Редакционное расстояние между '{0}' и '{1}' равно {2}", str1, str2, distance); Console.WriteLine("Время выполнения: " + stopwatch.ElapsedMilliseconds + " миллисекунд"); // Измерение использования памяти Process currentProcess = Process.GetCurrentProcess(); long memoryUsed = currentProcess.PrivateMemorySize64 / (1024 * 1024); // Переводим байты в мегабайты Console.WriteLine("Редакционное расстояние между '{0}' и '{1}' равно {2}", str1, str2, EditDistanceDP(str1, str2)); } }