Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы / Глава 2_Инф._структуры.doc
Скачиваний:
70
Добавлен:
15.02.2015
Размер:
1.28 Mб
Скачать

2.4.2. Адресация массивов

Адресация массива при последовательном распределении памяти. Когда массив хранится по последовательно предоставленным адресам, адресация его элементов задаётся формулами, аналогичными (16). Пусть начало массива задаётся базовым адресом , причём отдельный элемент занимает объём памяти адресуемых единиц. Тогда, в соответствии с (16) и (17):

- для элемента одномерного массива его адрес

; (20)

- для элемента двумерного массива его адрес

; (21)

- для элемента трёхмерного массива его адрес

. (22)

Таким образом, правило вычисления адреса элемента по заданному набору индексов обеспечивает одинаковое время доступа ко всем элементам массива.

Адресация массива при связанном распределении памяти. Связанное (цепное) распределение памяти позволяет представлять многомерные массивы в ситуациях, когда элементы одного списка могут включаться в ещё несколько списков.

В этом случае -мерный массив реализуется двунаправленным цепным списком, в котором кроме поля для хранения значения элемента массива имеютсяполей связи (по удвоенному числу индексов) с указателями. Указателиисодержат, соответственно, адрес предшествующего и последующего элементов в том — уже линейном — списке, который «вырезается» из общего многомерного массива, когда фиксируются значения всех индексов, кроме-го.

Двунаправленное связанное представление массива целесообразно, когда каждый индекс соответствует какому-либо признаку. Например, поле для первого индекса связывает в общем списке людей с одинаковым цветом глаз, поле для второго индекса — людей одного пола, поле для третьего индекса — людей одного возраста и т. д. При этом поле для значения элемента может, например, выражать количество людей с соответствующим набором признаков.

2.4.3. Представление разреженных матриц

Прямоугольная матрица размераназывается разреженной, если большинство её элементов равно нулю. Последовательная адресация для хранения такой матрицы неэффективна, поскольку достаточно хранить только небольшое число ненулевых элементов. Разумеется, при этом усложняются алгоритмы работы с массивом.

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

Другой возможностью является представление разреженной матрицы циклически связанными списками строк и столбцов способом, описанным в предыдущем пункте (см. также [7], с. 345 и далее). В элемент списка кроме поля со значениемвключаются четыре (так как размерность массива равна) поля для указателей: поляиуказывают адреса связи со следующими ненулевыми элементами при движении влево по строке или вниз по столбцу, а поляизадают индексы элемента, т.е. номера строки и столбца (рис. 8).

Группа 547

Рис. 8.

Кроме того, для каждой строки и каждого столбца задаются заголовки списков и. Предполагается, что ссылка в списке служит адресом крайнего справа элемента-й строки, а ссылка в списке служит адресом последнего элемента-го столбца.

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