Один факт, який мені завжди здавалося смішним, полягає в тому, що Google насправді управляється біоінформатикою (`` Кей, я вважаю це смішним, тому що я біоінф ... штука). Дозволь пояснити.
Біоінформатика на початку мала проблему дуже швидко шукати невеликі тексти у гігантських рядках. Для нас "гігантська струна" - це, звичайно, ДНК. Часто не одна ДНК, а база даних кількох ДНК різних видів / особин. Маленькі тексти - це білки або їх генетичний аналог, ген. Більшість перших робіт обчислювальних біологів були обмежені для пошуку гомологій між генами. Це робиться для встановлення функції нещодавно знайдених генів, відзначаючи схожість із генами, які вже відомі.
Тепер ці низки ДНК справді дуже збільшуються, і (з втратами!) Пошук повинен здійснюватися надзвичайно ефективно. Таким чином, більша частина сучасної теорії пошуку струн була розроблена в контексті обчислювальної біології.
Однак, досить давно, звичайний пошук тексту був вичерпаний. Потрібен був новий підхід, який дозволяв здійснювати пошук великих рядків у підлінійний час, тобто без перегляду кожного окремого символу. Було виявлено, що це можна вирішити, попередньо обробивши великий рядок і побудувавши над ним спеціальну структуру даних індексу. Запропоновано багато різних таких структур даних. Кожен має свої сильні та слабкі сторони, але є один, який особливо вражає тим, що дозволяє шукати в постійний час. Зараз, в порядку порядку, в якому працює Google, це вже не є суто істинним, оскільки необхідно враховувати балансування навантаження між серверами, попередню обробку та деякі інші складні речі.
Але по суті так званий індекс q-грам дозволяє шукати в постійний час. Єдиний недолік: структура даних стає смішно великою. По суті, для того, щоб дозволити пошук рядків з до q символів (звідси і назва), потрібна таблиця, яка має одне поле для кожної можливої комбінації q літер (тобто q S , де S - розмір алфавіту , скажімо 36 (= 26 + 10)). Крім того, має бути одне поле для кожної позиції літери в рядку, який було проіндексовано (або для Google для кожного веб-сайту).
Для зменшення простого розміру Google, ймовірно, використовуватиме кілька індексів (насправді вони це роблять , пропонуючи такі послуги, як виправлення орфографії). Найкращі з них працюватимуть не на рівні символів, а на рівні слова. Це зменшує q, але робить S нескінченно більшим, тому їм доведеться використовувати таблиці хешування та зіткнень, щоб справлятися з нескінченною кількістю різних слів.
На наступному рівні ці хешовані слова вказуватимуть на інші структури даних індексу, які, в свою чергу, будуть хешувати символи, що вказують на веб-сайти.
Коротше кажучи, ці структури даних індексу q- грамів є, безперечно, найбільш центральною частиною алгоритму пошуку Google. На жаль, немає хороших нетехнічних статей, які б пояснювали, як працюють індекси q- грам. Єдина публікація, яку я знаю, що містить опис того, як працює такий індекс, - це, на жаль, моя бакалаврська робота .