Сборщик мусора (garbage collector) позволяет заново использовать память, отведенную под уже освобожденные записи. Алгоритм сортировки с помощью кучи (heapspot algorithm) в разделе 14.4 (глава 14) попеременно хранит в одних и тех же адресах памяти разные логические структуры данных.
Другой подход к совместному использованию памяти был применен Брайаном Кернигапом (Brian Kernighan) в начале 70-х при решении задачи коммивояжера, где большая часть памяти отводилась иод две матрицы 150x150. В двух матрицах, которые мы назовем а и Ь, хранилось расстояние между точками. Кер- ниган знал, что диагонали этих матриц должны быть нулевыми (a[i, i] = 0) и что матрицы должны быть симметричны (a[i, j] = a[j, i]). Поэтому он поместил две треугольные матрицы в одну квадратную (с), один из углов которой изображен на рис. 10.4.
Затем Керниган обращался к элементу a[i, j] следующим образом:
с [ та х (1 , j ), mind . j)]
0 b[0,1] Ы 0,2] b[0,3]
a[1,0] 0 Ы1,2] b[1,3]
a[2,0] a[2.1] 0 b[2,3]
a[3,0] a[3.1] a[3,2] 0
Рис. 10.4. Объединение двух треугольных матриц
Аналогично можно обратиться и к элементу b[i,j], поменяв местами min и max. Подобное представление используется в различных программах со времен сотворения мира. Оно несколько замедлило и усложнило программу Кернигана, по переход от двух матриц по 22 500 слов к одной на машине с 30 000 слов значил довольно много. А если бы матрицы были размерностью 30 000 х 30 000, аналогичное действие было бы необходимым и на современной машине с гигабайтом памяти.
Опубликовал vovan666
April 17 2013 00:01:54 ·
0 Комментариев ·
4224 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.