Файл: Методические указания к решению задач по дисциплине Теория автоматов и алгоритмические языки.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 25.10.2023

Просмотров: 125

Скачиваний: 13

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

9
Элементы теории автоматов и формальных языков В.А. Кутыркин, А.Ю. Бушуев кроме того, они имеют представление
x
b


  
и
y
c


  
, где
, ,
A
  


,
,
b c
A

и
( )
( )
A
A
c
b

N
N
, то, в этом случае, слово
y
«старше» слова x .
Упражнение 2.1. Доказать, что в формальном позитивном A -языке A

количество слов длиной
n


равно |
|
n
A
.►
Замечание 2.1. Из результатов упражнения 1.1 следует, что в универсальном A -языке количество слов, длина которых не превышает число
n


, конечно и равно числу
0 1
|
|
|
|
... |
|
n
A
A
A

 
. Поэтому количество слов в универсальном A -языке, которые, согласно лексикографическому A -порядку, «младше» некоторого фиксированного слова, конечно. Кроме того, за этим фиксированным словом непосредственно следует единственное слово, которое «старше» его в лексикографическом A -порядке. Следуя такому лексикографическому «старшинству», за конечное число шагов можно
«добраться» до любого A -слова. Таким образом, согласно лексикографическому A - порядку, все слова формального языка A

можно расположить в натуральном A -словаре
(
)
A
A

Dc
, согласно их «старщинству» (пустое слово – начальное слово этого словаря).►
Пример 2.1. Пусть задан алфавит
,
B
a b

. Тогда начало натурального B -словаря
(
)
B
B


Dc
имеет вид:
, , ,
,
,
,
,
,
,
,
,
,
,
,
a b aa ab ba bb aaa aab aba abb baa bab bba bbb

.►
Если L
A


– непустой формальный
A
-язык, то для него также создаѐтся
натуральный A -словарь
( )
A
L
Dc
следующим образом. Для этого при развѐртывании словаря
(
)
A
A

Dc
из него последовательно вычѐркиваются слова, не принадлежащие языку
L
. В результате остаѐтся натуральный A -словарь
( )
A
L
Dc
языка
L
. Вследствие
принципа математической индукции, каждое слово
x
L

получает в словаре
( )
A
L
Dc
свой естественный номер
( )
A
L
x
N
, а именно: начальное слово этого словаря получает первый номер, непосредственно следующее (если таковое имеется) – второй и т.д.
Приведѐм способ вычисления номера слова в натуральном A -словаре позитивного языка A


10
Элементы теории автоматов и формальных языков В.А. Кутыркин, А.Ю. Бушуев
Теорема 2.1. Для слова
1
m
x
b
b
A

  

, где
1
,...,
m
b
b
A

, его номер
( )
A
A
x

N
в натуральном A -словаре
( )
A
L
Dc
вычисляется согласно формуле:
1 2
1 1
2
( )
( )
( )
(
)
(
)
m
m
A
A
A
A
A
m
m
A
x
b
k
b
k
b
k
b







 
 

N
N
N
N
N
,
(1) где
|
| |
|
A
A
k


.►
Следствие 2.1. Номер
( )
A
A
y

N
непустого слова
y
A


в словаре
(
)
A
A

Dc
вычисляется согласно формуле
( )
( ) 1
A
A
A
A
y
y




N
N
.►
Пример 2.2. Если
,
B
a b

– алфавит из примера 1.1, то, согласно теореме 1.1, номера
( )
B
B
y

N
слова y
bbb
B



равен числу:
3 1 3 2 2
( )
( ) 2
( ) 2
( )
2 2 2 2 2 14
B
B
B
B
B
y
b
b
b








     
N
N
N
N
, что соответствует словарю примера 2.1.►
Замечание 2.2. Если какому-либо символу
x
присваивается значение другого символа
y
, то для этого используется обозначение
:
x
y

, где :

– знак операции присваивания
значения символа, стоящего справа от этого знака, символу, стоящему слева от этого знака. В частности, в этом случае возможно выражение
:
1
x
x
 
, если символу
x
уже присвоено некоторое значение.►
Пример 2.3. Приведѐм алгоритм вычисления слова в натуральном словаре позитивного языка по его номеру в этом словаре.
Пусть
( )
A
A
n
x


N
– номер слова x
A


в натуральном словаре
(
)
A
A

Dc
, вычисленный согласно формуле (1). Тогда для определения этого слова x используется алгоритм, имеющий вид:
(1-ый шаг)
:
y
n

;
(2-ой шаг)
: 1
m

;
(3-ий шаг)
x

;
(4-ый шаг) если
0
y

, перейти к 14-ому шагу;
(5-ый шаг)
:
z
y
k

