# Лабораторная работа 6 - Определение детерминанта матрицы с помощью параллельных вычислений
### ПИбд-42 || Бондаренко Максим

# Описание работы

## Задание
> [!NOTE] 
> Кратко: реализовать нахождение детерминанта квадратной матрицы.
>
> Подробно: в лабораторной работе требуется сделать два алгоритма: обычный и параллельный (задание со * - реализовать это в рамках одного алгоритма). В параллельном алгоритме предусмотреть ручное задание количества потоков (число потоков = 1 как раз и реализует задание со *), каждый из которых будет выполнять нахождение отдельной группы множителей.

## Краткое описание модулей и их работа
1. matrix.operations.js  
- getMinor(matrix, row, col): Получает минор матрицы для заданной строки и столбца.  
- determinant(matrix): Вычисляет детерминант матрицы рекурсивно (последовательный алгоритм).  
- determinantParallel(matrix, numThreads): Вычисляет детерминант матрицы параллельно, распределяя задачи по заданному количеству потоков.  

2. det.worker.js  
- Получает данные о своей части работы (миноры и знаки) и вычисляет частичный детерминант, который затем отправляет обратно главному потоку.  

3. benchmark.js  
- generateMatrix(size): Генерирует случайную квадратную матрицу заданного размера.  
- benchmark(): Выполняет бенчмарки для матриц различных размеров, сравнивая время выполнения последовательного и параллельного алгоритмов с различным количеством потоков.  

## Запуск
```
node benchmark.js
```

## Результат работы
> [!IMPORTANT] 
> ![benchmark.png](./benchmark.png)

Ссылка на видео: https://cloud.mail.ru/public/9Bky/mjwK7bqBL