# Отчет по лабораторной работе №6

Выполнила студентка гр. ИСЭбд-41 Зиновьева А. Д.

## Создание приложения

Было выбрано консольное приложение, язык программирования - c#.

Обычный алгоритм:

```cs
static double CalculateDeterminantSequential(int[,] matrix)
{
    int size = matrix.GetLength(0);
    double determinant = 0;

    if (size == 1)
    {
        determinant = matrix[0, 0];
    }
    else if (size == 2)
    {
        determinant = matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
    }
    else
    {
        for (int j = 0; j < size; j++)
        {
            determinant += matrix[0, j] * CalculateMinor(matrix, 0, j) * Math.Pow(-1, j);
        }
    }

    return determinant;
}
```
Параллельный алгоритм:

```cs
static double CalculateDeterminantParallel(int[,] matrix, int threads)
{
    int size = matrix.GetLength(0);
    double determinant = 0;

    if (size == 1)
    {
        determinant = matrix[0, 0];
    }
    else if (size == 2)
    {
        determinant = matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
    }
    else
    {
        Parallel.For(0, size, new ParallelOptions { MaxDegreeOfParallelism = threads }, j =>
        {
            determinant += matrix[0, j] * CalculateMinor(matrix, 0, j) * Math.Pow(-1, j);
        });
    }

    return determinant;
}
```

## Бенчмарки

Для примера была взята матрица размерностью 10х10, поскольку для матриц больших размеров детерминант вычисляется слишком долго.


![](pic/pic1.jpg)


``Вывод``: Обычный (последовательный) алгоритм работает быстрее, если количество элементов не слишком много. Параллельный же алгоритм работает быстрее только при наличии большого количества операций и данных.