Кіріспе

Соқтығысусыз хэш функциясы

Компьютер ғылымында, S жиыны үшін h кемел хэш функциясы – S жиынындағы әр түрлі элементтерді m бүтін сан жиынына бейнелейтін, ешқандай соқтығысусыз хэш функциясы болып табылады. Математикалық тұрғыдан алғанда, бұл инъективті функция. Кемел хэш функцияларын тұрақты нашар жағдайда қол жеткізу уақытымен іздеу кестесін іске асыру үшін пайдалануға болады. Кемел хэш функциясы, кез келген хэш функциясы сияқты, хэш кестелерін іске асыру үшін қолданылуы мүмкін, бірақ соқтығысуды шешуді іске асыру қажеттілігі болмайды. Сонымен қатар, кілттер деректерде болмаса және сұралатын кілттердің жарамды екені белгілі болса, кілттерді іздеу кестесінде сақтаудың қажеті жоқ, бұл жадты үнемдейді. Кемел хэш функцияларының кемшіліктері – кемел хэш функциясын құру үшін S жиыны белгілі болуы керек. S жиыны өзгерген жағдайда, динамикалық емес кемел хэш функцияларын қайта құру қажет. S жиыны жиі өзгеріп отырса, қосымша жад шығынымен динамикалық кемел хэш функцияларын пайдалануға болады.

Динамикалық кемелді хэштеу

Кемел хэш функциясын пайдалану жиі сұралатын үлкен жиын, S, болғанда ең жақсы, және ол сирек жаңартылады. Өйткені жиын S-тің кез келген өзгеруі хэш функциясының өзгертілген жиын үшін енді кемелді болмауына себеп болуы мүмкін. Жиын өзгерген сайын хэш функциясын жаңартатын әдістер динамикалық кемел хэштеу деп аталады, бірақ мұндай әдістерді іске асыру салыстырмалы түрде қиын.

Минималды кемелді хэш-функциясы

Минималды кемелді хэш-функция – n кілтті n тізбекті бүтін санға бейімдейтін кемелді хэш-функция, әдетте 0-ден n-1-ге дейінгі немесе 1-ден n-ге дейінгі сандарға. Мұны формалды түрде былай түсіндіруге болады: j және k белгілі бір шекті жиынның элементтері болсын. Онда h минималды кемелді хэш-функция болады, егер және тек қана h(j) = h(k) болса, j = k болады (инъективтілік) және h функциясының мәндер жиыны a деп аталатын бүтін санмен анықталса. Жалпы қолданысқа арналған минималды кемелді хэш-схемаға кем дегенде біт/кілт қажет екені дәлелденді. Егер S жиынындағы элементтердің саны n болса және олар белгілі бір диапазон ішіндегі бүтін сандардан тұрса, онда S жиынынан н-ге дейін нақты минималды кемелді хэш-функцияны тиімді құруға болады, бұл функция кеңістікте біт пайдаланады және тұрақты есептеу уақытын қамтамасыз етеді. Іс жүзінде, егер жеткілікті уақыт болса, шамамен 1,56 бит/кілт пайдаланатын минималды кемелді хэш-схемалар бар.

Тапсырманы сақтау

F минималды кемелді хэш функциясы кілттер a1, a2, ..., an белгілі бір ретпен берілгенде реттілікті сақтайды, егер кез келген aj және ak кілттері үшін j < k болса, F(aj) < F(ak) болады. Бұл жағдайда функцияның мәні – барлық кілттердің реттелген тізімінде әрбір кілттің орны. Тұрақты қолжетімділік уақытымен минималды кемелді хэш функциясын іске асырудың қарапайым жолы – әрбір кілттің орнын іздеу кестесі ретінде сақтау үшін (қалыпты) кемелді хэш функциясын пайдалану. Бұл шешім биттерді пайдаланады, бұл кілттерді салыстыру функциясы кез келген болуы мүмкін жағдайда оңтайлы. Дегенмен, егер a1, a2, ..., an кілттері белгілі бір жиыннан алынған бүтін сандар болса, онда кеңістіктің биттерін ғана пайдаланып реттілікті сақтайтын хэш функциясын құруға болады. Бұл шектеудің де оңтайлы екені белгілі.

Қатынасты құрылыстар

Жақсы өлшемделген хэш-кестелер іздеу, қосу және жою операциялары үшін амортизацияланған орташа есеп бойынша O(1) уақытты (тұрақты уақытты) қамтамасыз етеді, бірақ көптеген хэш-кесте алгоритмдері нашар жағдайда әлдеқайда ұзаққа созылатын уақытпен күреседі. Көптеген қолданбалар үшін (желілік маршрутизаторлар мен жад кэштері сияқты) нашар жағдайда да O(1) уақыт (тұрақты уақыт) тиімдірек болар еді. Нашар жағдайда O(1) іздеу уақытын (нашар жағдайда да тұрақты іздеу уақытын) қолдайтын хэш-кесте алгоритмдері өте аз. Олардың қатарында: толық хэштеу, динамикалық толық хэштеу, кукушка хэштеу, хопскотч хэштеу және кеңейтілмелі хэштеу.