
- •Лабораторная работа 2 (Вариант 15) Итеративные и рекурсивные алгоритмы, Алгоритмы построения остовного (покрывающего) дерева сети Лаб. Раб. №3, Часть 1, задание 3
- •Лаб. Раб. №3, Часть 1, задание 4
- •Метод Прима:
- •Виды обхода бинарных деревьев
- •Алгоритм Фокса
- •Алгоритм Кэннона
- •Ленточный алгоритм
- •Теоретические сведения
- •Каковы особенности итеративного и рекурсивного алгоритма?
- •В каких случаях целесообразно использовать рекурсивный или итеративный алгоритм? Приведите примеры итерации и рекурсии.
- •Все ли языки программирования дают возможность рекурсивного вызова процедур?
- •Приведите пример рекурсивной структуры данных.
- •Что такое указатели и динамические переменные в языке Турбо Паскаль?
- •Укажите виды обхода бинарных деревьев.
- •Приведите пример рекурсивной структуры данных.
- •Что такое указатели и динамические переменные в алгоритмических языках?
- •Что понимается под остовным деревом?
- •Каковы особенности методов Крускала и Прима?
- •В чем состоит методика анализа сложности алгоритмов построения остовного дерева графа?
- •Определить, является ли связным заданный граф.
- •Найти все вершины графа, к которым существует путь заданной длины от выделенной вершины графа.
- •Найти все вершины графа, достижимые из заданной.
- •Подсчитать количество компонент связности заданного графа.
- •Найти диаметр графа, т.Е. Максимум расстояний между всевозможными парами его вершин.
- •Найти такую нумерацию вершин орграфа, при которой всякая дуга ведет от вершины с меньшим номером к вершине с большим номером.
Виды обхода бинарных деревьев
Наиболее распространены три способа обхода узлов дерева, выше
получили следующие названия (рис.5):
1) обход в направлении слева направо (обратный порядок, инфиксная запись);
2) обход сверху вниз (прямой порядок, префиксная запись);
3) обход снизу вверх (концевой порядок, постфиксная запись).
Параллельные методы умножения блочнопредставленных матриц
Алгоритм Фокса
Для организации параллельных вычислений при блочном представлении матриц предположим, что процессоры образуют логическую
прямоугольную решетку размером k×k (обозначим через pij процессор,
располагаемый на пересечении i строки и j столбца решетки).
Основные положения параллельного метода, известного как алгоритм Фокса, состоят в следующем:
каждый из процессоров решетки отвечает за вычисление одного
блока матрицы C;
в ходе вычислений на каждом из процессоров pij располагаются
четыре матричных блока: блок Сij матрицы C, вычисляемый процессором; блок Aij матрицы A, размещенный в процессоре перед началом вычислений; блоки
Aij’ и Bij’ - матриц A и B, получаемые процессором в
ходе выполнения вычислений.
Выполнение параллельного метода включает:
1) этап инициализации, на котором на каждый процессор pij передаются блоки Aij, Bij и обнуляются блоки Cij на всех процессорах;
2) этап вычислений, на каждой итерации l (1 ≤ l ≤ k) которого выполняется:
для каждой строки l (1 ≤ l ≤ k) процессорной решетки блок Aij
процессора pij пересылается на все процессоры той же строки i; индекс
j, определяющий положение процессора pij в строке, вычисляется по со-
отношению j = (i +l ‒ 1) mod (k +1), (mod - операция получения остатка
от целочисленного деления);
полученные в результате пересылок блоки Aij’ и Bij’
каждого процессора pij перемножаются и прибавляются к блоку Cij: Cij = Cij +
Aij’ × Bij’;
блоки Bij’каждого процессора pij пересылаются процессорам pij,
являющимся соседями сверху в столбцах процессорной решетки (блоки
процессоров из первой стр решетки пересылаются процессорам последней строки решетки).
Алгоритм Кэннона
Отличие алгоритма Кэннона от алгоритма Фокса состоит в изменении схемы начального распределения блоков перемножаемых матриц
между процессорами вычислительной системы. Начальное расположение блоков в алгоритме Кэннона подбирается таким образом, чтобы
располагаемые блоки на процессорах могли быть перемножены без каких-либо дополнительных передач данных между процессорами. При
этом подобное распределение блоков может быть организовано таким
образом, что перемещение блоков между процессорами в ходе вычислений может осуществляться с использованием более простых коммуникационных операций.
С учетом высказанных замечаний этап инициализации алгоритма
Кэннона включает выполнение следующих операций передач данных:
на каждый процессор pij передаются блоки Aij, Bij;
для каждой строки i процессорной «решетки» блоки матрицы A
сдвигаются на (i - 1) позиций влево;
для каждого столбца j процессорной «решетки» блоки матрицы В
сдвигаются на (j - 1) позиций вверх.
В ходе вычислений на каждой итерации алгоритма Кэннона каждый блок матрицы A сдвигается на один процессор влево по решетке, а
каждый блок матрицы В - на один процессор вверх.