Коткий геш

Матеріал з testwiki
Версія від 17:41, 20 квітня 2024, створена imported>BunykBot (автоматична заміна {{Не перекладено}} вікі-посиланнями на перекладені статті)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Коткий геш (Шаблон:Lang-en) (також відомий як рекурсивне гешування або котка контрольна сума) — це геш-функція, яка гешує дані у вікні, що рухається уздовж входових даних.

Декілька геш-функцій дозволяють швидке обчислення коткого гешу маючи лише попередній геш і видалене з і до додане до вікна значення. Це подібно до функції рухомого середнього, яку можна обчислити швидше ніж інші низькочастотні фільтри.

Одне з найпомініших застосувань це алгоритм Рабіна — Карпа пошуку підрядка, який використовує геш описаний нижче. Інше поширене застосування це застосунок rsync, який в якості коткого гешу використовує контрольну суму породжену з adler-32. Вузькосмугова мережева файлова система (LBFS) використовує «відбиткі пальців» Рабіна як коткий геш.

Щонайбільше, значення коткого гешу попарно незалежні[1] або сильно універсальні. Наприклад, вони не можуть бути Шаблон:Нп.

Поліномний коткий геш

Алгоритм Рабіна — Карпа часто пояснюють за допомогою функції коткого гешу, яка використовує лише множення і додавання:

H=c1ak1+c2ak2+c3ak3+...+cka0,

де a це стала величина, а c1,...,ck це входові символи (але ця функція не є «відбитками пальців» Рабіна).

Щоб не довелось працювати з величезними значеннями H, всю математику роблять за модулем n. Вибір a і n критичний для отримання хорошого гешування; дивись лінійний конгруентний метод.

Видаляння і додавання символів потребує просто додавання або віднімання першого або останнього доданку. Зсування всіх символів на одну позицію ліворуч вимагає домноження усієї суми H на a. Зауважте, що в модульній арифметиці a можна обрати так, щоб вона мала множильне обернене a1, на яке можна домножити H, щоб отримати ділення не роблячи його насправді.

Примітки

Шаблон:Reflist

  1. Daniel Lemire, Owen Kaser: Recursive n-gram hashing is pairwise independent, at best, Computer Speech & Language 24 (4), pages 698–710, 2010. arXiv:0705.4676.