Eine Tatsache, die ich immer als lustig empfunden habe, ist, dass Google tatsächlich von Bioinformatik betrieben wird ('Kay, ich finde das lustig, weil ich ein Bioinf… Ding bin). Lassen Sie mich erklären.
Die Bioinformatik hatte schon früh die Herausforderung, sehr schnell nach kleinen Texten in gigantischen Strings zu suchen. Für uns ist die „gigantische Saite“ natürlich DNA. Oft keine einzelne DNA, sondern eine Datenbank mit mehreren DNAs verschiedener Arten / Individuen. Die kleinen Texte sind Proteine oder ihr genetisches Gegenstück, ein Gen. Die meisten ersten Arbeiten von Computerbiologen beschränkten sich darauf, Homologien zwischen Genen zu finden. Dies geschieht, um die Funktion neu gefundener Gene festzustellen, indem Ähnlichkeiten mit bereits bekannten Genen festgestellt werden.
Jetzt werden diese DNA-Strings tatsächlich sehr groß und die (verlustbehaftete!) Suche muss äußerst effizient durchgeführt werden. Der größte Teil der modernen Theorie der String-Suche wurde daher im Kontext der Computerbiologie entwickelt.
Vor einiger Zeit war die konventionelle Textsuche jedoch erschöpft. Es war ein neuer Ansatz erforderlich, der es ermöglichte, große Zeichenfolgen in sublinearer Zeit zu durchsuchen, dh ohne jedes einzelne Zeichen zu betrachten. Es wurde festgestellt, dass dies gelöst werden kann, indem die große Zeichenfolge vorverarbeitet und eine spezielle Indexdatenstruktur darüber erstellt wird. Es wurden viele verschiedene solcher Datenstrukturen vorgeschlagen. Jeder hat seine Stärken und Schwächen, aber es gibt eine, die besonders bemerkenswert ist, weil sie eine Suche in konstanter Zeit ermöglicht. In den Größenordnungen, in denen Google tätig ist, ist dies nicht mehr unbedingt der Fall, da der Lastausgleich zwischen Servern, die Vorverarbeitung und einige andere anspruchsvolle Dinge berücksichtigt werden müssen.
Im Wesentlichen ermöglicht der sogenannte Q-Gramm-Index eine Suche in konstanter Zeit. Einziger Nachteil: Die Datenstruktur wird lächerlich groß. Um eine Suche nach Zeichenfolgen mit bis zu q Zeichen (daher der Name) zu ermöglichen, ist im Wesentlichen eine Tabelle erforderlich, die ein Feld für jede mögliche Kombination von q Buchstaben enthält ( dh q S , wobei S die Größe des Alphabets ist sagen wir 36 (= 26 + 10)). Außerdem muss für jede Buchstabenposition in der indizierten Zeichenfolge ein Feld vorhanden sein (oder im Fall von Google für jede Website).
Um die schiere Größe zu mildern, Google wird wahrscheinlich mehrere Indizes verwenden (in der Tat, sie tun , zu bieten Dienstleistungen wie Rechtschreibkorrektur). Die obersten funktionieren nicht auf Zeichenebene, sondern auf Wortebene. Dies reduziert q, aber es macht S unendlich größer, so dass sie Hashing- und Kollisionstabellen verwenden müssen, um mit der unendlichen Anzahl verschiedener Wörter fertig zu werden.
Auf der nächsten Ebene verweisen diese Hash-Wörter auf andere Indexdatenstrukturen, die wiederum Hash-Zeichen auf Websites verweisen.
Kurz gesagt, diese Q- Gramm-Indexdatenstrukturen sind wohl der zentralste Teil des Google-Suchalgorithmus. Leider gibt es keine guten nichttechnischen Dokumente, die erklären, wie q- Gramm-Indizes funktionieren. Die einzige Veröffentlichung, die ich kenne und die eine Beschreibung der Funktionsweise eines solchen Index enthält, ist… leider meine Bachelorarbeit .