Строковые операции - Википедия - String operations

В Информатика, в районе формальная теория языка, часто используются различные строковые функции; однако используемые обозначения отличаются от используемых для компьютерное программирование, а некоторые часто используемые функции в теоретической сфере редко используются при программировании. В этой статье дается определение некоторых из этих основных терминов.

Строки и языки

Строка - это конечная последовательность символов. пустой строкой обозначается .Соединение двух строк и обозначается , или короче на . Объединение с пустой строкой не имеет значения: .Сцепление строк ассоциативный: .

Например, .

А язык - конечный или бесконечный набор строк. Помимо обычных операций над множеством, таких как объединение, пересечение и т. д., конкатенация может применяться к языкам: если оба и языки, их соединение определяется как набор конкатенаций любой строки из и любая строка из , формально Снова точка конкатенации часто опускается для краткости.

Язык состоящий только из пустой строки, следует отличать от пустого языка .Соединение любого языка с первым не вносит никаких изменений: , а конкатенация с последним всегда дает пустой язык: Связь языков ассоциативна: .

Например, сокращение , набор всех трехзначных десятичных чисел получается как . Набор всех десятичных чисел произвольной длины является примером бесконечного языка.

Алфавит строки

В алфавит строки - это набор всех символов, которые встречаются в определенной строке. Если s это строка, ее алфавит обозначается

В алфавит языка это набор всех символов, которые встречаются в любой строке , формально:.

Например, набор это алфавит строки , а над это алфавит над язык а также языка всех десятичных чисел.

Подстановка строк

Позволять L быть язык, и пусть Σ его алфавит. А подстановка строк или просто замена это отображение ж который отображает символы в Σ на языки (возможно, в другом алфавите). Так, например, с учетом персонажа а ∈ Σ, имеем ж(а)=Lа куда Lа ⊆ Δ* - некоторый язык с алфавитом Δ. Это отображение может быть расширено до строк как

ж(ε) = ε

для пустой строкой ε и

ж(са)=ж(s)ж(а)

для строки sL и характер а ∈ Σ. Подстановки строк могут быть распространены на целые языки как [1]

Обычные языки закрываются при подстановке строк. То есть, если каждый символ в алфавите обычного языка заменяется другим обычным языком, результатом все равно будет обычный язык.[2]По аналогии, контекстно-свободные языки закрываются при подстановке строк.[3][примечание 1]

Простой пример - преобразование жuc(.) в верхний регистр, который может быть определен, например, следующее:

персонажсопоставлен с языкомзамечание
Иксжuc(Икс)
а{ ‹А› }сопоставить символ нижнего регистра с соответствующим символом верхнего регистра
А{ ‹А› }сопоставить заглавные буквы себе
SS{ ‹SS› }заглавные буквы отсутствуют, преобразовать в строку из двух символов
‹0›{ε}сопоставить цифру с пустой строкой
‹!›{ }запретить пунктуацию, отобразить пустой язык
...аналогично для других символов

Для продления жuc к строкам у нас есть, например,

  • жuc(‹Straße›) = {‹S›} ⋅ {‹T›} ⋅ {‹R›} ⋅ {‹A›} ⋅ {‹SS›} ⋅ {‹E›} = {‹STRASSE›},
  • жuc(‹U2›) = {‹U›} ⋅ {ε} = {‹U›} и
  • жuc(‹Go!›) = {‹G›} ⋅ {‹O›} ⋅ {} = {}.

Для продления жuc к языкам у нас есть, например,

  • жuc({‹Straße›, ‹u2›, ‹Go!›}) = {‹STRASSE›} ∪ {‹U›} ∪ {} = {‹STRASSE›, ‹U›}.

Гомоморфизм струн

А гомоморфизм струн (часто называемый просто гомоморфизм в формальная теория языка ) - это строковая подстановка, при которой каждый символ заменяется одной строкой. То есть, , куда это строка для каждого символа .[заметка 2][4]

Гомоморфизмы струн моноидные морфизмы на свободный моноид, сохраняя пустую строку и бинарная операция из конкатенация строк. Учитывая язык , набор называется гомоморфный образ из . В обратный гомоморфный образ строки определяется как

а обратный гомоморфный образ языка определяется как

В целом, , а у одного есть

и

для любого языка .

Класс регулярных языков замкнут относительно гомоморфизмов и обратных гомоморфизмов.[5] Точно так же контекстно-свободные языки замкнуты относительно гомоморфизмов[заметка 3] и обратные гомоморфизмы.[6]

Гомоморфизм струны называется ε-свободным (или e-свободным), если для всех а в алфавите . Простая однобуквенная подстановочные шифры являются примерами (ε-свободных) гомоморфизмов струн.

