Приставка

В математике и теории формальных языков приставка (по-английски "prefix") слова — это такая его начальная часть, которой можно дополнить сзади некоторым словом, чтобы получить исходное слово. Формально говорят: слово u является приставкой слова v тогда и только тогда, когда существует слово t такое, что v=wtv = w \cdot t. Частным случаем является собственная приставка — приставка, отличная от самого слова; иногда выделяют пустую приставку (пустое слово).

Понятие приставки широко используется при изучении строковых алгоритмов, структур данных и теории кодирования. Множество всех приставок слова w фиксируют как Pref(w)={uv:  w=uv}\mathrm{Pref}(w)=\{u\mid\exists v:\;w=u\,v\}, и это множество важно в построении автоматов, префиксных деревьев (tries), в задачах автодополнения и при анализе префиксных кодов (например, код Хаффмана должен быть префиксным, чтобы обеспечить однозначную декодируемость). В алгоритме Кнута–Морриса–Пратта вычисляется префикс-функция, которая для каждой позиции i строки возвращает длину наибольшей собственной приставки, совпадающей с суффиксом, заканчивающимся в i-й позиции; это формально записывают как π[i]=max{k<is1sk=sik+1si}\pi[i]=\max\{k<i\mid s_1\ldots s_k=s_{i-k+1}\ldots s_i\} и использует информацию о совпадающих приставках и суффиксах для ускорения поиска подстроки.

Примеры: слово "abc" имеет приставки: пустое слово, "a", "ab" и само "abc"; здесь, например, "ab" является приставкой "abc" потому что v=wtv = w \cdot t. Множество приставок слова "abc" можно записать как Pref(w)={uv:  w=uv}\mathrm{Pref}(w)=\{u\mid\exists v:\;w=u\,v\}. В задачах на префиксные коды, если один код является приставкой другого, то кодовая система неоднозначна при декодировании — поэтому допустимы только такие множества кодов, где никакой код не является приставкой другого (префиксное свойство). Для визуализации префиксной структуры часто используют префиксное дерево — на рисунке изображён фрагмент такого дерева: {IMAGE_0}.