59 lines
3.3 KiB
C#
Raw Normal View History

2024-05-01 12:26:51 +04:00
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));
}
}