Язык Дика — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Правила вывода в языке Дика)
(Метки: правка с мобильного устройства, правка из мобильной версии)
(Правила вывода в языке Дика)
(Метки: правка с мобильного устройства, правка из мобильной версии)
Строка 53: Строка 53:
 
При этом такое представление единственно.
 
При этом такое представление единственно.
 
}}
 
}}
 +
 +
Чтобы перейти от некоммутативного производящего ряда к обычному, сделаем подстановку <tex>a = s, b = s, \lambda = s^0 = 1</tex>. Уравнение <tex>D(a, b) = \lambda + aD(a, b)bD(a, b)</tex> примет вид <tex>D(s, s) = 1 + s^2D(s, s)</tex>.
 +
 +
Отсюда, обозначив <tex>D(s, s)</tex> через <tex>d(s),</tex> получим <tex>d(s) = 1 + s^2d(s)^2</tex>
 +
 +
Решение <tex>d(s) = \dfrac{1 - \sqrt{1 - 4s^2}}{2s^2}</tex>
 +
этого уравнения совпадает с производящей функцией для [[Числа Каталана#Вычисление производящей функции чисел Каталана | чисел Каталана]]. Необходимость подстановки <tex>s^2</tex> вместо <tex>s</tex> объясняется тем, что в языке Дика длина слова, составленного из <tex>n</tex> пар скобок, равна <tex>2n</tex>: мы перечисляем слова по числу скобок, а не ''пар'' скобок.

Версия 13:29, 14 мая 2018


Определение:
Пусть [math]A = \{a_1, a_2, \ldots , a_k\}[/math] — произвольный конечный набор различных букв. Словом в алфавите [math]A[/math] называется произвольная конечная последовательность буквa [math]a_1 a_2 \ldots a_m,[/math] где [math]a_i \in A , i = 1, \ldots , m[/math]. Число [math]m[/math] называется длиной слова. Языком над алфавитом [math]A[/math] называется произвольное (конечное или бесконечное) множество слов в алфавите [math]A[/math].


Пустое слово [math]\lambda[/math] имеет длину [math]0[/math] и может входить или не входить в язык.


Определение:
Язык Дика (англ. Dyck language) — множество правильных скобочных структур вместе с пустой структурой, образующее язык над алфавитом [math]\{a, b\}[/math].


Определение:
Производящей функцией (англ. generating function) языка [math]L[/math] называется производящая функция [math]L(s) = l_0 + l_1 s + l_2 s^2 + \ldots,[/math] где [math]l_k[/math] есть число слов длины [math]k[/math] в языке [math]L[/math].


Правила вывода в языке Дика

Рассмотрим два правила вывода в языке Дика:

1) [math]r \longrightarrow \lambda[/math]
2) [math]r \longrightarrow arbr,[/math]

где [math]r[/math] — буква, не входящая в алфавит [math]\{a, b\}[/math],

стрелка [math]\longrightarrow[/math] заменяет фразу: если в слове есть буква [math]r[/math], то эту букву можно заменить на слово, стоящее справа от стрелки.

Правила вывода можно понимать следующим образом:

Всякое слово в языке Дика есть либо

1) пустое слово,
2) слово, в котором внутри самой левой пары соответственных скобок стоит некоторое слово языка Дика и после этой пары стоит слово языка Дика.

Ясно, что для каждого слова такое представление единственно.

Вычислим с помощью правил вывода производящую функцию для языка Дика. Для этой цели выпишем некоммутативный производящий ряд, перечисляющий слова языка. Этот ряд представляет собой формальную сумму всех слов языка, выписанных в порядке возрастания длины:

[math]D(a, b) = \lambda + ab + aabb + abab + aaabbb + aababb + \ldots[/math]

Теорема:
Ряд [math]D(a, b) = \lambda + ab + aabb + abab + aaabbb + aababb + \ldots[/math] удовлетворяет уравнению [math]D(a, b) = \lambda + aD(a, b)bD(a, b)[/math].
Доказательство:
[math]\triangleright[/math]

Действительно, в левой части равенства [math]D(a, b) = \lambda + aD(a, b)bD(a, b)[/math] записана сумма всех слов языка Дика. Равенство означает справедливость утверждения: Всякое слово в языке Дика есть либо

1) пустое слово,
2) слово, в котором внутри самой левой пары соответственных скобок стоит некоторое слово языка Дика и после этой пары стоит слово языка Дика.
При этом такое представление единственно.
[math]\triangleleft[/math]

Чтобы перейти от некоммутативного производящего ряда к обычному, сделаем подстановку [math]a = s, b = s, \lambda = s^0 = 1[/math]. Уравнение [math]D(a, b) = \lambda + aD(a, b)bD(a, b)[/math] примет вид [math]D(s, s) = 1 + s^2D(s, s)[/math].

Отсюда, обозначив [math]D(s, s)[/math] через [math]d(s),[/math] получим [math]d(s) = 1 + s^2d(s)^2[/math]

Решение [math]d(s) = \dfrac{1 - \sqrt{1 - 4s^2}}{2s^2}[/math] этого уравнения совпадает с производящей функцией для чисел Каталана. Необходимость подстановки [math]s^2[/math] вместо [math]s[/math] объясняется тем, что в языке Дика длина слова, составленного из [math]n[/math] пар скобок, равна [math]2n[/math]: мы перечисляем слова по числу скобок, а не пар скобок.