rest
(остаток от деления числа
y
на число
k
);


11
Элементы теории автоматов и формальных языков В.А. Кутыркин, А.Ю. Бушуев
(6-ой шаг) если
0
z

перейти к 10-ому шагу;
(6-ой шаг)
: (
)
y
y
z
k


div
(частное от деления числа
(
)
y
z

на число
k
);
(7-ой шаг)
x
a
x
 
, где
a
A

и
( )
A
a
z

N
;
(8-ой шаг)
:
1
m
m
 
;
(9-ый шаг) перейти к 4-ому шагу;
(10-ый шаг)
: (
)
y
y
k
k


div
;
(11-ый шаг)
k
x
a
x


;
(12-ый шаг)
:
1
m
m
 
;
(13-ый шаг) если
0
z

перейти к 4-ому шагу;
(14-ый шаг) вывод слова
x
A


и завершение алгоритма.►
Пример 2.4. Если
,
B
a b

– алфавит из примера 2.2 и
( ) 14
B
B
y


N
– номер слова
y
B


, то, согласно алгоритму примера 2.3, получаем: y bbb

, что соответствует примеру 1.2.►
Упражнение 2.2. Пусть
,
B

0 1
– алфавит размера
2 , где
0
и
1 – специальные
«жирные» знаки, отличные от натуральных чисел нуля 0 и единицы 1. Для слова формального языка
{
:
}
L
x x
B

 

1
написать формулу вычисления номера этого слова в натуральном словаре
( )
B
L
Dc
, используя номера букв алфавита B , составляющих это слово ( L – язык двоичного представлении натуральных чисел из совокупности
).
Создать алгоритм вычисления слова по его номеру в натуральном словаре
( )
B
L
Dc
.►
Упражнение
2.3.
Для заданного слова формального
A -языка
1
{
:
,
,
}
L
a
x a
A a
a x
A

 



написать формулу вычисления номера этого слова в натуральном словаре
( )
A
L
Dc
, используя номера букв алфавита A , составляющих это слово ( L – язык
k
-ичного представлении натуральных чисел из совокупности
). Затем, создать алгоритм вычисления слова по его номеру в натуральном словаре
( )
A
L
Dc
.►

12
Элементы теории автоматов и формальных языков В.А. Кутыркин, А.Ю. Бушуев
Упражнение 2.4. Пусть в алфавите
A
заданы два непустых слов x и y , имеющие номера
m и n , соответственно, в натуральном словаре
(
)
A
A

Dc
. Используя длины
| |
x
и
| |
y этих слов, найти номер слова x
y

в натуральном словаре
(
)
A
A

Dc
.►
Упражнение 2.5. Пусть
, , /
B

– алфавит для языка рациональных дробей
/
{ / :
,
}
m n m
n



, где
( )




и



. Для заданной неотрицательной (отрицательной) рациональной дроби
/
/
x
m n


вычислить еѐ номер
/
( )
B
x
N
в натуральном словаре
/
(
)
B
Dc
.►
Определение 2.1. Два натуральных числа
m
и
n
, одно из которых ненулевое, называются
взаимно простыми, если их наибольший общий делитель
( , ) 1
m n

НОД
. Ненулевое натуральное число называется простым, если оно не является единицей и делится нацело только на себя само и единицу.►
Пример 2.5. Алгоритм Евклида для вычисления наибольшего общего делителя
( , )
k n
НОД
двух натуральных чисел
k
и
n
, одно из которых ненулевое, имеет следующий последовательно пошаговый вид:
(1-ый шаг)
1
:
( , )
x
k n

min
(вычисление минимального из двух чисел);
(2-ой шаг)
2
:
( , )
x
k n

max
(вычисление максимального из двух чисел);
(3-ий шаг)
3
:
( , )
x
k n

min
;
(4-ый шаг) если
1 0
x

, то переходим к 9-ому шагу;
(5-ый шаг)
1 2
3 3
:
(
,
)
min
x
x
x x


;
(6-ой шаг)
2 2
3 3
:
(
,
)
max
x
x
x x


;
(7-ой шаг)
3 1
:
x
x

;
(8-ой шаг) переход к 4-ому шагу;
(9-ый шаг) вывод "
( , ) "
k n

НОД
2
x и завершение алгоритма.►
Упражнение 2.6. Используя алгоритм Евклида найти
(90,36)
НОД
.►
Замечание 2.3.


13
Элементы теории автоматов и формальных языков В.А. Кутыркин, А.Ю. Бушуев
а) Согласно результату упражнения 2.5, язык рациональных дробей допускает построение его в виде словаря
/
(
)
B
Dc
. Однако, этот словарь не является словарѐм рациональных чисел, поскольку каждое рациональное число представляется бесконечным словарѐм рациональных дробей, в частности, словарь дробей 0 / :
n n

