Un fait que j'ai toujours trouvé drôle, c'est que Google est en fait géré par la bioinformatique («ok, je trouve ça drôle parce que je suis un bioinf… truc). Laisse-moi expliquer.
La bioinformatique a dès le début eu le défi de rechercher très rapidement de petits textes dans des chaînes gigantesques. Pour nous, la «corde gigantesque» est bien sûr de l'ADN. Souvent, pas un ADN unique mais une base de données de plusieurs ADN de différentes espèces / individus. Les petits textes sont des protéines ou leur homologue génétique, un gène. La plupart des premiers travaux des biologistes computationnels se sont limités à trouver des homologies entre les gènes. Ceci est fait pour établir la fonction des gènes nouvellement trouvés en notant des similitudes avec des gènes déjà connus.
Maintenant, ces chaînes d'ADN deviennent vraiment très volumineuses et la recherche (avec perte!) Doit être effectuée de manière extrêmement efficace. La plupart de la théorie moderne de la recherche de chaînes a donc été développée dans le contexte de la biologie computationnelle.
Cependant, il y a assez longtemps, la recherche de texte conventionnelle était épuisée. Une nouvelle approche était nécessaire qui permettait de rechercher de grandes chaînes dans le temps sous-linéaire, c'est-à-dire sans regarder chaque caractère. On a découvert que cela pouvait être résolu en prétraitant la grande chaîne et en construisant une structure de données d'index spéciale dessus. De nombreuses structures de données de ce type ont été proposées. Chacun a ses forces et ses faiblesses mais il y en a un qui est particulièrement remarquable car il permet une recherche en temps constant. Maintenant, dans les ordres de grandeur dans lesquels Google opère, ce n'est plus strictement vrai car l'équilibrage de charge entre les serveurs, le prétraitement et d'autres éléments sophistiqués doivent être pris en compte.
Mais en substance, le soi-disant index q-gram permet une recherche en temps constant. Le seul inconvénient: la structure des données devient ridiculement grande. Essentiellement, pour permettre une recherche de chaînes avec jusqu'à q caractères (d'où le nom), il faut une table qui a un champ pour chaque combinaison possible de q lettres (c'est-à-dire q S , où S est la taille de l'alphabet , disons 36 (= 26 + 10)). De plus, il doit y avoir un champ pour chaque position de lettre dans la chaîne qui a été indexée (ou dans le cas de google, pour chaque site Web).
Pour atténuer la taille, Google utilisera probablement plusieurs indices (en fait, ils le font , pour offrir des services tels que la correction orthographique). Les plus hauts ne fonctionneront pas au niveau des caractères mais au niveau des mots. Cela réduit q mais cela rend S infiniment plus grand, ils devront donc utiliser des tables de hachage et de collision pour faire face au nombre infini de mots différents.
Au niveau suivant, ces mots hachés pointeront vers d'autres structures de données d'index qui, à leur tour, hacheront des caractères pointant vers des sites Web.
Pour faire court, ces structures de données d'index q -gram sont sans doute la partie la plus centrale de l'algorithme de recherche de Google. Malheureusement, il n'y a pas de bons articles non techniques expliquant le fonctionnement des indices q- gramme. La seule publication que je connaisse qui contienne une description du fonctionnement d'un tel index est… hélas, ma thèse de licence .