Хэш консинг - Hash consing - Wikipedia

Жылы Информатика, атап айтқанда функционалды бағдарламалау, хэш консинг - бұл құрылымдық жағынан тең құндылықтарды бөлісу үшін қолданылатын әдіс. Термин хэш консинг жүзеге асырудан туындайды Лисп[1][2] қайта пайдалануға тырысу минус жазасынан құтылып, бұрын салынған ұяшықтар жадыны бөлу. Хэш консигнациясы көбінесе жүзеге асырылады хэш кестелер сақтау әлсіз сілтемелер болуы мүмкін қоқыс онда сақталған деректерде жоқ болған кезде сілтемелер үстелдің сыртынан.[3][4] Хэш-консинг кеңістікті де, уақытты да өнімділікті айтарлықтай жақсартатыны көрсетілген символдық және динамикалық бағдарламалау алгоритмдер.[дәйексөз қажет ] Хэш-консингтің қызықты қасиеті - екі құрылымды теңдікке тұрақты уақытта тексеруге болады, ал бұл өз кезегінде тиімділікті арттыра алады бөлу және жеңу деректер жиынтығында қабаттасатын блоктар болған кезде алгоритмдер.[5]

Мысал

Қарапайым, өте тиімді емес, бірақ тұжырымдаманы жүзеге асыруға ыңғайлы а естелік хэш кестесі және әлсіз сілтемелер арқылы Схема:

;; әлсіз хэштер;;(талап ету хэш-кесте)(анықтау (әлсіз-кесте . доға)  (қолдану хэш-кесте доға))(анықтау (әлсіз үстел! кесте кілт деректер)  (рұқсат етіңіз ((w (hash-table-ref кесте кілт #f)))    (егер w        (вектор-жиын! w 0 деректер)      (рұқсат етіңіз ((w (әлсіз-векторлы 1)))        (вектор-жиын! w 0 деректер)        (хэш-үстел! кесте кілт w)))))(анықтау (әлсіз кесте-реф кесте кілт)  (рұқсат етіңіз ((w (hash-table-ref кесте кілт #f)))    (егер w        (вектор-реф w 0)      #f)));; есте сақтау фабрикасы: берілген (жанама әсер етпейтін) процедура үшін,;; кейбір нәтижелерді есте сақтайтын процедураны қайтарыңыз;; мағынасында? аргумдардың барлық тізімінде;;(анықтау (әлсіз-есте сақтау proc)  (рұқсат етіңіз ((кэш (әлсіз-кесте тең бе?)))    (лямбда доға      (рұқсат етіңіз ((х (әлсіз кесте-реф кэш доға)))        (егер (bwp-объект? х)            (рұқсат етіңіз ((р (қолдану proc доға)))              (әлсіз үстел! кэш доға р)              р)          х)))))

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Дойч, Лоренс Питер (1973). «Интерактивті бағдарламаны тексеруші». Пало Альто: Xerox Palo Alto зерттеу орталығы Техникалық есеп CSL-73-1. Журналға сілтеме жасау қажет | журнал = (Көмектесіңдер)
  2. ^ Гото, Эйичи (1974). «Кеңейтілген Лисптегі монокопия және ассоциативті алгоритмдер». Токио: Токио университеті Техникалық есеп TR 74-03. Журналға сілтеме жасау қажет | журнал = (Көмектесіңдер)
  3. ^ Аллен, Джон (1978). Лисптің анатомиясы. McGraw Hill. ISBN  0-07-001115-X.
  4. ^ Филлатр, Жан-Кристоф; Conchon, Sylvain (2006). «Қауіпсіз типті қауіпсіз модуль». ML бойынша семинар. ACM.
  5. ^ Лильензин, Олле (2013). «Келісімді тұрақты жиынтықтар мен карталар». arXiv:1301.3388. Бибкод:2013arXiv1301.3388L. Журналға сілтеме жасау қажет | журнал = (Көмектесіңдер)

Әрі қарай оқу

  • Ершов, А.П. (1958). «Арифметикалық амалдарды бағдарламалау туралы». ACM байланысы. 1 (8): 3–6. дои:10.1145/368892.368907.
  • Жан Губа. Функционалды тілдерді жылдам теңдікпен, жиынтықтармен және карталармен жүзеге асыру: хэштегі жаттығу. Жылы Journées Francophones des Langages Applicationatifs (JFLA’93), 222–238 беттер, Энси, 1993 ж., Ақпан.