определяет одно рациональное число («нулевое»). Для того чтобы избежать такой неоднозначности в представлении рациональных чисел, в качестве единственного представителя рационального числа следует выбирать только несократимые рациональные дроби. В этом случае совокупность рациональных чисел представима в виде совокупности
/
{ /
:
( , ) 1
}
m n
m n



НОД
, где каждое рациональное число представлено единственной несократимой дробью. Алгоритм Евклида, приведѐнный в примере 2.5, позволяет выделить из натурального словаря
/
(
)
B
Dc
натуральный словарь
( )
B
Dc
рациональных чисел. При таком выделении необходимо при развѐртывании словаря
/
(
)
B
Dc
в словарь
( )
B
Dc
отбирать только несократимые рациональные дроби. Таким образом, для языка рациональных чисел возможно построение его словаря.
б) В математике рациональноѐ число
/1
m

отождествляется с целым числом
m

. В частности, при таком отождествлении 0 /1 0
 
. Таким образом, справедливо высказывание

.►
Для непустого формального A -языка L
A


могут создаваться словари, не обязательно являющиеся натуральными. В этом случае для такого словаря, как правило, может использоваться обозначение
( )
L
Dc
или
( )
n
L
Dc
, где n

. Кроме того, для номера слова x L

в таком словаре будет использоваться символ
( )
( )
L
x
Dc
N
Пусть ,
k m

,
1
,...,
k
U
u
u

и
1
,...,
m
V
v
v

– два словаря формальных языков.
Введѐм два словаря
1
( )
L
Dc
и
2
( )
L
Dc
для формального языка
{
:
,
}
L U V
u
v u U v V
  


прямого произведения языков U и V . Для этого каждому слову
i
j
x
u
v
L


, где
1,...,
i
k

и
1,...,
j
m

, в словаре
1
( )
L
Dc
присвоим одномерный номер
1
( )
( )
(
1)
L
x
i
m
j
   
Dc
N
(2).
В словаре
2
( )
L
Dc
этому слову x
L

присвоим одномерный номер
2
( )
( )
(
1)
L
x
j
m i
   
Dc
N
(3).


14
Элементы теории автоматов и формальных языков В.А. Кутыркин, А.Ю. Бушуев
Если для слова
i
j
x
u
v
L


ввести символ
i
j
c , то вместо словарей
1
( )
L
Dc
и
2
( )
L
Dc
для перечисления без повторов слов языка L можно использовать представление языка L в виде матрицы
C
из
k
строк и m столбцов:
1 1
1 1
(
)
m
i k
m
j
k
k
m
c
c
C
c
c
c












,
(4) где для так называемых немых индексов i и j указаны их пробеги (
1,...,
i
k

и
1,...,
j
m

) и ( , )
i j – двумерный номер слова
i
j
x
u
v
L


, согласно матрице
C
. В этом случае формула (2) отражает перечисление одномерных номеров компонент матрицы (4) по строкам, когда после последней компоненты строки матрицы счѐт продолжается с начальной компоненты следующей строки, если таковая имеется. Формула (3) отражает аналогичный счѐт одномерных номеров компонент матрицы (4) по столбцам.
Формула (2) может использоваться и в том случае, когда, как и ранее, словарь
1
,...,
k
U
u
u

конечен, но словарь
:
j
V
v
j


бесконечен. Аналогично, формула (3) может использоваться, когда словарь
:
i
U
u i


бесконечен, но словарь
1
,...,
m
V
v
v

конечен.
Упражнение 2.7. Пусть задан номер
1
( )
(
)
L
n
u
v

Dc
N
(
2
( )
(
)
L
n
u
v

Dc
N
) неизвестного слова
u
v
L

в словаре
1
( )
L
Dc
(
2
( )
L
Dc
) формального языка
L
U V
 
Предполагается, что этот номер вычислен согласно формуле (2) ((3)). Также предполагается, что словари
1
,...,
k
U
u
u

и
:
j
V
v
j


(
:
i
U
u i


и
1
,...,
m
V
v
v

) заданы. Требуется написать алгоритм для вычисления номеров слов u и v в словарях
U
и
V
, соответственно.►
Пусть
:
n
X
x
n


– словарь для непустого формального языка X
A


Рассмотрим формальный язык
2
: ,
i
j
L
X
X
X
x
x
i j

 



. Если для ,i j

вести обозначения
i
i
j
j
x
x
c

, то для перечисления без повторов слов языка L можно использовать представление языка L в виде матрицы
C
из бесконечного числа строк и столбцов: