ществляем доступ к массиву Row только через массив FirstlnCol, то всегда знаем номер текущего столбца.
Объем памяти можно сократить и многими другими методами структуризации данных. В разд. 3.1 мы экономили память, запоминая "рваную" трехмерную таблицу в виде двухмерного массива. Если мы используем ключ, который надо хранить в памяти, в качестве номера элемента массива, то нет необходимости хранить сам ключ, можно запомнить только относящийся к нему атрибут, например счетчик числа его повторений. Применение метода индексирования по ключу было описано в разд. 1.4 и 8.2 и в задачах 7 и 8 гл. 1. В вышеприведенном примере с разреженной матрицей использование ключа в качестве индекса в массиве FirstlnCol позволило нам решить задачу без массива Col. Запоминание указателей, выделяющих фрагменты больших объектов (таких как длинные текстовые строки), устраняет затраты, связанные с хранением многих копий одного и того же объекта, хотя необходимо быть внимательным, модифицируя объект, принадлежащий многим пользователям. Этот метод применен в моем настольном календаре (с 0221 по 2080 гг.). Вместо того, чтобы иметь 260 различных календарей, используется 14 канонических календарей (с учетом високосного года) и приводится таблица, в которой дан номер календаря для каждого из 260 годов.
Сжатие данных. Идеи из теории информации позволяют сократить память с помощью компактного кодирования данных. В примере с разреженной матрицей мы предположили, что элементы массива Row-16-разрядные целые числа. Так как номер строки находится в диапазоне от 1 до 150, элементы этого массива можно было бы представить 8-битовыми байтами, что сэкономило бы 1 Кбайт памяти. В системе для деловых контактов на базе микрокомпьютера я кодировал две десятичные цифры одним байтом (вместо очевидных двух), записывая целое число N = 10 х А + В. Информация декодировалась так:
А := N div 10 В :- N mod 10
Эта простая схема сжимала объем файла с цифровыми данными до размера одной дискеты вместо двух *. Такое кодирование может уменьшить