МЕНЮ:
Аналитик | Постановщик задач | Проектировщик | Программист | Программист БД
Инженер по тестированию | Тестировщик | Инженер по документированию
Инженер по внедрению | Инженер поддержки | Менеджер проекта | Менеджер подразделения
Менеджер по продажам | Менеджер по маркетингу | Администратор | Администратор БД
Литература | Контакты
\

Книга Жемчужены творчества программистов на IT БАЗАР

ществляем доступ к массиву 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
Эта простая схема сжимала объем файла с цифровыми данными до раз­мера одной дискеты вместо двух *. Такое кодирование может уменьшить
Некоторые читатели предложили использовать такое кодирование: N := (A Ishift 4) or В (lshift — сдвиг влево). Значения могут быть декодированы операторами А :■= rshift 4 (rshift — сдвиг вправо) и В := N and 1Ш2. Дж. Линдерман отметил, что операция сдвига и наложения маски обычно не только осуществляется быстрее, чем умножение и деление, но стандартные служебные подпрограммы, такие, как вывод на печать в шестнадцатеричнэм виде, отобра­жают закодированные таким образом данные в легко воспринимаемом виде.
Ш


Страница №140
*
Зайцев нет
© "IT БАЗАР", 2003. Все права защищены. Создание: © "z-group" студия веб-дизайна, 2003.
Также может поискать работу на прямую в следуйщих организациях:
IT БАЗАР