私が面白くないと思った1つの事実は、Googleが実際にバイオインフォマティクスによって運営されているということです(そうですね、私はbioinfだ... 説明させてください。
初期のバイオインフォマティクスでは、巨大な文字列内の小さなテキストを非常に高速に検索するという課題がありました。私たちにとって、「巨大なひも」はもちろんDNAです。多くの場合、単一のDNAではなく、異なる種/個体からのいくつかのDNAのデータベースです。小さなテキストは、タンパク質またはその遺伝的対応物である遺伝子です。計算生物学者の最初の研究のほとんどは、遺伝子間の相同性を見つけることに限定されていました。これは、既知の遺伝子との類似性に注目することにより、新たに発見された遺伝子の機能を確立するために行われます。
現在、これらのDNAストリングは非常に大きくなり、(損失!)検索は非常に効率的に実行する必要があります。したがって、文字列ルックアップの現代の理論のほとんどは、計算生物学のコンテキストで開発されました。
しかし、かなり前に、従来のテキスト検索は使い果たされていました。大きな文字列を準線形時間で検索できるようにする、つまり各文字を1つずつ確認する必要がない新しいアプローチが必要でした。これは、大きな文字列を前処理し、その上に特別なインデックスデータ構造を構築することで解決できることが発見されました。多くの異なるそのようなデータ構造が提案されてきた。それぞれに長所と短所がありますが、一定の時間で検索できるため、特に注目すべきものがあります。現在、Googleが運用している規模では、これは厳密には真実ではありません。サーバー間でのロードバランシング、前処理、およびその他の高度な処理を考慮する必要があるためです。
しかし、本質的には、いわゆるq-gramインデックスを使用すると、一定の時間で検索できます。唯一の欠点:データ構造が途方もなく大きくなる。基本的に、までを含む文字列の検索を可能にするために、Qの文字(名前)、それはそれぞれの可能な組み合わせのための一つのフィールドを持つテーブルが必要ですQのある文字(、q個のS、Sをアルファベットのサイズですが、たとえば36(= 26 + 10))とします。さらに、インデックス付けされた文字列の各文字位置(またはGoogleの場合は各Webサイト)ごとに1つのフィールドが必要です。
純粋なサイズを軽減するために、Googleはおそらく複数のインデックスを使用します(実際には、スペル修正などのサービスを提供するために使用します)。最上位のものは文字レベルでは機能せず、代わりに単語レベルで機能します。これによりqは減少しますが、Sが無限に大きくなるため、ハッシュと衝突テーブルを使用して無数の異なる単語に対処する必要があります。
次のレベルでは、これらのハッシュ化された単語は他のインデックスデータ構造を指し、次に、ウェブサイトを指す文字をハッシュします。
要するに、これらのq -gramインデックスデータ構造は、おそらくGoogleの検索アルゴリズムの最も中心的な部分です。残念ながら、q - gramインデックスがどのように機能するかを説明する非技術的な論文はありません。そのようなインデックスがどのように機能するかについての説明が含まれている私が知っている唯一の出版物は、悲しいことに、私の学士論文です。