Кіріспе
Хештеу үшін компьютерлік бағдарламалау әдісі. Сызықтық зондтау – компьютерлік бағдарламалауда хеш-кестелердегі соқтығыстарды шешудің бір жолы. Хеш-кестелер – кілт-мәнді жұптар жиынтығын сақтау және белгілі бір кілтке сәйкес келетін мәнді табу үшін қолданылатын дерек құрылымдары. Оны 1954 жылы Джин Амдал, Элейн М. Макгроу және Артур Сэмюэл ойлап тапты, ал 1963 жылы Дональд Кнут алғаш рет талдады. Сызықтық зондтау, квадраттық зондтау және қос хештеу сияқты, ашық адрестеудің бір түрі болып табылады. Бұл схемаларда хеш-кестедегі әрбір ұяшықта бір ғана кілт-мәнді жұп сақталады. Егер хеш-функциясы жаңа кілтті басқа кілтпен толып тұрған хеш-кестесінің ұяшығына сәйкестендірсе, соқтығысу туындайды. Мұндай жағдайда сызықтық зондтау кестедегі ең жақын бос орынды іздеп, жаңа кілтті сол жерге орналастырады. Іздеу де осылай жүзеге асырылады: хеш-функциясы көрсеткен орыннан бастап кесте тізбектеп ізделіп, сәйкес кілті бар немесе бос ұяшық табылғанша іздеу жалғастырылады. Авторлардың айтуынша, "Хеш-кестелер – ең көп қолданылатын күрделі емес дерек құрылымдары, ал стандартты жабдықтардағы ең танымал іске асыру сызықтық зондтауды қолданады, ол жылдам әрі қарапайым".
Linear probing is a scheme in computer programming for resolving collisions in hash tables, data structures for maintaining a collection of key–value pairs and looking up the value associated with a given key. It was invented in 1954 by Gene Amdahl, Elaine M. McGraw, and Arthur Samuel and first analyzed in 1963 by Donald Knuth. Along with quadratic probing and double hashing, linear probing is a form of open addressing. In these schemes, each cell of a hash table stores a single key–value pair. When the hash function causes a collision by mapping a new key to a cell of the hash table that is already occupied by another key, linear probing searches the table for the closest following free location and inserts the new key there. Lookups are performed in the same way, by searching the table sequentially starting at the position given by the hash function, until finding a cell with a matching key or an empty cell. As write, "Hash tables are the most commonly used nontrivial data structures, and the most popular implementation on standard hardware uses linear probing, which is both fast and simple."
Іздеу
Берілген x кілтін іздеу үшін T ұяшықтары тексеріледі, h(x) индексіндегі ұяшықтан бастап (мұнда h – хэш функциясы), және бос ұяшық немесе сақталған кілті x болатын ұяшық табылғанша h(x) + 1, h(x) + 2, ... көрші ұяшықтармен жалғасады. Егер кілті бар ұяшық табылса, іздеу сол ұяшықтағы мәнді қайтарады. Әйтпесе, егер бос ұяшық табылса, кілт кестеде жоқ, себебі ол әлі ізделмеген кез келген кейінгі ұяшыққа қарағанда осы ұяшыққа орналастырылар еді. Бұл жағдайда іздеу кілт сөздікте жоқ екенін көрсетеді.
Жою
Сонымен қатар, сөздіктегі кілт-мәнді жұпты жою да мүмкін. Дегенмен, оның ұяшығын ғана бос қалдыру жеткіліксіз. Бұл, бос ұяшықтан бұрын хэш-мәні бар, бірақ бос ұяшықтан кейін сақталған басқа кілттерді іздеуге әсер етеді. Бос ұяшық осы іздеулердің кілттің жоқ екенін қате хабарлауына себеп болады. Оның орнына, i ұяшығы бос болғанда, басқа бос ұяшықты немесе i ұяшығына жылжытуға болатын кілтті (яғни, хэш-мәні i-ге тең немесе одан ертерек болатын кілтті) тапқанға дейін кестедегі келесі ұяшықтарды қарап шығу қажет. Егер бос ұяшық табылса, i ұяшығын босату қауіпсіз және жою процесі аяқталады. Бірақ, егер i ұяшығына жылжытуға болатын кілт табылса, ол жылжытылады. Бұл жылжытылған кілтті іздеуді жылдамдатады, бірақ сонымен қатар сол блоктағы басқа ұяшықты бос қалдырады. Жаңа бос ұяшық үшін жылжытуға болатын кілтті іздеу, бұрыннан бос ұяшыққа жеткенше сол тәсілмен жалғасады. Осы кілттерді ертерек ұяшықтарға жылжыту процесінде әрбір кілт бір рет қана қарастырылады. Сондықтан, бүкіл процесті аяқтауға кеткен уақыт жойылған кілтті қамтитын салынған ұяшықтар блогының ұзындығына пропорционалды, бұл басқа хэш-кесте операцияларының орындалу уақытына сәйкес келеді.
Бастапқы кластерлеу
Сызықтық зондтаулы хэш-кестелер бастапқы кластерлеу деп аталатын мәселеге ұшырайды, онда элементтер ұзын, біріккен тізбектерге жиналады.
Тарих
Конрад Цузе мен Ванневар Буштың жұмысында 1940 жылдардың ортасына дейін деректерге оның мекенжайы бойынша емес, мәні бойынша қол жеткізуге мүмкіндік беретін ассоциативтік массив идеясы туған, бірақ хэш-кестелер 1953 жылға дейін Ханс Питер Лунның IBM меморандумында сипатталған жоқ. Лун сызықтық зондтаудың орнына тізбектеу әдісін, басқаша соқтығысуды шешу тәсілін қолданды. Сызықтық зондтаудың алғашқы тарихын қысқаша баяндайды. Бұл алғашқы ашық адрестеу әдісі болды және бастапқыда ашық адрестеумен бірдей мағынада қолданылды. Кнуттың сөзіне сәйкес, оны алғаш рет Джин Амдал, Элейн М. Макгроу (туған есімі Боем) және Артур Сэмюэл 1954 жылы IBM 701 компьютері үшін құрастыру бағдарламасында қолданған. Бұл әдіс 1958 жылы совет ғалымы Андрей Ершов тарапынан жарияланған. Кездейсоқ хэш-функцияларды қолданғанда әр операцияға тұрақты уақыт жұмсалатынын көрсететін сызықтық зондтаудың алғашқы теориялық талдауын Кнут жасады. Сондай-ақ, сызықтық зондтаудың бұрынғы талдаулардағы идеалды кездейсоқ функциялармен емес, іс жүзінде қолдануға болатын хэш-функциялармен операция бойынша тұрақты уақытта жұмыс істейтінін дәлелдеді.