Count–min sketch
В інформатиці count–min sketch (CM-ескіз; англ. count–min sketch) — це імовірнісна структура даних, що слугує таблицею частот подій у потоці даних. Вона використовує геш-функції для відображення подій у частоти, але, на відміну від геш-таблиці, займає лише сублінійний обсяг пам'яті — ціною того, що частоти деяких подій завищуються через колізії. Count–min sketch винайшли 2003 року Ґрем Кормоуд (Graham Cormode) і С. Муту Мутукрішнан (S. Muthu Muthukrishnan), а описали його в статті 2005 року.
Count–min sketch — це альтернатива до count sketch та AMS sketch; його можна вважати реалізацією лічильникового фільтра Блума. Проте їх використовують по-різному: count–min sketch зазвичай має сублінійну кількість клітинок, тоді як лічильниковий фільтр Блума розмірюють під кількість елементів у множині.
Структура даних
Мета базової версії — споживати потік подій (по одній за раз) і підраховувати частоту різних типів подій. У будь-який момент ескіз можна запитати про частоту конкретного типу події зі всесвіту типів подій ; він поверне оцінку, що перебуває на певній відстані від справжньої частоти, з певною ймовірністю.
Сама структура даних — це двовимірний масив з стовпців і рядків. З кожним із рядків пов'язана окрема геш-функція; геш-функції мають бути попарно незалежними. Параметри можна обрати так:
де похибка у відповіді на запит перебуває в межах адитивного фактора з імовірністю , а — число Ейлера.
Коли надходить нова подія типу , для кожного рядка застосовують відповідну геш-функцію, щоб отримати індекс стовпця , а потім збільшують значення в рядку , стовпці на одиницю.
Точковий запит
Точковий запит питає про лічильник типу події . Оцінений лічильник дається найменшим значенням у таблиці:
Для кожного маємо , де — справжня частота. Крім того, оцінка гарантує, що з імовірністю , де — розмір потоку.
Скалярний добуток
Запит скалярного добутку оцінює скалярний добуток між гістограмами, представленими двома ескізами. Нехай . Тоді скалярний добуток оцінюють як , причому .
Злиття потоків
Як і count sketch, count–min sketch є лінійним ескізом. Якщо побудувати ескіз на кожному з двох потоків і додати ескізи, результат буде таким самим, як якби потоки спершу конкатенували. Це робить ескіз злиттєздатним і придатним для розподілених середовищ.
Зменшення зсуву та похибки
Звичайний оцінювач-мінімум є зсунутим: ескіз може завищувати, але ніколи не занижує справжній лічильник у точковому запиті. Запропоновано кілька варіацій для усунення зсуву:
- Оцінювач hCount* — багаторазово випадково обирає записів і бере мінімум, щоб отримати незсунену оцінку зсуву.
- Оцінювач максимальної правдоподібності (MLE) — завжди здатен зрівнятися з оцінювачем-мінімумом або перевершити його.
- Консервативне оновлення — оновлює . Робить ескіз нелінійним, але він лишається злиттєздатним.
Див. також
- Фільтр Блума
- MinHash
- Feature hashing
Примітки
Посилання
- Cormode, Graham; Muthukrishnan, S. (2005). An Improved Data Stream Summary: The Count-Min Sketch and its Applications. Journal of Algorithms.
- Оригінальна стаття в англійській Вікіпедії
Джерело: стаття у Вікіпедії та історія редагувань (автори).