Строковые операции - String operations - Wikipedia
В Информатика, в районе формальная теория языка, часто используются различные строковые функции; однако используемые обозначения отличаются от используемых для компьютерное программирование, а некоторые часто используемые функции в теоретической сфере редко используются при программировании. В этой статье дается определение некоторых из этих основных терминов.
Строки и языки
Строка - это конечная последовательность символов. пустой строкой обозначается .Соединение двух строк и обозначается , или короче на . Объединение с пустой строкой не имеет значения: .Сцепление строк ассоциативный: .
Например, .
А язык - конечный или бесконечный набор строк. Помимо обычных операций над множеством, таких как объединение, пересечение и т. д., конкатенация может применяться к языкам: если оба и языки, их соединение определяется как набор конкатенаций любой строки из и любая строка из , формально Снова точка конкатенации часто опускается для краткости.
Язык состоящий только из пустой строки, следует отличать от пустого языка .Соединение любого языка с первым не вносит никаких изменений: , а конкатенация с последним всегда дает пустой язык: Связь языков ассоциативна: .
Например, сокращение , набор всех трехзначных десятичных чисел получается как . Набор всех десятичных чисел произвольной длины является примером бесконечного языка.
Алфавит строки
В алфавит строки - это набор всех символов, которые встречаются в определенной строке. Если s это строка, ее алфавит обозначается
В алфавит языка это набор всех символов, которые встречаются в любой строке , формально:.
Например, набор это алфавит строки , а над это алфавит над язык а также языка всех десятичных чисел.
Подстановка строк
Позволять L быть язык, и пусть Σ его алфавит. А подстановка строк или просто замена это отображение ж который отображает символы в Σ на языки (возможно, в другом алфавите). Так, например, с учетом персонажа а ∈ Σ, имеем ж(а)=Lа куда Lа ⊆ Δ* - некоторый язык с алфавитом Δ. Это отображение может быть расширено до строк как
- ж(ε) = ε
для пустой строкой ε и
- ж(са)=ж(s)ж(а)
для строки s ∈ L и характер а ∈ Σ. Подстановки строк могут быть распространены на целые языки как [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, начиная с правой стороны. Обозначается как и рекурсивно определяется как
Пустая строка всегда может быть отменена:
Понятно, что правильная гашение и проекция ездить:
- [нужна цитата ]
Префиксы
В префиксы строки это набор всех префиксы к строке относительно данного языка:
куда .
В префиксное закрытие языка является
Пример:
Язык называется префикс закрыт если .
Оператор закрытия префикса идемпотент:
В префиксное отношение это бинарное отношение такой, что если и только если . Это отношение является частным примером порядок префиксов.[нужна цитата ]
Смотрите также
- Сравнение языков программирования (строковые функции)
- Лемма Леви
- Строка (информатика) - определение и выполнение более основных операций со строками
Примечания
- ^ Хотя каждый регулярный язык также контекстно-свободен, предыдущая теорема не подразумевается текущей теоремой, поскольку первая дает результат формирования для обычных языков.
- ^ Строго формально гомоморфизм порождает язык, состоящий только из одной строки, т.е. .
- ^ Это следует из вышеупомянутый закрытие при произвольных заменах.
Рекомендации
- Хопкрофт, Джон Э .; Ульман, Джеффри Д. (1979). Введение в теорию автоматов, языки и вычисления. Ридинг, Массачусетс: издательство Addison-Wesley Publishing. ISBN 978-0-201-02988-8. Zbl 0426.68001. (См. Главу 3.)
- ^ Хопкрофт, Ульман (1979), раздел 3.2, стр. 60
- ^ Хопкрофт, Ульман (1979), раздел 3.2, теорема 3.4, с.60
- ^ Хопкрофт, Ульман (1979), раздел 6.2, теорема 6.2, стр.131
- ^ Хопкрофт, Ульман (1979), раздел 3.2, стр. 60-61
- ^ Хопкрофт, Ульман (1979), раздел 3.2, теорема 3.5, стр.61
- ^ Хопкрофт, Ульман (1979), раздел 6.2, теорема 6.3, стр.132
- ^ Хопкрофт, Ульман (1979), раздел 3.2, стр.62
- ^ Януш А. Бжозовски (1964). «Производные от регулярных выражений». J ACM. 11 (4): 481–494. Дои:10.1145/321239.321249.