Опубликован: 09.07.2007 | Уровень: профессионал | Доступ: свободно | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 15:

Алгоритмические проблемы

< Лекция 14 || Лекция 15: 12345 || Лекция 16 >

14.3. Массовые задачи

Определение 14.3.1. Массовой задачей (problem) называется бесконечная серия "однотипных" индивидуальных задач (instance), каждая из которых имеет определенный ответ. С каждой массовой задачей связана некоторая фиксированная схема кодирования (encoding scheme), которая отображает индивидуальные задачи в их коды - слова в некотором фиксированном алфавите. При этом требуется, чтобы множество кодов всех индивидуальных задач было разрешимым.

Определение 14.3.2. Задачей распознавания (decision problem) называется массовая задача, в которой ответами индивидуальных задач могут быть только "да" и "нет" (то есть существует только два возможных ответа).

Пример 14.3.3. Зафиксируем некоторый алфавит \Sigma . Рассмотрим следующие однотипные индивидуальные задачи: даны два слова x \in \Sigma ^* и y \in \Sigma ^* , необходимо выяснить, является ли слово x подсловом слова y.

Пусть # - новый символ, не принадлежащий алфавиту \Sigma . Кодом индивидуальной задачи про конкретные слова x и y будем считать слово x#y в алфавите \Sigma \cup \{ \# \} .

Эта массовая задача является задачей распознавания.

Определение 14.3.4. Алгоритмическая проблема - проблема, в которой требуется найти алгоритм для решения массовой задачи. Если такой алгоритм существует, то данная проблема называется алгоритмически разрешимой или просто разрешимой (decidable, solvable), в противном случае ее называют алгоритмически неразрешимой (undecidable, unsolvable).

Замечание 14.3.5. Алгоритмическая проблема, относящаяся к некоторой задаче распознавания, алгоритмически разрешима тогда и только тогда, когда разрешимо множество кодов индивидуальных задач с ответом "да".

