Filtrul cuc este o structură de date probabilistică eficientă din punct de vedere al memoriei care este utilizată pentru a testa dacă un element aparține unui set , similar filtrului Bloom . Sunt posibile false pozitive , dar nu false negative - cu alte cuvinte, interogarea returnează fie „posibil aparține setului”, fie „cu siguranță nu aparține”. De asemenea, filtrul de cuc vă permite să eliminați elementele existente, pe care filtrul de înflorire nu le poate face (cu excepția cazului în care utilizați opțiunea de numărare, care necesită mai multă memorie). În plus, pentru aplicațiile care stochează multe elemente și vizează o rată fals pozitivă moderat scăzută, filtrul cuco realizează o suprasarcină de memorie mai mică decât filtrul Bloom optimizat pentru memorie [1] .
Filtrul de cuc a fost descris pentru prima dată în 2014 [2] .
Filtrul cucului folosește un tabel hash asociat cu mai multe canale bazat pe hashing cuc pentru a stoca amprentele digitale ale tuturor elementelor (fiecare găleată din tabelul hash poate stoca până la intrări). În special, cei doi indici de coșuri potențiale și din tabel pentru un anumit element sunt calculați folosind următoarele două funcții hash (numite partial - key cuckoo hashing ) [2] ):
Utilizarea celor două funcții hash de mai sus pentru a construi tabele hash cu cuc permite ca elementele să fie mutate numai pe baza amprentei digitale atunci când elementul original nu poate fi cunoscut. Ca urmare, la inserarea unui articol nou care necesită mutarea unui articol existent , cealaltă locație posibilă din tabel pentru articolul evacuat din coșul de reciclare este calculată prin formula
Un tabel de hash bazat pe hashing cuc cu o cheie parțială poate fi atât foarte utilizabil (datorită hashingului cuc) cât și compact, deoarece sunt stocate doar amprentele digitale. Operațiunile de căutare și ștergere sunt simple. Există maximum două locații de verificat: și . Dacă este găsit un element, operația de căutare sau ștergere corespunzătoare poate fi finalizată la timp . O analiză teoretică mai detaliată a filtrului de cuc poate fi găsită în literatura de specialitate [3] [4] .
Filtrul Cuckoo este similar cu filtrul Bloom prin faptul că ambele sunt foarte rapide și compacte și ambele pot returna rezultate false pozitive: