# Отчет по лабораторной работе №5 Выполнила студентка гр. ИСЭбд-41 Островская С.Ф. ## Создание приложения Было выбрано консольное приложение, язык программирования - c#. Обычный алгоритм: ```cs static void SequentialDeterminantCalculation(int matrixSize, int lowerLimit, int upperLimit) { int[][] randomMatrix = GenerateRandomMatrix(matrixSize, lowerLimit, upperLimit); Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); int result = Determinant(randomMatrix); stopwatch.Stop(); TimeSpan elapsedTime = stopwatch.Elapsed; Console.WriteLine($"Последовательный детерминант: {result}"); Console.WriteLine($"Последовательное время: {elapsedTime.TotalSeconds:F7} секунд"); } ``` Параллельный алгоритм: ```cs static void ParallelDeterminantCalculation(int matrixSize, int lowerLimit, int upperLimit, int numProcesses) { int[][] randomMatrix = GenerateRandomMatrix(matrixSize, lowerLimit, upperLimit); int[][] matricesToProcess = new int[matrixSize][]; for (int col = 0; col < matrixSize; col++) { matricesToProcess[col] = Submatrix(randomMatrix, 0, col)[0]; } Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); int[] determinants = new int[matrixSize]; Parallel.For(0, matrixSize, new ParallelOptions { MaxDegreeOfParallelism = numProcesses }, col => { determinants[col] = Determinant(new int[][] { matricesToProcess[col] }); }); int result = 0; for (int col = 0; col < matrixSize; col++) { result += ((-1) * col) * randomMatrix[0][col] * determinants[col]; } stopwatch.Stop(); TimeSpan elapsedTime = stopwatch.Elapsed; Console.WriteLine($"Параллельный детерминант: {result}"); Console.WriteLine($"Параллельное время: {elapsedTime.TotalSeconds:F7} секунд"); } ``` ## Бенчмарки Для примера была взята матрица размерностью 10х10, поскольку для матриц больших размеров детерминант вычисляется слишком долго. ![](pic/pic1.jpg) ``Вывод``: Обыный алгоритм работает быстрее, если количество элементов не слишком много. Параллельный же алгоритм работает быстрее только при наличии большого количества операций и данных.