Кіріспе

Іздеу алгоритмі

Интерполяциялық іздеу – кілттерге тағайындалған сандық мәндер бойынша реттелген массивте кілтті іздеуге арналған алгоритм (кілт мәндері). Оны алғаш рет 1957 жылы В.В. Петерсон сипаттады. Интерполяциялық іздеу адамдардың телефондық анықтамалықта есімді іздеу әдісіне ұқсас (кітаптағы жазбалар реттелген кілт мәні бойынша): әр қадамда алгоритм іздеу кеңістігінің шекараларындағы кілт мәндері мен ізделіп жатқан кілт мәніне сүйене отырып, іздеу кеңістігінің қалған бөлігінде ізделіп жатқан нысан қайда болуы мүмкін екенін есептейді, әдетте сызықтық интерполяция арқылы. Осы шамаланған орында нақты табылған кілт мәні ізделіп жатқан кілт мәнімен салыстырылады. Егер ол тең болмаса, салыстыру нәтижесіне байланысты қалған іздеу кеңістігі шамаланған орынның алдындағы немесе кейінгі бөлігіне дейін қысқартылады. Бұл әдіс тек кілт мәндері арасындағы айырмашылықтардың мөлшерін есептеу мағыналы болған жағдайда ғана жұмыс істейді. Екілік іздеуге қарағанда, ол әрқашан қалған іздеу кеңістігінің ортасын таңдайды, кілттің шамаланған орнында табылған кілт пен ізделіп жатқан кілт арасындағы салыстыруға байланысты бір жартысын немесе екінші жартысын жоққа шығарады. Ол кілттер үшін сандық мәндерді қажет етпейді, тек олардың жалпы ретін ғана қажет етеді. Қалған іздеу кеңістігі шамаланған орыннан алдыңғы немесе кейінгі бөлікке дейін қысқартылады. Сызықтық іздеу тек бастапқыдан элементтерді бірінен соң бірін салыстыра отырып, теңдікті ғана пайдаланады және кез келген сұрыптауды ескермейді. Орташа есепте интерполяциялық іздеу элементтер біркелкі таратылған жағдайда log(log(n)) шамасында салыстыру жасайды, мұнда n іздеуге арналған элементтердің саны. Ең нашар жағдайда (мысалы, кілттердің сандық мәндері экспоненциалды түрде өскенде) ол O(n) дейін салыстырулар жасауы мүмкін. Интерполяциялық тізбекті іздеуде интерполяция ізделіп жатқан нысанға жақын нысанды табу үшін қолданылады, содан кейін сызықтық іздеу дәл нысанды табу үшін қолданылады.

Өнер көрсету

Үлкен O белгісін қолдану арқылы, n өлшемді деректер жиынтығында интерполяция алгоритмінің жұмысы O(n) болады; алайда, интерполяцияға қолданылатын сызықтық шкаладағы деректердің біркелкі таралуын ескерсек, оның жұмысы O(log log n) екенін көрсетуге болады. Бірақ, жаңа дерек құрылымын пайдаланып, динамикалық интерполяциялық іздеуді o(log log n) уақытында жүргізуге болады. Интерполяциялық іздеудің нақты тиімділігі, азайтылған зондтар саны әр зонд үшін қажетті күрделі есептеулерден басып өтетін-өтпейтініне байланысты. Бұл, әсіресе дисктегі үлкен сұрыпталған файлда жазбаны табу үшін пайдалы болуы мүмкін, онда әр зонд дискіде іздеуді қамтиды және интерполяциялық есептеулерден әлдеқайда баяу. B-ағаштары сияқты индекстік құрылымдар дискіге қол жеткізу санын азайтады және дискідегі деректерді индекстеу үшін көбінесе қолданылады, себебі олар көптеген дерек түрлерін индекстеуге және онлайн режимінде жаңартуға мүмкіндік береді. Дегенмен, интерполяциялық іздеу, сұрыпталған, бірақ индекстелмеген дискідегі деректер жиынтығында іздеуге мәжбүр болған жағдайда тиімді болуы мүмкін.

Әртүрлі деректер жиынтығына бейімделу

Деректер жиынтығының сұрыптау кілттері біркелкі таратылған сандар болғанда, сызықтық интерполяцияны іске асыру оңай және ізделіп отырған мәнге өте жақын индексті табады. Ал, есімдері бойынша сұрыпталған телефон кітапшасында интерполяциялық іздеудің қарапайым тәсілі қолданылмайды. Дегенмен, жоғары деңгейдегі ұқсас қағидалар сақталады: есімдердегі әріптердің салыстырмалы жиілігін пайдаланып телефон кітапшасындағы есімнің орнын шамалауға болады және оны іздеу орны ретінде қолдануға болады. Кейбір интерполяциялық іздеулер тең кілт мәндерінің тізбегі болғанда күтілгендей жұмыс істемей қалуы мүмкін. Интерполяциялық іздеудің ең қарапайым түрі міндетті түрде мұндай тізбектің бірінші (немесе соңғы) мүшесін таңдамайды.

Кітаптар бойынша іздеу

Телефон кітапшасындағы есімдерді қандай да бір санға түрлендіру, есімдерді сұрыптап, оларды №1, №2 және т.б. деп атау сияқты үлкен еңбекті жұмсамайынша, біркелкі таралымды сандарды қамтамасыз етпейді. Сонымен қатар, кейбір есімдер басқаларына қарағанда әлдеқайда жиі кездеседі (мысалы, Смит, Джонс). Сөздіктерде де жағдай осылай – кейбір әріптермен басталатын сөздер басқаларына қарағанда көп болады. Кейбір баспагерлер әр әріптің орнын көрсету үшін шетке түсіндірмелер жазуға, тіпті беттердің жиегін кесіп, маркерлер жасауға бейімделген, осылайша бір көз тастағанда сегменттелген интерполяция жасауға мүмкіндік туады.