УДК 510.5
А.В. Пруцков РЕШЕНИЕ ЗАДАЧ ОБРАЩЕНИЯ И УДВОЕНИЯ С ПОМОЩЬЮ ЛИНЕЙНЫХ НОРМАЛЬНЫХ АЛГОРИТМОВ
Линейные нормальные алгоритмы являются модификацией нормальных алгоритмов Маркова и отличаются от них возможностью реализации линейного вычислительного процесса. Цель данной статьи состоит в решении классических задач теории нормальных алгоритмов Маркова - задач обращения и удвоения с линейной трудоемкостью. Для достижения данной цели необходимо разработать линейные нормальные алгоритмы решения этих задач. В статье показано, что даже при наложении ограничений предложенные алгоритмы остаются линейными по трудоемкости. Также разработаны линейные нормальные алгоритмы сравнения слов и сведения нормальных алгоритмов Маркова к линейным нормальным алгоритмам на основе алгоритмов обращения и удвоения.
Нормальные алгоритмы Маркова; линейные нормальные алгоритмы; обращающий и .
A.V. Prutzkow THE SOLUTION OF TASKS OF INVERSION AND DUPLICATION BY LINEAR NORMAL ALGORYTHMES
Linear normal algorythmes is a modification of Markov’s normal algorythmes. and differ from it by possibility of linear computing process realization. The aim of this article is solving of classic tasks of the theory of Markov's normal algorythmes for linear time. It’s necessary to develop linear normal algorythmes of solution of classic tasks of Markov's normal algorythmes for achieving this aim. In this article it demonstrates algorythmes are still linear even when limitation imposition. It offers linear normal algorythmes of words comparing and Markov's normal algorythmes to linear normal algorythmes adduction.
Markov’s normal algorythmes; linear normal algorythmes; inversion and duplication algorythmes.
Введение. Нормальные алгоритмы Марков а являются одной из алгоритмических моделей. В теории нормальных алгоритмов Маркова существуют две классические задачи - задачи обращения и удвоения, которые являются линейными. Однако предложенные А.А. Марковым и НМ. Нагорным нормальные алгоритмы решения этих задач имеют квадратичную трудоемкость [1]. Работы других авторов [2-3] также не предлагают линейного решения. Автором статьи была предложена модификация нормальных алгоритмов Маркова, названная линейными нормальными алгоритмами [4].
Цель данной статьи заключается в том, чтобы показать, что даже при введении ограничений возможна разработка линейных нормальных алгоритмов решения задач обращения и удвоения с линейной трудоемкостью, а также разработка алгоритмов решения более сложных задач на основе предложенных алгоритмов.
Схема линейного нормального алгоритма состоит из строк, каждая из которых снабжена меткой (левая часть строки до двоеточия), после которой следуют подстановки. Процесс применения линейного нормального алгоритма к строке S заключается в следующем. Схема просматривается сверху вниз, начиная с первой строки. Если метка является подстрокой строки S, то происходит применение подстановок, соответствующих данной метке. Каждая подстановка применяется один раз. После этого схема просматривается вновь, начиная с первой строки. Как и в нормальных алгоритмах Маркова, подстановка заключается в замене в строке S первого вхождения слева подстроки из левой части подстановки на подстроку из правой части подстановки.
Известия ЮФУ. Технические науки
Подстановки строки, помеченной пустым символом 0, выполняются для любой строки Б.
Алгоритм заканчивает выполнение в трех случаях: 1) ни одна метка Р не встречается в строке Б; 2) левая часть подстановки, которая соответствует метке, не встречается в строке Б; 3) выполнена заключительная подстановка, т.е. подстановка, заканчивающаяся символом «•».
:
0 - пустой символ;
Ъь Ъ2, Ъ - буквы алфавита Ъ;
т - длина обрабатываемой строки;
—* X+ - добавление символа X к началу строки;
—* +Х - добавление символа X к концу строки;
- .
. -
лов строки в обратном порядке. Например, «аЬс» - «сЬа».
Запишем схему линейного нормального алгоритма обращения А с использованием одного вспомогательного символа. Схема состоит из следующих подстановок:
1) Ъ;Л: ЪХ ->■ X; ->■ +Ъ 1 = 1, 2, ., п;
2) X: X ->■ 0 •;
3) 0: ->■ +X.
Указатель X устанавливается в конец строки (подстановка 3). Каждый символ
строки, который находится слева от указателя X, удаляется, а затем добавляется в
( 1). , указателем X и появляются справа от него в обратном порядке. Условием окончания работы алгоритма является отсутствие символов слева от указателя X (подстановка 2). При выполнении данного условия указатель X удаляется из строки.
Пример 1. Рассмотрим работу линейного нормального алгоритма обращения 123 .
0. 123
1. 3) 0: ->■ +Х 123А
2-3. 1) 3Х: 3Х ->■ X: +3 12X3
4-5. 1) 2Х: 2Х ->■ X: +2 1X32
6-7. 1) 1Х: 1Х ->■ X: , -> +1 X321
8. 2) X: X ->■ 0 • 321
На последнем шаге алгоритма получена строка 321 - обращение строки 123. □ Операция установки символа X в конец строки —» +X
отсутствует в теории нормальных алгоритмов Маркова и является частью предлагаемой модификации. Составим линейный нормальный алгоритм обращения, который не использует операцию установки символа в конец строки.
Линейный нормальный алгоритм обращения Б, удовлетворяющий данному , :
1) 7Х: 7.x ->■ X; у ->■ 7;у; і = 1, 2, ..., п
2) X: X ->■ 0; у ->■ 0 •
3) у^: у7; ->■ 7;у; і = 1, 2, ..., п
4) у: у —► Ху
5) 0: у+
Алгоритм обращения Б устанавливает указатель у в начало строки (подстановка 5). Указатель у двигается вправо по строке (подстановка 4). Как только указатель у достигает конца строки, к нему добавляется указатель X (подстановка 4). Далее алгоритм перемещает символы перед указателем X в конец строки, обозна-у ( 1). , -
горитм завершает работу, удаляя указатели X и у (подстановка 2).
Пример 2. Рассмотрим работу линейного нормального алгоритма обращения 123 .
0. 123
1. 5) 0: у+ у123
2. 3) у1: у1 —► 1у 1у23
3. 3) у2: у2 —► 2у 12у3
4. 3) у3: у3 —> 3у 123у
5. 4) у: у —* Ху 123Ху
6-7. 1) 3Х: 3Х ->■ X; у ->■ 3у 12Х3у
8-9. 1) 2Х: 2Х ->■ X; у ->■ 2у 1Х32у
10-11. 1) 1Х: 1Х —> X; у —► 1у Х321у
12-13. 2) X: X ->■ 0; у ->■ 0 • 321
В результате работы алгоритма получена строка 321, которая является обращением строки 123. □
Для решения задачи обращения использовался второй вспомогательный симу, . у,
приемом, предложенным в работе [1], и заменим символ у удвоенным символом XX. Линейный нормальный алгоритм обращения В, использующий один вспомо-, :
1) XXX: XXX —» 0 •
2) 7ХХ: 7іХХ —» XX; X —» 7іХ; і = 1, 2, ..., п
3) Х7 Х7і ->■ 7іХ; і = 1, 2, ..., п
4) X: X —» XX; —» Х+
5) 0: —^ Х+
Работа алгоритма обращения В начинается с установки указателя X в начало строки (подстановка 5). Указатель X двигается вправо по строке (подстановка 3) и, достигнув ее конца, добавляет один символ X в коне ц строки, а второй символ
X - в начало строки (подстановка 4). Указатель X в начале строки обозначает начало обращаемой строки. Удвоенный указатель XX в конце строки двигается влево, удаляя символ перед собой; удаляемый символ добавляется перед указателем X (подстановка 2). Достижение указателем XX указателя X означает, что обращение , ( 1).
Пример 3. Рассмотрим работу линейного нормального алгоритма обращения 123 .
G. І23
І. 5) 0: ->■ А+ А123
2. 3) А1: А1 ->■ 1А 1А23
3. 3) А2: А2 2А 12 АЗ
4. 3) АЗ: АЗ ->■ ЗА 123 А
5-6. 4) А: А —» АА; —» А+ А123АА
7-S. 2) ЗАА: ЗАА ->■ АА; А ->■ ЗА 3А12АА
9-1G. 2) 2АА: 2АА ->■ АА; А ->■ 2А 32А1АА
ІІ-І2. 2) 1АА: 1АА —* АА; А —»1А 321ААА
І3. 1) ААА: ААА ->■ 0 • 32І
В результате работы алгоритма получено обращение строки 123. □
Все разработанные алгоритмы обращения имеют линейную трудоемкость ( . ).
Алгоритмы обращения Трудоемкость Количество подстановок алгоритма
Алгоритм обращения А 2m + 2 2n + 2
Алгоритмы обращения Б и В 3m + 4 3n + 4
Алгоритм обращения АА. Маркова и НМ. Нагорного [1] m2/2 + 5m/2 + 1 n2 + n + 4
Используем алгоритмы обращения для решения задачи сравнения двух слов x и у в строке S, разделенных символом 0. При этом потребуем, чтобы в случае равенства слов была результирующая строка 'равны', а в случае неравенства - 'не равны':
f'равны', x=у,
f(x,y)=, • Ф
[не равны, xФу.
Алгоритм сравнения слов работает следующим образом. Пусть строка содержит два слова baa и baa, разделенных символом 0: baaObaa.
Обратим первое слово: aab0baa.
Если символы слева и справа от символа 0 одинаковые, то алгоритм удаляет их из строки. Если символы слева и справа от символа 0 различны, то и слова раз.
Линейный нормальный алгоритм сравнения слов включает следующие подстановки:
1) А^: А2і —* А; —*2;+; і = 1, 2, .. .., п
2) А0: А0 —» ф0
3) 7;ф07;: 7;ф07; —► ф0; і = 1, 2, .. .., п
4) ф0^: ф02; —► 0; —► у+; і = 1, 2, .. , п
5) 7;ф0: 2;ф0 —► 0; —► у+; і = 1, 2, .. , п
6) ф0: ф0 —* 'равны' •
7) у^: Уу; і = 1, 2, .. , п
8) у: у —> 'не равны' •
9) 0: А+
Алгоритм состоит из двух этапов. На первом этапе обращается первое слово в строке (подстановки 1, 2 и 9). За основу взят алгоритм обращения А. На втором этапе одинаковые символы слева и справа от нуля в случае их равенства удаляются из строки (подстановка 3). Если слова равны между собой, то результатом работы алгоритма будет строка 'равны' (подстановка 6). Если слова не равны друг другу, то при сравнении символов возможны 3 случая: 1) сравниваемые символы не равны; 2) первое слово закончилось, а второе слово - нет; 3) второе слово закончилось, а первое слово - нет. Первый и второй случаи обрабатываются подстановкой 4, а третий - подстановкой 5. Однако во всех трех случаях все оставшиеся символы слов удаляются (подстановка 7), а результатом работы будет строка 'не равны' (подстановка 8).
Трудоемкость данного алгоритма сравнения слов ТСр вычисляется по формуле ТСр = 3п1 + П2 - к + Б§(П1 + П2 - 2к) + 3, где п1 - длина первого слова, п2 - длина второго слова; к - количество одинаковых символов с начала слов подряд; 2п1 + 2 - трудоемкость обращения первого слова; в§(х) - функция сигнум [3]:
[0,х=0,
8§(Х)= ! л
[1,х >0.
В случае неравенства слов выполняется на одну подстановку больше (под-4-5), .
помощью функции сигнум Б§(х). В случае равенства слов слагаемые (п2 - к) и б§(п1 + п2 - 2к) равны нулю.
. -ва или справа от строки ее копии. Например, «аЬе» - «аЬсаЬс».
Схема линейного нормального алгоритма А решения задачи удвоения строки алфавита Ъ = {а, Ь} будет состоять из следующих подстановок:
1) аа: аа —► аа; Р —> аР
2) аЬ: аЬ —> Ьа; Р —► ЬР
3) а: а ->■ 0; Р ->■ 0 •
4) 0: —► Ра+
В конец строки добавляются указатели a и P (подстановка 4). Работа алгоритма заключается в перемещении указателя a влево и добавлении (копировании) символа перед указателем a в конец строки, обозначенный указателем P (подстановки 1-2). После того как указатель a достигнет начала строки, алгоритм заканчивает свое выполнение (подстановка З).
4.
baa .
0. baa
1. + a P : Q 4) Pabaa
2-З. 2) ab: ab ba; P bP bPbaaa
4-5. 1) aa: aa —* aa; P —* aP baPbaaa
6-7. 1) aa: aa —* aa; P —* aP baaPbaaa
В-9. З) a: a 0; P 0 • baabaa
На девятом шаге алгоритма получена удвоенная строка baabaa. □
Построим линейный нормальный алгоритм удвоения с одним вспомогательным символом. Для этого воспользуемся тем же приемом замены символа Р на удвоенный символ aa.
Схема линейного нормального алгоритма удвоения Б будет включать следующие подстановки:
1) aaa: aaa —* aaa; a —* aa
2) aab: aab —* baa; a —* ba
3) a: a —* 0; aa —* 0 •
4) 0: —* aaa+
Пример 5. Рассмотрим работу линейного нормального алгоритма удвоения Б baa .
0. baa
1. 4) 0: —* aaa+ aaabaa
2-З. 2) aab: aab —* baa; a —* ba babaaaa
4-5. 1) aaa: aaa —* aaa; a —* aa baabaaaa
6-7. 1) aaa: aaa —* aaa; a —* aa baaabaaaa
В-9. З) a: a 0; aa 0 • baabaa
В результате работы алгоритма получена строка ЬааЬаа. □
Разработанные алгоритмы А и Б решают задачу удвоения с линейной трудоемкостью 2т + 3, тогда как нормальный алгоритм Маркова и Нагорного решает задачу удвоения с квадратичной трудоемкостью т2/2 + 5т/2 + 2.
На основе линейного нормального алгоритма удвоения опишем линейный нормальный алгоритм сведения нормального алгоритма Маркова к линейному .
алгоритма Маркова в схему линейного нормального алгоритма, используя правила сведения алгоритмов, изложенные в работе [4].
Алгоритм сведения использует в качестве входных и выходных данных нор, .
Для записи нормальной схемы в виде строки подстановки записываются последовательно. Также используются следующие обозначения:
# - признак конца подстановки;
| - разделитель левой и правой частей подстановки (—>); х - признак завершения алгоритма (•);
Л - пустой символ (0);
© - признак добавления символа к строке слева или справа (+);
| - разделитель метки и подстановки в линейных нормальных алгоритмах (:).
Пусть множество Н = {Н1, Н2, ..., Нк} - множество символов, использующихся в левых и правых частях подстановок сводимого нормального алгоритма, множество О = {#, |, х, ©, |} - множество элементов подстановок, а множество I = {е, ф} - множество вспомогательных символов алгоритма сведения. При этом множество Н не имеет общих элементов с множествами О и I:
Н п в = 0 и Н п I = 0,
Ъ Н:
Ъ с Н.
Пример 6. Запишем в виде строки линейный нормальный алгоритм, который перемещает первый символ в конец строки и содержит следующие подстановки.
1) аЪ;Ъ| —► Ъ|ОЪ;; 1, j = 1, 2, ., п
2) аЪ1 —* Ъ1 •
3) —> а+
Схема алгоритма в виде строки будет иметь следующий вид: аЪЪ] | Ъ оЪ1# аЪ^Ъ1х^ а©#.
Сведем данный нормальный алгоритм к линейному нормальному алгоритму
1) аЪЪ ОЪЪ] —► ^аЪ^; 1, j = 1, 2, ..., п
2) аЪ1: аЪ1 —> Ъ1 •
3) 0: ->■ а+
и запишем полученную схему в виде строки ОЪЪ] | аЪЪ | Zj аЪ1#аЪ11 аЪ^Ъ1х#Л 11 а©#. □
Задачей алгоритма сведения будет удвоение левой части каждой подстановки. Алгоритм сведения нормального алгоритма Маркова к линейному нормальному алгоритму включает следующие подстановки:
1 = 1, 2, ..., к
1) Н1е: Н^е ->■ еН- | ->■ |Н1;
2) #е: #е —> ф#
3) е|: е| — Л| •
4) е: е ->■ 0 •
5) Н1ф: Н1ф фН1;
6) хф: хф фх
7) ©ф: ©ф ф©
8) #Т ф: #| ф —► ф#Л||
9) ф: ТФ -> е||
10) 0: +е
1 = 1, 2, ..., к
В алгоритме используются 2 вспомогательных указателя: е и ф. Указатель е удваивает левые части подстановок (подстановки 1-2). Указатель ф обрабатывает правые части подстановок (подстановки 5-7). Подстановка 8 обрабатывает подстановки с пустой левой частью. При переходе из правой части подстановки в левую часть (подстановка 9) и при переходе между подстановками (подстановка 2) указатели чередуются. Алгоритм начинает работу с установки указателя е в конец строки (подстановка 10) и заканчивает работу, когда этот указатель достигнет начала строки (подстановки 3-4).
Трудоемкость алгоритма сведения ТСвед вычисляется по следующей формуле: ТСвед = 2L + R + 2K - P + 2, где L - количество символов в левой части подстановки (до стрелки); R - количество символов в правой части подстановки (после стрелки); K - количество под; 2K - -
новки #; P - количество подстановок с пустой левой частью (кроме первой) (подстановка 8); + 2 - установка и удаление указателей (подстановки 3-4 и 10).
. , -нейные нормальные алгоритмы решают задачи обращения и удвоения с линейной .
На основе алгоритмов обращения и удвоения разработаны линейные нормальные алгоритмы сравнения слов и сведения алгоритмов, оценена их трудоемкость.
Предложенная модификация линейных нормальных алгоритмов может использоваться для описания алгоритмов и обучения основам теории алгоритмов.
, -ритмы преобразований числительных [4].
Для изучения нормальных алгоритмов Маркова и линейных нормальных алгоритмов в рамках курса «Математическая логика и теория алгоритмов» разработана программная система проверки знаний, позволяющая динамически генерировать задания обучаемым.
Направлением дальнейшей модернизации нормальных алгоритмов Маркова является замена подстановки другими операциями.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Марков А.А., Нагорный Н.М. Теория алгорифмов. - М.: Наука, 1984. - 432 с.
2. Нагорный H.M. Некоторые обобщения понятия нормального алгорифма // Тр. матем. инта АН СССР им. В А. Стеклова, 52. - M.-J1.: Изд-во АН СССР, 1958. - С. 66-74.
3. . . -
//
систем: Межвуз. сб. науч. тр. / Под ред. А.Н. Пылькина. - М.: Горячая линия-Телеком, 2008. - . 4-9.
4. . . // -
онные технологии в процессе подготовки современного специалиста: Межвуз. сб. статей. - Липецк, 2010. - Вып. 13. - С. 166-174.
5. Кузнецов О.П., Адельсон-Вельский ГМ. Дискретная математика для инженера. - М.: Энергоатомиздат, 1988. - 480 с.
6. . .
//
радиотехнического университета. - Рязань, 2009. - Вып. 28. - С. 49-55.
Статью рекомендовал к опубликованию д.т.н., профессор В.Н. Ручкин.
Пруцков Александр Викторович - ГОУ ВПО «Рязанский государственный радиотехнический университет»; e-mail: [email protected]; 390005, г. Рязань, ул. Гагарина, 59/1; тел.: +79106326176; к.т.н.; доцент.
Prutzkow Alexander Viktorovich - The Ryazan State Radio Engineering University; e-mail: [email protected]; 59/1, Gagarin street, Ryazan, 390005, Russia; phone: +79106326176; cand. of tng. sc.; associate professor.