Пример гомоморфизма строк граммuc также можно получить, задав аналогично над замена: граммuc(‹A›) = ‹A›, ..., граммuc(‹0›) = ε, но позволяя граммuc быть неопределенным для знаков препинания. Примеры обратных гомоморфных образов:

  • граммuc−1({‹SSS›}) = {‹sss›, ‹sß›, ‹ßs›}, поскольку граммuc(‹Sss›) = граммuc(‹Sß›) = граммuc(‹Sss›) = ‹SSS› и
  • граммuc−1({‹A›, ‹bb›}) = {‹a›}, поскольку граммuc(‹A›) = ‹A›, а ‹bb› недоступен для граммuc.

Для последнего языка граммuc(граммuc−1({‹A›, ‹bb›})) = граммuc({‹A›}) = {‹A›} ≠ {‹A›, ‹bb›}. Гомоморфизм граммuc не является ε-свободным, поскольку отображает, например, ‹0› в ε.

Очень простой пример гомоморфизма строк, который отображает каждый символ только на символ, - это преобразование EBCDIC -кодированная строка в ASCII.

Проекция струны

Если s это строка, а это алфавит, струнная проекция из s это строка, которая получается в результате удаления всех символов, которых нет в . Написано как . Формально это определяется удалением символов с правой стороны:

Здесь обозначает пустой строкой. Проекция струны по существу такая же, как у проекция в реляционной алгебре.

Проекция строки может быть повышена до проекция языка. Учитывая формальный язык L, его проекция равна

[нужна цитата ]

Правое частное

В правое частное персонажа а из строки s усечение символа а в строке s, с правой стороны. Обозначается как . Если в строке нет а справа результат - пустая строка. Таким образом:

Можно взять частное от пустой строки:

Аналогично, учитывая подмножество моноида , можно определить частное подмножество как

Аналогичным образом можно определить левое частное, при этом операции выполняются слева от строки.[нужна цитата ]

Хопкрофт и Ульман (1979) определяют фактор L1/L2 языков L1 и L2 по тому же алфавиту, что и L1/L2 = { s | ∃тL2. улL1 }.[7]Это не является обобщением приведенного выше определения, поскольку для строки s и отличные персонажи а, б, Из определения Хопкрофта и Ульмана следует {са} / {б} давая {}, а не {ε}.

Левое частное (при определении аналогично Хопкрофту и Ульману 1979) одноэлементного языка L1 и произвольный язык L2 известен как Производная Бжозовского; если L2 представлен регулярное выражение, поэтому может быть левое частное.[8]

Синтаксическое отношение

Правое частное подмножества моноида определяет отношение эквивалентности, называется верно синтаксическое отношение из S. Это дается

Очевидно, что отношение имеет конечный индекс (имеет конечное число классов эквивалентности) тогда и только тогда, когда правые частные семейства конечны; то есть, если

конечно. В случае, если M моноид слов над некоторым алфавитом, S тогда обычный язык, то есть язык, который может быть распознан конечный автомат. Подробнее об этом рассказывается в статье о синтаксические моноиды.[нужна цитата ]

Правильная отмена

В правильная отмена персонажа а из строки s это удаление первого появления символа а в строке s, начиная с правой стороны. Обозначается как и рекурсивно определяется как

Пустая строка всегда может быть отменена:

Понятно, что правильная гашение и проекция ездить:

[нужна цитата ]

Префиксы

В префиксы строки это набор всех префиксы к строке относительно данного языка:

куда .

В префиксное закрытие языка является

Пример:

Язык называется префикс закрыт если .

Оператор закрытия префикса идемпотент:

В префиксное отношение это бинарное отношение такой, что если и только если . Это отношение является частным примером порядок префиксов.[нужна цитата ]

Смотрите также

Примечания

  1. ^ Хотя каждый регулярный язык также контекстно-свободен, предыдущая теорема не подразумевается текущей теоремой, поскольку первая дает результат формирования для обычных языков.
  2. ^ Строго формально гомоморфизм порождает язык, состоящий только из одной строки, т.е. .
  3. ^ Это следует из вышеупомянутый закрытие при произвольных заменах.

Рекомендации

  • Хопкрофт, Джон Э .; Ульман, Джеффри Д. (1979). Введение в теорию автоматов, языки и вычисления. Ридинг, Массачусетс: издательство Addison-Wesley Publishing. ISBN  978-0-201-02988-8. Zbl  0426.68001. (См. Главу 3.)
  1. ^ Хопкрофт, Ульман (1979), раздел 3.2, стр. 60
  2. ^ Хопкрофт, Ульман (1979), раздел 3.2, теорема 3.4, с.60
  3. ^ Хопкрофт, Ульман (1979), раздел 6.2, теорема 6.2, стр.131
  4. ^ Хопкрофт, Ульман (1979), раздел 3.2, стр. 60-61
  5. ^ Хопкрофт, Ульман (1979), раздел 3.2, теорема 3.5, стр.61
  6. ^ Хопкрофт, Ульман (1979), раздел 6.2, теорема 6.3, стр.132
  7. ^ Хопкрофт, Ульман (1979), раздел 3.2, стр.62
  8. ^ Януш А. Бжозовски (1964). «Производные от регулярных выражений». J ACM. 11 (4): 481–494. Дои:10.1145/321239.321249.