Хеширование - Hash consing
В Информатика, особенно в функциональное программирование, хеширование это метод, используемый для разделения структурно равных ценностей. Период, термин хеширование происходит от реализации Лисп[1][2] эта попытка повторно использовать минусы ячейки, которые были построены ранее, избегая штрафа выделение памяти. Хеширование чаще всего реализуется с помощью хеш-таблицы хранение слабые ссылки это может быть сборщик мусора когда хранящиеся в нем данные не содержат Рекомендации из-за стола.[3][4] Было показано, что хеширование приводит к значительному увеличению производительности - как пространства, так и времени - для символический и динамическое программирование алгоритмы.[нужна цитата ] Интересным свойством хеширования является то, что две структуры могут быть проверены на равенство за постоянное время, что, в свою очередь, может повысить эффективность разделяй и властвуй алгоритмы, когда наборы данных содержат перекрывающиеся блоки.[5]
Пример
Простой, не очень эффективный, но подходящий для демонстрации концепции реализации мемоизатор с помощью хеш-таблицы и слабых ссылок в Схема:
;; слабые хеши;;(требовать 'хеш-таблица)(определять (сделать слабый стол . аргументы) (подать заявление make-hash-table аргументы))(определять (слабый стол! стол ключ данные) (позволять ((ш (ссылка на хеш-таблицу стол ключ #f))) (если ш (вектор-набор! ш 0 данные) (позволять ((ш (make-weak-vector 1))) (вектор-набор! ш 0 данные) (набор хеш-таблиц! стол ключ ш)))))(определять (слабая таблица-ссылка стол ключ) (позволять ((ш (ссылка на хеш-таблицу стол ключ #f))) (если ш (вектор-ссылка ш 0) #f)));; фабрика мемоизаторов: для данной (без побочных эффектов) процедуры,;; вернуть процедуру, которая делает то же самое запоминание некоторых результатов;; в смысле равных? по всему списку аргументов;;(определять (make-weak-memoizer proc) (позволять ((тайник (сделать слабый стол равный?))) (лямбда аргументы (позволять ((Икс (слабая таблица-ссылка тайник аргументы))) (если (bwp-объект? Икс) (позволять ((р (подать заявление proc аргументы))) (слабый стол! тайник аргументы р) р) Икс)))))
Смотрите также
Рекомендации
- ^ Дойч, Лоуренс Питер (1973). «Интерактивный верификатор программ». Пало-Альто: Исследовательский центр Xerox в Пало-Альто Технический отчет CSL-73-1. Цитировать журнал требует
| журнал =
(помощь) - ^ Гото, Эйити (1974). «Монокопия и ассоциативные алгоритмы в расширенном Лиспе». Токио: Токийский университет Технический отчет TR 74-03. Цитировать журнал требует
| журнал =
(помощь) - ^ Аллен, Джон (1978). Анатомия Лиспа. Макгроу Хилл. ISBN 0-07-001115-X.
- ^ Фийатр, Жан-Кристоф; Кончон, Сильвен (2006). «Типобезопасный модульный хеш-анализ». Мастер-класс по ML. ACM.
- ^ Лильензин, Олле (2013). «Конфлюентно постоянные множества и карты». arXiv:1301.3388. Bibcode:2013arXiv1301.3388L. Цитировать журнал требует
| журнал =
(помощь)
дальнейшее чтение
- Ершов, А.П. (1958). «О программировании арифметических операций». Коммуникации ACM. 1 (8): 3–6. Дои:10.1145/368892.368907.
- Жан Губо. Реализация функциональных языков с быстрым равенством, наборами и отображениями: упражнение по согласованию хэша. В Journées Francophones des Langages Applicatifs (JFLA’93), страницы 222–238, Анси, февраль 1993 г.
Этот Информатика статья - это заглушка. Вы можете помочь Википедии расширяя это. |