Преобразование матрицРефераты >> Программирование и компьютеры >> Преобразование матриц
Первый способ следует применять, когда имя транспонированной матрицы не совпадает с именем исходной матрицы, т.е. когда исходная и транспонированная матрицы хранятся в разных областях памяти ЭВМ. Этот алгоритм будет такой же, как на рисунке 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 |