Satu fakta yang saya anggap lucu adalah bahwa Google sebenarnya dijalankan oleh bioinformatika ('oke, menurut saya itu lucu karena saya bioinf… thingy). Biar saya jelaskan.
Bioinformatika sejak awal memiliki tantangan untuk mencari teks kecil dalam string raksasa dengan sangat cepat. Bagi kami, "tali raksasa" tentu saja adalah DNA. Seringkali bukan DNA tunggal tetapi database beberapa DNA dari spesies / individu yang berbeda. Teks-teks kecil adalah protein atau pasangan genetiknya, sebuah gen. Sebagian besar karya pertama ahli biologi komputasi dibatasi untuk menemukan homologi antar gen. Hal ini dilakukan untuk memantapkan fungsi gen yang baru ditemukan dengan memperhatikan kemiripan gen yang sudah diketahui.
Sekarang, string DNA ini menjadi sangat besar dan pencarian (lossy!) Harus dilakukan dengan sangat efisien. Dengan demikian, sebagian besar teori modern pencarian string dikembangkan dalam konteks biologi komputasi.
Namun, beberapa waktu yang lalu, pencarian teks konvensional telah habis. Diperlukan pendekatan baru yang memungkinkan pencarian string besar dalam waktu sublinear, yaitu tanpa melihat setiap karakter. Diketahui bahwa hal ini dapat diselesaikan dengan pra-pemrosesan string besar dan membangun struktur data indeks khusus di atasnya. Banyak struktur data yang berbeda telah diusulkan. Masing-masing memiliki kekuatan dan kelemahan, tetapi ada satu yang sangat luar biasa karena memungkinkan pencarian dalam waktu yang konstan. Sekarang, dalam urutan besarnya di mana Google beroperasi, ini tidak sepenuhnya benar lagi karena load balancing di seluruh server, pemrosesan awal dan beberapa hal canggih lainnya harus diperhitungkan.
Tetapi pada intinya, yang disebut indeks q-gram memungkinkan pencarian dalam waktu yang konstan. Satu-satunya kelemahan: Struktur data menjadi sangat besar. Pada dasarnya, untuk memungkinkan pencarian string hingga karakter q (karena itu namanya), diperlukan tabel yang memiliki satu bidang untuk setiap kemungkinan kombinasi huruf q (yaitu, q S , di mana S adalah ukuran alfabet , katakan 36 (= 26 + 10)). Selain itu, harus ada satu bidang untuk setiap posisi huruf dalam string yang diindeks (atau dalam kasus google, untuk setiap situs web).
Untuk mengurangi ukuran yang sangat besar, Google mungkin akan menggunakan beberapa indeks (pada kenyataannya, memang demikian , untuk menawarkan layanan seperti koreksi ejaan). Yang paling atas tidak akan berfungsi pada level karakter tetapi pada level kata. Ini mengurangi q tetapi membuat S jauh lebih besar sehingga mereka harus menggunakan tabel hashing dan collision untuk mengatasi jumlah kata yang berbeda yang tidak terbatas.
Pada level berikutnya, kata-kata yang di-hash ini akan mengarah ke struktur data indeks lain yang, pada gilirannya, akan menampilkan karakter-karakter hash yang mengarah ke situs web.
Singkatnya, struktur data indeks q -gram ini bisa dibilang bagian paling sentral dari algoritma pencarian Google. Sayangnya, tidak ada makalah non-teknis yang menjelaskan cara kerja indeks q -gram. Satu-satunya publikasi yang saya tahu yang berisi penjelasan tentang cara kerja indeks semacam itu adalah… sayangnya, skripsi saya .