Кіріспе

Деректер құрылымы хэштеу схемасы

Cuckoo hashing – компьютерлік бағдарламалауда кестедегі хэш функцияларының мәндерінің хэш-тұрастығын шешуге арналған схема, ең нашар жағдайда тұрақты іздеу уақытын қамтамасыз етеді. Атауы, кейбір көкек түрлерінің мінез-құлқынан алынған, онда көкек балапаны шайқап шығарып, ұядағы басқа жұмыртқаларды немесе жастарды қуып шығарады – бұл ұя паразиттерінің мінез-құлқының бір түрі; сол сияқты, Cuckoo hashing кестесіне жаңа кілт енгізу, ескі кілтті кестедегі басқа орынға ығыстыруы мүмкін.

Тарих

Куку шашуын алғаш рет Расмус Паг және Флеминг Фриче Родлер 2001 жылғы конференция баяндамасында сипаттады. Бұл баяндама 2020 жылы Еуропалық алгоритмдер симпозиумының «Уақыт сынағынан өткен» сыйлығымен марапатталды.

Операциялар

Cuckoo хэшинг – хэш-таблицаның бос емес ұяшықтарында кілт немесе кілт-мәндік жұптар сақталатын ашық адрестеу түрі. Әр кілттің орналасуын анықтау үшін хэш-функция қолданылады, ал оның таблицадағы болуы (немесе оған сәйкес келетін мән) сол ұяшықты қарастыру арқылы табылады. Дегенмен, ашық адрестеу соқтығыстардан зардап шегеді, бұл бірнеше кілттің бір ұяшыққа түсуінен пайда болады. Cuckoo хэшингінің негізгі идеясы – соқтығыстарды шешу үшін бір емес, екі хэш-функцияны пайдалану. Бұл әр кілт үшін хэш-таблицада екі мүмкін орынды ұсынады. Алгоритмнің көп қолданылатын нұсқаларының бірінде хэш-таблица тең өлшемді екі кіші таблицаға бөлінеді, және әр хэш-функция осы екі таблицаның бірінде индексті анықтайды. Екі хэш-функция да бір таблицаға индекстер беруі мүмкін.

Жою

Жою операциясы іздеу болмағандықтан дереу орындалады. Егер кесте тым сирек болса, қысқарту операциясының бағасы ескерілмейді.

Практика

Іс жүзінде, кукушкалық хэштеу желілік зондтаудан шамамен 20–30% баяу, ал желілік зондтау – қолданылатын әдістердің ең жылдам түрі. Кукушкалық хэштеудің тағы бір жалпылама түрі – бұғатталған кукушкалық хэштеу, ол әр бөшкеге бірнеше кілтті орналастырып, теңгерімді үлестіру схемасын қолданады. Әр бөшкеге тек 2 кілтті қолдану 80% жоғары жүктемеге мүмкіндік береді. Кукушкалық хэштеудің тағы бір зерттелген түрі – қоймасы бар кукушкалық хэштеу. Бұл дерек құрылымындағы қойма – тұрақты мөлшердегі кілттер массиві, ол құрылымның негізгі хэш-кестесіне сәтті енгізілмейтін кілттерді сақтау үшін пайдаланылады. Бұл өзгеріс кукушкалық хэштеудің сәтсіздік деңгейін инверстік полиномдық функцияға дейін төмендетеді, оның көрсеткіші қойманың көлемін арттыру арқылы кез келген деңгейде үлкен болуы мүмкін. Дегенмен, үлкен қоймалар кілттерді іздеуді де баяулатады, егер олар болмаса немесе қоймада сақталса. Қойманы жоғары жүктеме коэффициенттеріне және төмен сәтсіздік деңгейлеріне қол жеткізу үшін екіден астам хэш-функциялармен немесе бұғатталған кукушкалық хэштеумен бірге пайдалануға болады. Қоймасы бар кукушкалық хэштеуді талдау, хэштеудің теориялық талдауында жиі қолданылатын кездейсоқ хэш-функциялар моделіне ғана емес, сонымен қатар практикалық хэш-функцияларға да қатысты. Кейбір мамандар кейбір процессорлардың кэштерінде бұрыс ассоциативтік кэш деп аталатын кукушкалық хэштеудің қарапайымдалған түрін ұсынады. Кукушкалық хэш-кестенің тағы бір нұсқасы – кукушкалық сүзгі, ол кукушкалық хэш-кестедегі сақталған кілттерді кілттерге басқа хэш-функцияны қолдану арқылы есептелген әлдеқайда қысқарақ іздермен алмастырады. Бұл іздерді олардың бастапқы кілттері белгілі болмаса, кукушкалық сүзгінің ішінде жылжытуға мүмкіндік беру үшін, әр іздің екі орны бірін-бірінен біттегі қосымша операциясы (XOR) немесе іздің хэші арқылы есептелуі мүмкін. Бұл дерек құрылымы Блум сүзгісіне ұқсас қасиеттері бар шамамен жиын мүшелігін анықтайтын дерек құрылымын құрайды: ол кілттер жиынының мүшелерін сақтай алады және сұраныс кілті жиынға жататынын тексереді, бірақ жалған оң нәтижелер (жиынға жататын емес кілттің жиынға жатады деп қате көрсетілуі) болуы мүмкін, бірақ жалған теріс нәтижелер болмайды. Дегенмен, ол Блум сүзгісінен бірнеше жағынан жақсырақ: жадты пайдалану тұрақты факторға сәйкес кішірек, сілтемелердің жақсы жергіліктілігі бар және (Блум сүзгілерінен айырмашылығы) қосымша жадты пайдаланбастан жиын элементтерін жылдам жоюға мүмкіндік береді.