Um fato que sempre achei engraçado é que o Google é, na verdade, administrado por bioinformática ('ok, acho isso engraçado porque sou um bioinfo ... coisinha). Deixe-me explicar.
A bioinformática teve desde o início o desafio de pesquisar pequenos textos em cadeias gigantescas com muita rapidez. Para nós, a “corda gigante” é, obviamente, DNA. Freqüentemente, não um único DNA, mas um banco de dados de vários DNAs de diferentes espécies / indivíduos. Os pequenos textos são proteínas ou sua contraparte genética, um gene. A maior parte do primeiro trabalho de biólogos computacionais se restringiu a encontrar homologias entre genes. Isso é feito para estabelecer a função de genes recém-descobertos, observando semelhanças com genes que já são conhecidos.
Agora, essas sequências de DNA ficam realmente muito grandes e a pesquisa (com perdas!) Deve ser feita de forma extremamente eficiente. A maior parte da teoria moderna de pesquisa de cordas foi desenvolvida no contexto da biologia computacional.
No entanto, há muito tempo, a busca convencional de texto estava esgotada. Era necessária uma nova abordagem que permitisse pesquisar grandes strings no tempo sublinear, ou seja, sem olhar para cada caractere único. Foi descoberto que isso pode ser resolvido com o pré-processamento da string grande e a construção de uma estrutura de dados de índice especial sobre ela. Muitas dessas estruturas de dados diferentes foram propostas. Cada um tem seus pontos fortes e fracos, mas há um que é especialmente notável porque permite uma pesquisa em tempo constante. Agora, nas ordens de magnitude em que o Google opera, isso não é estritamente verdadeiro porque o balanceamento de carga entre os servidores, o pré-processamento e algumas outras coisas sofisticadas devem ser levadas em consideração.
Mas, em essência, o chamado índice q-gram permite uma pesquisa em tempo constante. A única desvantagem: a estrutura de dados fica ridiculamente grande. Essencialmente, para permitir uma pesquisa de strings com até q caracteres (daí o nome), é necessária uma tabela que tenha um campo para cada combinação possível de q letras (ou seja, q S , onde S é o tamanho do alfabeto , digamos 36 (= 26 + 10)). Além disso, deve haver um campo para cada posição da letra na string que foi indexada (ou no caso do google, para cada site).
Para mitigar o tamanho, o Google provavelmente irá usar vários índices (na verdade, eles fazem , para oferecer serviços como correção ortográfica). Os primeiros não funcionam no nível do personagem, mas sim no nível da palavra. Isso reduz q, mas torna S infinitamente maior, de modo que eles terão que usar tabelas de hash e de colisão para lidar com o número infinito de palavras diferentes.
No próximo nível, essas palavras hash apontarão para outras estruturas de dados de índice que, por sua vez, farão hash caracteres apontando para sites.
Para encurtar a história, essas estruturas de dados de índice q -gram são indiscutivelmente a parte mais central do algoritmo de pesquisa do Google. Infelizmente, não existem bons artigos não técnicos explicando como funcionam os índices q -gram. A única publicação que conheço que contém uma descrição de como esse índice funciona é ... infelizmente, minha tese de bacharelado .