From c182c28c15155ffbf6b55ea7c2ff8348074d46c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=BE=D0=BB=D0=BE=D0=B4=D1=8F?= Date: Thu, 14 Nov 2024 20:40:46 +0400 Subject: [PATCH] morozov_vladimir_lab_6 --- morozov_vladimir_lab_6/app.py | 140 ++++++++++++++++++++ morozov_vladimir_lab_6/images/image (1).png | Bin 0 -> 25247 bytes morozov_vladimir_lab_6/images/image (2).png | Bin 0 -> 26530 bytes morozov_vladimir_lab_6/images/image (3).png | Bin 0 -> 26896 bytes morozov_vladimir_lab_6/readme.md | 36 +++++ 5 files changed, 176 insertions(+) create mode 100644 morozov_vladimir_lab_6/app.py create mode 100644 morozov_vladimir_lab_6/images/image (1).png create mode 100644 morozov_vladimir_lab_6/images/image (2).png create mode 100644 morozov_vladimir_lab_6/images/image (3).png create mode 100644 morozov_vladimir_lab_6/readme.md diff --git a/morozov_vladimir_lab_6/app.py b/morozov_vladimir_lab_6/app.py new file mode 100644 index 0000000..dc284e6 --- /dev/null +++ b/morozov_vladimir_lab_6/app.py @@ -0,0 +1,140 @@ +import math +from multiprocessing import Pool +import numpy as np +from datetime import datetime + +# Поиск строки с наибольшим кол-вом нулей +def check_zeros_string(arr, start=0, end=0): + if end == 0: + end = len(arr) + max_zeros = [] + for i in range(start, end): + max_zeros.append((i, len(arr[start]) - int(np.count_nonzero(arr[i])))) + max = max_zeros[0] + for zero in max_zeros: + if zero[1] >= max[1]: + max = zero + return max + + +# Поиск столбца с наибольшим кол-вом нулей +def check_zeros_column(arr, start=0, end=0): + if end == 0: + end = len(arr) + max_zeros = [] + for i in range(start, end): + max_zeros.append((i, len(arr[:, start]) - int(np.count_nonzero(arr[:, i])))) + max = max_zeros[0] + for zero in max_zeros: + if zero[1] >= max[1]: + max = zero + return max + +# Уменьшение порядка матрицы по строке + +def delta_string(arr, id, start=0, end=0): + if end == 0: + end = len(arr) + if arr.shape == (2, 2): + return arr[0][0] * arr[1][1] - arr[0][1] * arr[1][0] + num_arrays = [] + for j in range(start, end): + if arr[id][j] == 0: + continue + minor = np.delete(arr, id, 0) + minor = np.delete(minor, j, 1) + num_arrays.append((arr[id][j] * pow(-1, id + j + 2), minor)) + result = 0 + for n_a in num_arrays: + max_zeros_strings = check_zeros_string(n_a[1]) + max_zeros_columns = check_zeros_column(n_a[1]) + if max_zeros_strings[1] >= max_zeros_columns[1]: + delta = delta_string(n_a[1], max_zeros_strings[0]) + else: + delta = delta_column(n_a[1], max_zeros_columns[0]) + result += n_a[0] * delta + return result + +# Уменьшение порядка матрицы по столбцу +def delta_column(arr, id, start=0, end=0): + if end == 0: + end = len(arr) + if arr.shape == (2, 2): + return arr[0][0] * arr[1][1] - arr[0][1] * arr[1][0] + num_arrays = [] + for i in range(start, end): + if arr[i][id] == 0: + continue + minor = np.delete(arr, i, 0) + minor = np.delete(minor, id, 1) + num_arrays.append((arr[i][id] * pow(-1, i + id + 2), minor)) + result = 0 + for n_a in num_arrays: + max_zeros_strings = check_zeros_string(n_a[1]) + max_zeros_columns = check_zeros_column(n_a[1]) + if max_zeros_strings[1] >= max_zeros_columns[1]: + delta = delta_string(n_a[1], max_zeros_strings[0]) + else: + delta = delta_column(n_a[1], max_zeros_columns[0]) + result += n_a[0] * delta + return result + + +if __name__ == '__main__': + print("Start") + sizes = [6, 8, 11] + threads_counts = [1, 2, 4] + for size in sizes: + fst = np.random.randint(0, 5, size=(size, size)) + for thread_count in threads_counts: + step = math.floor(size / thread_count) + remaining_lines = size % thread_count + steps = [step] * thread_count + pool = Pool(thread_count) + + for i in range(0, len(steps)): + steps[i] = steps[i] + math.ceil(remaining_lines / thread_count) + remaining_lines -= math.ceil(remaining_lines / thread_count) + if remaining_lines == 0: + break + args = [] + i = 0 + for step in steps: + args.append([fst,i, i + step]) + i += step + + + startTime = datetime.now() + max_zero_string = pool.starmap(check_zeros_string, args) + + max_zero_column = pool.starmap(check_zeros_column, args) + + mzs = max_zero_string[0] + for mz in max_zero_string: + if mz[1] >= mzs[1]: + mzs = mz + + mzc = max_zero_column[0] + for mz in max_zero_column: + if mz[1] >= mzc[1]: + mzc = mz + + args.clear() + i = 0 + if mzs[1] >= mzc[1]: + for step in steps: + args.append([fst, mzs[0], i, i + step]) + i += step + result = pool.starmap(delta_string, args) + else: + for step in steps: + args.append([fst, mzc[0], i, i + step]) + i += step + result = pool.starmap(delta_column, args) + endTime = datetime.now() + print(f"Size: {size}") + print(f"Count of threads: {thread_count}") + print(f"Work time: {endTime-startTime}") + print("_-_-_-_-_-_-_-_-_-") + print("-------------------------------------------") + diff --git a/morozov_vladimir_lab_6/images/image (1).png b/morozov_vladimir_lab_6/images/image (1).png new file mode 100644 index 0000000000000000000000000000000000000000..6ec4f3bbf1a2363d8c5db54c34f88a6b329ff749 GIT binary patch literal 25247 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 BAwd8D literal 0 HcmV?d00001 diff --git a/morozov_vladimir_lab_6/readme.md b/morozov_vladimir_lab_6/readme.md new file mode 100644 index 0000000..483c1c8 --- /dev/null +++ b/morozov_vladimir_lab_6/readme.md @@ -0,0 +1,36 @@ +# Лабораторная работа №6 - Определение детерминанта матрицы с помощью параллельных вычислений + +## Разработка приложения + +Для разработки был выбран язык Python. Для разработки приложения были использованы библиотки: +- Numpy - библиотека для работы с массивами +- Multiprocessing - библиотека для запуска нескольких процеесов, что позволяет паралельно запускать функции +Для поиска детерминанты будем последовательно понижать порядок матрицы, путем вывода миноров и поиска их детерминант +Суть алгоритма: +1) задаем размер матриц +2) задаем кол-во потоков +3) алгоритм ище строку или столбец с наибольшим кол-вом нулей, для того, чтобы можно было пропускать +4) теперь будет алгоритм рекурсивно делить матрицу на миноры, которые тоже в свою очередь будет делить их на миноры и искать уже их детерминанты +5) рекурсия останавливается когда в нее попадает матрица размеров 2х2, возращается детерминанта данной матрицы +6) складываем все полученные значения + + + + +## Тестирование + +Тест 1. Размер матрицы 6х6 +![image (1).png](images%2Fimage%20%281%29.png) +Тест 2. Размер матрицы 8х8 +![image (2).png](images%2Fimage%20%282%29.png) +Тест 2. Размер матрицы 11х11 +![image (3).png](images%2Fimage%20%283%29.png) + + + +## Вывод +Паралельной алгоритм поиска детерминанты матрицы работает эффективнее, чем обычный. НО выполение больших матриц (когда размер стороны превышает 11) становится очень большим, что даже несколько потоков уже не спасает. + + +## Запись тестирования +Работа приложения представлена в [видео](https://disk.yandex.ru/i/kkNVNzvOaOmCOQ) \ No newline at end of file