Alex telah menjelaskannya dengan cukup baik. Bagi mereka yang masih kurang memahaminya, semoga contoh ini akan membantu Anda memahami:
Katakanlah saya bekerja untuk Google, di tim Chrome, dan saya ingin menambahkan fitur ke browser yang memberi tahu pengguna jika url yang dia masukkan adalah URL berbahaya. Jadi saya memiliki kumpulan data sekitar 1 juta URL berbahaya, ukuran file ini sekitar 25MB. Karena ukurannya cukup besar (besar dibandingkan dengan ukuran browser itu sendiri), saya menyimpan data ini di server jauh.
Kasus 1: Saya menggunakan fungsi hash dengan tabel hash. Saya memutuskan fungsi hashing yang efisien, dan menjalankan semua 1 juta url melalui fungsi hashing untuk mendapatkan kunci hash. Saya kemudian membuat tabel hash (sebuah array), di mana kunci hash akan memberi saya indeks untuk menempatkan URL itu. Jadi sekarang setelah saya melakukan hash dan mengisi tabel hashing, saya memeriksa ukurannya. Saya telah menyimpan semua 1 juta URL di tabel hash bersama dengan kuncinya. Jadi ukurannya minimal 25 MB. Tabel hash ini, karena ukurannya akan disimpan di server jauh. Saat pengguna datang dan memasukkan URL di bilah alamat, saya perlu memeriksa apakah itu berbahaya. Jadi saya menjalankan URL melalui fungsi hash (browser itu sendiri dapat melakukan ini) dan saya mendapatkan kunci hash untuk URL itu. Sekarang saya harus membuat permintaan ke server jarak jauh saya dengan kunci hash itu, untuk memeriksa apakah URL tertentu dalam tabel hash saya dengan kunci tertentu itu, sama dengan yang dimasukkan pengguna. Jika ya maka itu berbahaya dan jika tidak, maka itu tidak berbahaya. Jadi setiap kali pengguna memasukkan URL, permintaan ke server jauh harus dibuat untuk memeriksa apakah itu URL berbahaya. Ini akan memakan banyak waktu dan dengan demikian membuat browser saya lambat.
Kasus 2: Saya menggunakan filter mekar. Seluruh daftar 1 juta URL dijalankan melalui filter bloom menggunakan beberapa fungsi hash dan masing-masing posisinya ditandai sebagai 1, dalam deretan besar 0. Katakanlah kita menginginkan rasio positif palsu 1%, menggunakan kalkulator filter mekar ( http://hur.st/bloomfilter?n=1000000&p=0.01), kami mendapatkan ukuran filter mekar yang diperlukan hanya 1,13 MB. Ukuran kecil ini diharapkan karena, meskipun ukuran larik sangat besar, kita hanya menyimpan 1 atau 0 dan bukan URL seperti pada tabel hash. Larik ini dapat diperlakukan sebagai larik bit. Artinya, karena kita hanya memiliki dua nilai 1 dan 0, kita dapat mengatur bit individual sebagai ganti byte. Ini akan mengurangi ruang yang diambil sebanyak 8 kali. Filter bloom 1,13 MB ini, karena ukurannya yang kecil, dapat disimpan di browser web itu sendiri !! Jadi, saat pengguna datang dan memasukkan URL, kami cukup menerapkan fungsi hash yang diperlukan (di browser itu sendiri), dan memeriksa semua posisi di filter bloom (yang disimpan di browser). Nilai 0 di salah satu posisi memberi tahu kami bahwa URL ini JELAS TIDAK ada dalam daftar URL berbahaya dan pengguna dapat melanjutkan dengan bebas. Jadi kami tidak melakukan panggilan ke server dan karenanya menghemat waktu. Nilai 1 memberi tahu kita bahwa URL MUNGKIN ada dalam daftar URL berbahaya. Dalam kasus ini kami membuat panggilan ke server jarak jauh dan di sana kami dapat menggunakan beberapa fungsi hash lainnya dengan beberapa tabel hash seperti pada kasus pertama untuk mengambil dan memeriksa apakah URL benar-benar ada. Karena sebagian besar waktu, URL tidak mungkin berbahaya, filter bloom kecil di browser mengetahui hal itu dan karenanya menghemat waktu dengan menghindari panggilan ke server jarak jauh. Hanya dalam beberapa kasus, jika filter bloom memberi tahu kami bahwa URL MUNGKIN berbahaya, hanya dalam kasus tersebut kami melakukan panggilan ke server. 'MIGHT' itu 99% benar. Dalam kasus ini kami membuat panggilan ke server jarak jauh dan di sana kami dapat menggunakan beberapa fungsi hash lainnya dengan beberapa tabel hash seperti pada kasus pertama untuk mengambil dan memeriksa apakah URL benar-benar ada. Karena sebagian besar waktu, URL tidak mungkin berbahaya, filter bloom kecil di browser mengetahui hal itu dan karenanya menghemat waktu dengan menghindari panggilan ke server jarak jauh. Hanya dalam beberapa kasus, jika filter bloom memberi tahu kami bahwa URL MUNGKIN berbahaya, hanya dalam kasus tersebut kami melakukan panggilan ke server. 'MIGHT' itu 99% benar. Dalam kasus ini kami membuat panggilan ke server jarak jauh dan di sana kami dapat menggunakan beberapa fungsi hash lainnya dengan beberapa tabel hash seperti pada kasus pertama untuk mengambil dan memeriksa apakah URL benar-benar ada. Karena sebagian besar waktu, URL tidak mungkin berbahaya, filter bloom kecil di browser mengetahui hal itu dan karenanya menghemat waktu dengan menghindari panggilan ke server jarak jauh. Hanya dalam beberapa kasus, jika filter bloom memberi tahu kami bahwa URL MUNGKIN berbahaya, hanya dalam kasus tersebut kami melakukan panggilan ke server. 'MIGHT' itu 99% benar. filter mekar kecil di browser mengetahui hal itu dan karenanya menghemat waktu dengan menghindari panggilan ke server jauh. Hanya dalam beberapa kasus, jika filter bloom memberi tahu kami bahwa URL MUNGKIN berbahaya, hanya dalam kasus tersebut kami melakukan panggilan ke server. 'MIGHT' itu 99% benar. filter mekar kecil di browser mengetahui hal itu dan karenanya menghemat waktu dengan menghindari panggilan ke server jauh. Hanya dalam beberapa kasus, jika filter bloom memberi tahu kami bahwa URL MUNGKIN berbahaya, hanya dalam kasus tersebut kami melakukan panggilan ke server. 'MIGHT' itu 99% benar.
Jadi dengan menggunakan filter mekar kecil di browser, kami telah menghemat banyak waktu karena kami tidak perlu melakukan panggilan server untuk setiap URL yang dimasukkan.
Kita dapat melihat bahwa tabel hash dengan fungsi hash tunggal digunakan untuk tujuan yang berbeda sama sekali dari filter mekar. Semoga ini menghilangkan keraguan Anda :)
edit :
Saya telah menerapkan filter mekar untuk tugas pengujian URL berbahaya dengan Python. Kode tersebut dapat ditemukan di sini - https://github.com/tarunsharma1/Bloom-Filter
Kode ini sangat mudah dipahami dan penjelasan rinci disediakan di file readme.