Пример 14.3.6. Рассмотрим массовую задачу из примера 14.3.3. Соответствующая алгоритмическая проблема разрешима, так как разрешим язык \{ x \# u x v \mid x \in \Sigma ^* ,\ u \in \Sigma ^* \commaand v \in \Sigma ^* \} .

Пример 14.3.7. Зафиксируем некоторый алфавит \Sigma . Рассмотрим следующие однотипные индивидуальные задачи: дана порождающая грамматика

G = \lalg \{ A_1 , \ldots , A_n \} , \Sigma , P , A_1 \ralg ,
необходимо выяснить, является ли эта грамматика праволинейной.

Для полной строгости необходимо договориться, как кодировать грамматику G в виде слова. Например, можно использовать алфавит \Sigma \cup \{ \heartsuit , \spadesuit , 0 , 1 \} , где \heartsuit $, $ \spadesuit $, $ 0 $, $ 1 - дополнительные символы, не принадлежащие множеству \Sigma . Вспомогательный символ Ai заменим на слово, состоящее из символа \heartsuit и кода числа i в двоичной системе счисления. В каждом правиле \alpha \tto \beta добавим символ \spadesuit на месте \to и после слова \beta . Кодом грамматики G будем считать результат конкатенации кодов всех правил из множества P. Например, грамматика

\begin{align*}
 A_1 \; & {\to} \; a , \\
 A_1 \; & {\to} \; A_2 A_1 , \\
 A_2 \; & {\to} \; a A_3 , \\
 A_3 \; & {\to} \; \varepsilon , \\
 A_3 \; & {\to} \; b A_1 
\end{align*}
(над алфавитом \Sigma = \{ a , b \} ) кодируется словом
\heartsuit 1 \spadesuit
 a \spadesuit
 \heartsuit 1 \spadesuit
 \heartsuit 1 0 \heartsuit 1 \spadesuit
 \heartsuit 1 0 \spadesuit
 a \heartsuit 1 1 \spadesuit
 \heartsuit 1 1 \spadesuit
 \spadesuit
 \heartsuit 1 1 \spadesuit
 b \heartsuit 1 \spadesuit .

Легко понять, что соответствующая алгоритмическая проблема (проблема проверки праволинейности) разрешима.

Упражнение 14.3.8. Разрешима ли алгоритмическая проблема распознавания четности длины слова над алфавитом {a,b}?

14.4*. Грамматики типа 0

Теорема 14.4.1. Класс языков, порождаемых грамматиками типа 0, совпадает с классом перечислимых языков.

Доказательство можно найти, например, в [СерГал с. 24-26].

Упражнение 14.4.2. Выводимо ли слово aab в грамматике

\begin{align*}
 S \; & {\to} \; S b , & T a \; & {\to} \; a a T , \\
 S \; & {\to} \; S T , & T b \; & {\to} \; a b , \\
 S \; & {\to} \; S U , & U a a a \; & {\to} \; a a U , \\
 S \; & {\to} \; \varepsilon , & U a b \; & {\to} \; b ?
\end{align*}

Упражнение 14.4.3. Выводимо ли слово aaaaaaaab в грамматике

\begin{align*}
 S \; & {\to} \; S b , & T a \; & {\to} \; a a T , \\
 S \; & {\to} \; S T , & T b \; & {\to} \; a b , \\
 S \; & {\to} \; S U , & U a a a \; & {\to} \; a a U , \\
 S \; & {\to} \; \varepsilon , & U a b \; & {\to} \; b ?
\end{align*}

Замечание 14.4.4. Неизвестно, порождает ли грамматика

\begin{align*}
 R \; & {\to} \; Ra , & Ta \; & {\to} \; aaT , \\
 R \; & {\to} \; S , & Tb \; & {\to} \; ab , \\
 S \; & {\to} \; Sb , & Uaaa \; & {\to} \; aaU , \\
 S \; & {\to} \; ST , & Uab \; & {\to} \; b \\
 S \; & {\to} \; SU , \\
 S \; & {\to} \; \varepsilon , 
\end{align*}
все слова в алфавите {a,b}.

Упражнение 14.4.5. Пусть \Sigma = \{ a , b , c , d , e \} . Рассмотрим грамматику

\begin{align*}
 R \; & {\to} \; ccdcdcddccddcdccca , & ce \; & {\to} \; eca , \\
 ac \; & {\to} \; ca , & eca \; & {\to} \; ce , \\
 ca \; & {\to} \; ac , & de \; & {\to} \; edb , \\
 bc \; & {\to} \; cb , & edb \; & {\to} \; de , \\
 cb \; & {\to} \; bc , & cca \; & {\to} \; ccae , \\
 ad \; & {\to} \; da , & ccae \; & {\to} \; cca . \\
 da \; & {\to} \; ad , \\
 bd \; & {\to} \; db , \\
 db \; & {\to} \; bd ,
\end{align*}
Выводимо ли в ней слово ccdcdcddccddcdcccabba?

Упражнение 14.4.6. Является ли разрешимым язык, порождаемый грамматикой

\begin{align*}
 S \; & {\to} \; c S , & ac \; & {\to} \; ca , & cdc \; & {\to} \; cdc R , \\
 S \; & {\to} \; d S , & ca \; & {\to} \; ac , & R cca \; & {\to} \; cc R , \\
 S \; & {\to} \; aa  , & bc \; & {\to} \; cb , & R ddb \; & {\to} \; dd R , \\
      &                & cb \; & {\to} \; bc , & R cdd \; & {\to} \; cdd T , \\
      &                & ad \; & {\to} \; da , & T cc \; & {\to} \; cca T , \\
      &                & da \; & {\to} \; ad , & T dd \; & {\to} \; ddb T , \\
      &                & bd \; & {\to} \; db , & T cdc \; & {\to} \; cdc ? \\
      &                & db \; & {\to} \; bd ,
\end{align*}

Определение 14.4.7. Порождающая грамматика в нормальной форме - это порождающая грамматика, в которой каждое правило имеет вид A \to a , A \to B C или A B \to \varepsilon , где A \in N , B \in N , C \in N , a \in \Sigma .

Теорема 14.4.8. Каждая порождающая грамматика эквивалентна некоторой порождающей грамматике в нормальной форме.

Упражнение 14.4.9. Существует ли такая порождающая грамматика G, что язык L(G) \sminus \{ \varepsilon \} не порождается ни одной грамматикой типа 0?

< Лекция 14 || Лекция 15: 12345 || Лекция 16 >
Юлия Маковецкая
Юлия Маковецкая

Упражнение 2.1.25

Евгения Гунченко
Евгения Гунченко

Сдавала тест экстерном, результат получен 74 после принятия данного результата и соответственно оплаты курса, будет ли выдано удостоверение о повышении квалификации?

Виктор Мерзляков
Виктор Мерзляков
Россия, Краснодар, Кубгту
Дмитрий Заболотнов
Дмитрий Заболотнов
Россия, Краснодар