Преобразование матриц
Рефераты >> Программирование и компьютеры >> Преобразование матриц

Первый способ следует применять, когда имя транспонированной матрицы не совпадает с именем исходной матрицы, т.е. когда исходная и транспонированная матрицы хранятся в разных областях памяти ЭВМ. Этот алгоритм будет такой же, как на рисунке 1, если в блоке 4 вместо формулы (4.1) записать формулу (4.4).

Второй способ следует применять, когда транспонирование требуется выполнить в той же области памяти, где располагается исходная матрица, т.е. когда транспонированная матрица должна иметь такое же имя, как и исходная (например, для экономии памяти). В этом случае для перестановки элементов необходимо организовать циклический процесс не в полном объёме, как это делается при первом способе, а в половинном, так как в противном случае каждый элемент будет переставлен дважды и, следовательно, исходная матрица останется без изменений.

На рисунке 3 приведён алгоритм транспонирования матрицы А, состоящей из n строк и m столбцов, реализующий просмотр и переустановку только тех элементов, которые расположены выше главной диагонали, так как в блоке 3 переменная цикла j (номер столбца) изменяется от i+1, а не от 1, как при первом способе. В блоке 4 реализуется операция перестановки двух элементов с использованием рабочей ячейки c.

4.5. Поиск максимального (минимального) элемента матрицы.

Алгоритм определения максимального элемента матрицы А, состоящей из n строк и m столбцов, приведен на рисунке 4. в рабочую ячейку am заносится один из элементов массива (блок 2), который вначале предполагается самым большим. Далее путем последовательного сравнения значения am с элементами массива ищется элемент, больший am. Если такой элемент находится, то он записывается в рабочую ячейку am, заменяя ее прежнее значение (блок 6). После просмотра всех элементов исходного массива в ячейке am окажется сохранённым максимальный элемент. Если по условию задачи требуется знать не только величину максимального элемента, но и его координаты, то можно воспользоваться алгоритмом, представленным на рисунке 5. этот алгоритм отличается от предыдущего только тем, что в блоках 2 и 6 сохраняется не сам текущий максимум, а его координаты. Для этого требуются рабочие ячейки im и jm. Если в блоке 5 (рисунки 4 и 5) изменить отношение > на отношение <, то получим алгоритмы поиска минимального элемента и его координат.

4.6. Формирование вектора из элементов матрицы.

4.6.1. Пусть требуется «развернуть» матрицу А размерами m*n в одномерный массив (вектор) В по столбцам, т.е. вначале записать в вектор элементы первого столбца исходного массива, затем элементы второго столбца, затем третьего и т.д., в соответствии с формулами:

b1=a11, b2=a21, bn=an1, bn+1=a12, bn+2=a22, ., b2n=an2, ., bm*n=anm.

Алгоритм преобразования матрицы в вектор по правилам (5) заключается в следующем (рисунок 6). Вводится вспомогательная переменная k – номер элемента вектора (в блоке 2 ей присваивается начальное значение k=0). В цикле просмотра элементов исходного массива (блоки 3-7) по столбцам осуществляется подготовка в ячейке k номера очередного элемента вектора и запись k-й элемент вектора В элементов aij (блок 5). На выходе значение kбудет равно числу элементов, записанных в векторе В, т.е. k=m*n.

4.6.2 Пусть требуется сформировать вектор из максимальных элементов строк массива А размерами m*n. Для решения задачи необходимо: 1) реализовать просмотр исходного массива по строкам; 2) в ходе просмотра каждой строки находить максимальный элемент; 3) по окончании просмотра каждой строки записывать найденный максимальный элемент в вектор.

Алгоритм формирования вектора представлен на рисунке 7. Здесь p и q – координаты максимального элемента строки матрицы, i – номер строки матрицы, одновременно i используется для указания номера элемента вектора. Данный алгоритм представляет собой совокупность двух предыдущих алгоритмов: поиска максимального элемента (рис. 5) и преобразования матрицы в вектор (рис. 6). Отличия заключаются в следующем: 1) поиск ведётся не во все матрице, а в каждой её строке, поэтому установка начальных значений координат im и jm осуществляется внутри цикла по строке (блок 3); 2) не требуется дополнительная ячейка k для указания номера элемента в векторе, так как её значение совпадает с номером строки i.

Аналогичным образом решаются и другие задачи, связанные с формированием вектора выходных значений.

4.7. Упорядочивание элементов массива по возрастанию (убыванию) – сортировка.

На практике часто требуется расположить элементы массива в порядке возрастания (убывания) их значений. Такие задачи называются задачами сортировки. Существует большое количество методов сортировки. Отличающихся экономичностью использования памятью ЭВМ, сложностью реализации, скоростью работы и т.д.

Рассмотрим один из методов сортировки элементов вектора B(n) – метод простого обмена («пузырька»). Данный метод прост в реализации, нагляден, быстро работает при малых n. Суть метода заключается в следующем. Начиная с конца массива и двигаясь к его началу, выполняют сравнение пары соседних элементов и перестановку их, если они не упорядочены. За один проход на первом месте в массиве окажется самый маленький (большой) элемент. Каждый последующий проход должен заканчиваться на один элемент раньше и «просеивать» наименьший (наибольший) элемент из оставшихся. Таким образом, для полной сортировки потребуется сделать n-1 проходов, количество перестановок при этом зависит от расположения элементов в исходном массиве. Ниже приведена иллюстрация метода «пузырька».

Исходный массив

i– номер прохода (верхняя граница)

 

1

2

3

4

5

6

7

 

44

55

12

42

94

18

6

67

6

6

12

6

12

18

6

12

18

42

6

12

18

42

44

6

12

18

42

44

55

6

12

18

42

44

55

67

94

 

44

55

12

42

44

55

18

44

55

44

94

18

67

42

94

67

42

67

94

55

67

94

55

67

94

67

94

Число перестановок

6

4

3

2

0

0

0


Страница: