На практике встречаются массивы, которые в силу определенных
причин могут записываться в память не полностью, а частично. Это
особенно актуально для массивов настолько больших размеров, что
для их хранения в полном объеме памяти может быть недостаточно. К
таким массивам относятся симметричные и разреженные массивы.
СИММЕТРИЧНЫЕ МАССИВЫ. Двумерный массив, в котором количество
строк равно количеству столбцов называется квадратной матрицей.
Квадратная матрица, у которой элементы, расположенные симметрично
относительно главной диагонали, попарно равны друг другу, называ-
ется симметричной. Если матрица порядка n симметрична, то в ее
физической структуре достаточно отобразить не n^2, а лишь
n*(n+1)/2 её элементов. Иными словами, в памяти необходимо предс-
тавить только верхний (включая и диагональ) треугольник квадрат-
ной логической структуры. Доступ к треугольному массиву организу-
ется таким образом, чтобы можно было обращаться к любому элементу
исходной логической структуры, в том числе и к элементам, значе-
ния которых хотя и не представлены в памяти, но могут быть опре-
делены на основе значений симметричных им элементов.
На практике для работы с симметричной матрицей разрабатыва-
ются процедуры для:
а) преобразования индексов матрицы в индекс вектора,
б) формирования вектора и записи в него элементов верхнего треу-
гольника элементов исходной матрицы,
в) получения значения элемента матрицы из ее упакованного предс-
тавления. При таком подходе обращение к элементам исходной матри-
цы выполняется опосредованно, через указанные функции.
В приложении приведен пример программы для работы с симмет-
ричной матрицей.
РАЗРЕЖЕННЫЕ МАССИВЫ. Разреженный массив - массив, большинс-
тво элементов которого равны между собой, так что хранить в памя-
ти достаточно лишь небольшое число значений отличных от основного
(фонового) значения остальных элементов.
Различают два типа разреженных массивов:
1) массивы, в которых местоположения элементов со значениями от-
личными от фонового, могут быть математически описаны;
2) массивы со случайным расположением элементов.
В случае работы с разреженными массивами вопросы размещения
их в памяти реализуются на логическом уровне с учетом их типа.