Jump to content

Хеширование

(Перенаправлено с Hashcons )

В информатике , особенно в функциональном программировании , хеширование — это метод, используемый для совместного использования значений, которые структурно равны. Когда создается значение, например cons -ячейка, метод проверяет, было ли такое значение создано ранее, и если да, то повторно использует предыдущее значение, избегая нового выделения памяти . Полезным свойством хэш-консинга является то, что две структуры можно проверить на равенство за постоянное время посредством равенства указателей, что, в свою очередь, может повысить эффективность алгоритмов «разделяй и властвуй», когда наборы данных содержат перекрывающиеся блоки. [1] Было показано, что хеширование дает значительное улучшение производительности — как по пространству, так и по времени — для символьного и динамического программирования . алгоритмов [ нужна ссылка ]

Консервирование хеширования чаще всего реализуется с помощью хеш-таблиц, в которых хранятся слабые ссылки , которые могут быть удалены сборщиком мусора , если хранящиеся в них данные не содержат ссылок извне таблицы. [2] [3]

Просто, не очень эффективно, но подходит для демонстрации реализации концепции мемоайзера посредством хеш-таблицы и слабых ссылок в Scheme :

;; слабые хеши  ;;  (  требуется   'хеш-таблица  )  (  определить   (  make-weak-table   .   args  )    (  применить   make-hash-table   args  ))  (  определить   (  weak-table-set!   table   key   data  )    (  let   ((  w   (  хеш-таблица -ref   таблицы   ключ   #f  )))      (  if   w          (  vector-set!   w   0   data  )        (  let   ((  w   (  make-weak-vector   1  )))          (  Vector-set!   w   0   data  )          (  hash-table- set!   table   key   w  )))))  (  define   (  weak-table-ref   table   key  )    (  let   ((  w   (  таблицы hash-table-ref   #f   ключ   )  ))      (  if   w          (  vector-ref   w   0  )        # ж  )))  ;; memoizer Factory: для данной (без побочных эффектов) процедуры  ;; вернуть процедуру, которая делает то же самое, запоминая некоторые результаты  ;; в смысле равный? по всему списку аргументов  ;;  (  define   (  make-weak-memoizer   proc  )    (  let   ((  кэш   (  make-weak-table   равны?  )))      (  лямбда   -аргументы        (  let   ((  x   (  слабой таблицы-ref   кэша   аргументы  )))          (  if   (  bwp- объект?   x  )              (  let   ((  r   (  применить   процедуры   аргументы  )))                (  набор слабых таблиц!   кэша   аргументы   r  )                r  )            x  )))) 

Методика компиляции хэш-консенса была предложена А. П. Ершовым в 1958 году. [4] [5] Термин «хэш-консинг» возник из реализаций Lisp в 1970-х годах. [6] [7]

См. также

[ редактировать ]
  1. ^ Лильензин, Олле (2013). «Слитно устойчивые множества и карты». arXiv : 1301.3388 [ cs.DS ].
  2. ^ Аллен, Джон (1978). Анатомия Лиспа . МакГроу Хилл . ISBN  0-07-001115-Х .
  3. ^ Филлиатр, Жан-Кристоф; Коншон, Сильвен (2006). «Типобезопасное модульное хэширование». Семинар по ML . АКМ .
  4. ^ Ершов А.П. (1 августа 1958 г.). «О программировании арифметических операций» . Коммуникации АКМ . 1 (8): 3–6. дои : 10.1145/368892.368907 . ISSN   0001-0782 . S2CID   15986378 .
  5. ^ «Совместное использование и устранение общих подвыражений в компиляции EDSL» . okmij.org . Проверено 27 апреля 2023 г.
  6. ^ Дойч, Лоуренс Питер (1973). Интерактивный верификатор программы (PDF) (доктор философии). Пало-Альто: исследовательского центра Xerox Пало-Альто CSL-73-1. Технический отчет
  7. ^ Гото, Эйичи (1974). Монокопия и ассоциативные алгоритмы в расширенном Lisp (PDF) (Технический отчет). Токио: Технический отчет Токийского университета TR 74-03.

Дальнейшее чтение

[ редактировать ]


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 4ed5b1f3724d6e85b59e86bdecea9e4f__1691924520
URL1:https://arc.ask3.ru/arc/aa/4e/4f/4ed5b1f3724d6e85b59e86bdecea9e4f.html
Заголовок, (Title) документа по адресу, URL1:
Hash consing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)