Лабораторные работы / Лабораторная работа 5 / Перемножение матриц и поиск минимального остовного дерева (Машеров)
.docxНациональный исследовательский институт
Московский Энергетический Институт (Технический Университет)
Институт автоматики и вычислительной техники
Кафедра Прикладной математики
Лабораторная работа №5
по дисциплине «Параллельные системы и параллельное программирование»
тема: «Программирование на языке FPTL»
Выполнил:
Машеров Д.Е.
А-13-08
Москва
2012 г.
Задачи
-
Реализовать алгоритм перемножения матриц. Матрицу представлять в виде списка списков.
-
Реализовать алгоритм поиска минимального остовного дерева (оптимального каркаса) методом Прима.
-
Перемножение матриц
Описание
Пусть даны две прямоугольные матрицы и размерности и соответственно:
Тогда матрица размерностью называется их произведением:
где:
Реализация.
Был создан тип «Список»(«List»), значениями которого могут быть
-
Пустой список (c_nil);
-
Пара: элемент любого типа и список из элементов этого типа.
Матрицы представляются в виде списка списков, считываются из файлов.
Чтение осуществляется функцией readMatrix, в которой используются функции readSize(размер матрицы в файле), readElements(элементы матрицы в файле) и readNumber( чтение числа в файле).
Умножение осуществляется функцией matrixMult, в которой используются функции rowMult (возвращает строку результирующей матрицы) и elemSum(возвращает элемент результирующей матрицы).
Результаты вычислительного эксперимента
Количество строк и столбцов обеих матриц: 100:
Число процессоров |
Время решения, секунды |
1 |
102.452 |
2 |
82.722 |
3 |
79.589 |
4 |
79.104 |
5 |
77.836 |
6 |
76.314 |
7 |
74.962 |
9 |
76.008 |
-
Поиск минимального остовного дерева (оптимального каркаса) методом Прима
Описание
Алгоритм начинает работу с произвольной вершины графа, выбираемой в качестве корня дерева, и в ходе последовательно выполняемых итераций расширяет конструируемое дерево до МОД. Пусть есть множество вершин, уже включенных алгоритмом в МОД, а величины , 1<= <=n, характеризуют дуги минимальной длины от вершин, еще не включенных в дерево, до множества , т.е.
(если для какой-либо вершины не существует ни одной дуги в , значение устанавливается равным ). В начале работы алгоритма выбирается корневая вершина МОД s и полагается ={s}, =0.
Действия, выполняемые на каждой итерации алгоритма Прима, состоят в следующем:
-
определяются значения величин di для всех вершин, еще не включенных в состав МОД;
-
выбирается вершина t графа G, имеющая дугу минимального веса до множества ;
-
вершина t включается в VT.
После выполнения n-1 итерации метода МОД будет сформировано. Вес этого дерева может быть получен при помощи выражения
Реализация.
Был создан тип «Список»(«List») (см. реализацию перемножения матриц) и тип «Пара»(«Pair») – кортеж из двух элементов типа int.
Граф представляется матрицей смежности.
Матрицы представляются в виде списка списков, считываются из файлов.
Чтение осуществляется функциями readSize(размер матрицы в файле), readElements(элементы матрицы в файле) и readNumber( чтение числа в файле).
Умножение осуществляется функцией prims, в которой используются функции Iteration(итерация алгоритма Прима), checkForMin(ищет дугу с минималным весом для всех вершин остова), adjIteration(перебор вершин остова), adjCheckForMin (ищет дугу с минималным весом для одной вершины остова).
Результаты вычислительного эксперимента
200 вершин:
Число процессоров |
Время решения, секунды |
1 |
280.058 |
2 |
275.579 |
3 |
269.447 |
4 |
266.144 |
5 |
268.342 |
6 |
265.533 |
7 |
262.982 |
9 |
261.835 |