Грамматико-алгоритмические структурные модели метаалгоритмов

ОБЧИСЛЮВАЛЬНІ СИСТЕМИ

УДК 519.712.1:510.51:004.42.001: 004:512

В.И. ШИНКАРЕНКО, В.М. ИЛЬМАН, Г.Г. КРОЛЬ

ГРАММАТИКО-АЛГОРИТМИЧЕСКИЕ СТРУКТУРНЫЕ МОДЕЛИ МЕТААЛГОРИТМОВ

Abstract. The formalism of grammatical-algorithmic structures is developed on a basis of such formalisms as grammatical and algorithmic structures. Such formal structures use possibilities of structural representation of algorithms in the form of sequence of the forming algorithms connected by operations of a composition and conditional performance. Means of grammatical structures allow to separate a subset of algorithms for the decision of one or several problems from all set of algorithms which can be constructed within the algorithmic structure. Concept of metaalgorithm formalized by grammatical-algorithmic structures. Some possibilities of grammatical-algorithmic structures are shown on an example of modeling the metaalgorithm for sorting.

Key words: grammatical, algorithmic, grammatical-algorithmic structure, terminal, nonterminal, algorithm, metaalgorithm, abstract operator, sorting.

Анотація. На основі формалізмів граматичних та алгоритмічних структур розроблено формалізм граматично-алгоритмічних структур. Такі формальні структури використовують можливості структурного представлення алгоритмів у вигляді послідовності утворюючих алгоритмів, пов’язаних операціями композиції та умовного виконання. Засоби граматичних структур дозволяють виокремити із множини алгоритмів, які можуть бути побудовані у рамках алгоритмічної структури, ті, що призначені для рішення однієї або декількох задач. Засобами граматично-алгоритмічних структур формалізоване поняття метаалгоритму. Деякі можливості граматично-алгоритмічних структур показані на прикладі моделювання метаалгоритму сортування.

Ключові слова: граматична, алгоритмічна, граматико-алгоритмічна структура, термінал, нетермінал, алгоритм, метаалгоритм, абстрактний оператор, сортування.

Аннотация. На основе формализмов грамматических и алгоритмических структур разработан формализм грамматико-алгоритмических структур. Такие формальные структуры используют возможности структурного представления алгоритмов в виде последовательности образующих алгоритмов, связанных операциями композиции и условного выполнения. Средства грамматических структур позволяют выделить из всего множества алгоритмов, которые можно построить в рамках алгоритмической структуры, подмножество алгоритмов для решения одной или нескольких задач. Средствами грамматико-алгоритмических структур формализуется понятие метаалгоритма. Некоторые возможности грамматико-алгоритмических структур показаны на примере моделирования метаалгоритма сортировки.

Ключевые слова: грамматическая, алгоритмическая, грамматико-алгоритмическая структура,

терминал, нетерминал, алгоритм, метаалгоритм, абстрактный оператор, сортировка.

1. Введение

Под метаалгоритмом [1] будем понимать некоторый обобщенный алгоритм решения задачи, на основе которого могут быть построены конкретные алгоритмы. Термин согласуется с установившимся в объектно-ориентированном программировании понятием метакласса как абстрактного класса, на основе которого строятся конкретные классы [2].

В [1] представлена методика структурной адаптации алгоритмов и дан пример такой адаптации для алгоритмов сортировки. Показано, каким образом алгоритм может быть перестроен в процессе эксплуатации.

Одним из ключевых составляющих системы адаптации является метаалгоритм. В приведенном примере метаалгоритм сортировки включает возможности основных методов сортировки по Д. Кнуту [3, 4], а также маятниковых методов сортировки [5].

З

Предложены метод разработки метаалгоритма и способ его представления. На основе метаалгоритма может быть построено бесконечное количество конкретных алгоритмов с различными комбинациями заложенных в метаалгоритм методов.

Для изучения возможностей преобразования метаалгоритмов, улучшения их качества: читабельности, функциональности и др. - необходимо иметь формальные способы их представления.

В [6, 7] подобная задача решается алгебро-алгоритмическими средствами. Особенностью предлагаемой методологии является то, что алгоритмические конструкции средствами алгоритмических структур моделируются на основе первичных алгоритмов, в то время как классическим является алгоритмический подход к моделированию алгоритмов [8] или же алгоритмический подход к моделированию алгебраических конструкций [9].

В данной работе предлагается формализация метаалгоритмов средствами грамматикоалгоритмических структур.

Такой формализм построен на основе предложенных ранее грамматических [10] и алгоритмических [11] структур. Средствами алгоритмических структур задается бесконечное множество алгоритмов, конструируемых на основе образующих (первичных) алгоритмов. Средства грамматических структур позволяют выделить подмножество алгоритмов решения некоторой задачи (может, и бесконечное).

В работе последовательно определены основные понятия грамматических и алгоритмических структур, даны определение грамматико-алгоритмических структур и пример представления метаалгоритма сортировки средствами грамматико-алгоритмических структур.

2. Формальные грамматические структуры

Формальная структура задается упорядоченной тройкой с основным множеством (носителем) М, сигнатурой X и аксиоматикой Л [10]:

С =

Структура (1) не является универсальной, так как применение операций сигнатуры X к элементам из множества М в соответствии с аксиоматикой Л не предполагает принадлежности результата множеству М. К тому же, результат выполнения операций сигнатуры X может качественно отличаться от элементов множества М .

Определение 1. Формальной грамматической структурой (ФГС) назовем совокупность трех составляющих (множеств):

Со =

где Мо - носитель структуры, сигнатура Xо = {2,{2},^2} состоит из имен операций связывания "г.", подстановки и отношения " ", представленного в виде правила вывода (продукций), Ло - конструктивная аксиоматика, которая включает множество аксиом 1 - 6 и определений 2 - 4.

Аксиома 1 (о носителе грамматической структуры). Носитель грамматической структуры включает множества А - терминальных и В - нетерминальных символов:

М = (А и В), А = {аг}, г = 0...I, В = {а.}, . = 1...3, а0 = е, "а,Ь е А | В, а Ф Ь. Аксиома 2 (о свободном языке). Свободный язык включает все возможные цепочки, полученные в результате операций связывания "." элементов носителя:

Ь = {/г } : /г =е\ /г = /.  ак \ /г = /.  Ьк , ак е A, Ьк е B, /. е Ь .

В большинстве грамматик применяется единственная операция связывания терминалов и нетерминалов в цепочки, поэтому при обозначении операции "" без индекса имеются в виду либо единственная, либо все операции из множества {2}.

Аксиома 3 (о пустом элементе). Операция "" обладает свойством поглощения пустого элемента:

"ае М а е = е а = а.

Аксиома 4 (правила вывода). Аксиоматика грамматической структуры должна содержать множество правил вывода Q = {/.  I.}, /1 е Ь* \{е}, /. е Ь*, множество пар (1г,/.), связанных

отношением " ", при этом 0 < |/г < к, 0 < |/. < к, к е N, где |/г - длина цепочки /1.

Определение 2. Результатом операции подстановки в цепочке /п /.  /т по правилу /.  /г будет цепочка /п  /.  /т .

Операндами двухместной операции подстановки являются цепочка и правило вывода.

Если в / : —3/.  /г : / = /п  /.  /т , то результатом операции подстановки по правилу

] I п ] т

(/.  /1) е Q будет исходная цепочка /.

Обозначим операцию подстановки /п  /1 /т = ^ (/п /.  /т,/.  /1) как

/  /  / ^ /  /  / .

п . т , , п г т

I.

Аксиома 5 (о сентенциальных формах [12]). Цепочка / = /п  /г  /т является

сентенциальной формой / е Г, если 3(/.  /1) е Q & 3/п  /.  /т е Г .

Аксиома 6 (о начальных символах). Для однозначного определения сентенциальных форм и формального языка необходимо задание начального символа о (в общем случае конечное

множество начальных символов и = {ог}), такого, что ое В &ое Г.

Определение 3. Формальным языком называется множество цепочек

Ь(С) = {/.} : (/. = ак | /г = /.  ак, ак е А) & (/. е Г); Ь(С) с Г с Ь.

Определение 4. Выводом цепочки /т языка Ь назовем последовательность

/0 ^ /х ^ ... ^ /т , если /0 е и & /т е Ь .

3. Формальные алгоритмические структуры

Как определено в [11], любой алгоритм А реализует следующее: для любого элемента х из множества определений X(А) алгоритм А за конечное число шагов выполнения находит некоторый элемент у из множества значений У (А). При этом для "у є У, $х є X такой, что, применив к нему алгоритм А, результатом будет у .

ІУЄУ У

Для обозначения алгоритмов применим следующую нотацию: А| или А|х. Здесь А -

идентификатор алгоритма, который отличает этот алгоритм от других и может быть представлен именем, адресом или выражением на естественном языке.

В процессе выполнения алгоритма, как правило, могут быть получены промежуточные результаты. Полный набор их идентификаторов обозначим q, а множество значений - Q(A).

Пусть набор (х, q, у ) составляет словарь алгоритма, тогда множество допустимых данных

алгоритма на этом словаре есть 2(А) с X(А)X У (А) X Q( А).

Определение 5. Алгоритмической структурой (АС) будем называть многоосновную структуру - расширение формальной структуры (1):

Са =

где V = {Аг0} - конечное множество образующих алгоритмов, заданное на

Ма с и(Х(А0)и У(А,")) - носителе, в общем случае - неоднородном множестве.

А0 єV

Сигнатура Ха включает операции композиции () алгоритмов и условного выполнения (":") (определения 6, 8). Сигнатура XА и аксиоматика ЛА алгоритмической структуры полностью определены в [11].

Особенностью формальной алгоритмической структуры (далее просто алгоритмической структуры) является то, что ее операции определены на множестве алгоритмов.

Множество всех возможных сконструированных на основе алгоритмический структуры алгоритмов, удовлетворяющих определению алгоритма [11], обозначим 0,(С). Естественно,

V с 0(С).

Множество V может включать множества базовых алгоритмов одного или нескольких исполнителей.

Определение 6. Операция композиции "•" определяет последовательное выполнение алгоритма А2 |Х22 непосредственно после А1 1^ . Результатом операции есть алгоритм

Определение 7. Алгоритм выбора A есть алгоритм с множеством определения X (A) = X1 U Х2 ••• U XN , (V/, j e[1..N], Xt П Xj = 0) и множеством значений

y (A)=q,q,..qN}, такой, что A |Q=qq2,-qN } =a |Q=q}.

В частных случаях алгоритмических структур множество значений алгоритма выбора может быть {0,1} или {true, false}.

В алгоритмических структурах множество V может включать несколько алгоритмов выбора, что обусловливается возможностями исполнителей.

Определение 8. Алгоритм условного выполнения с множеством определения

01 Х02,01 с 0, 02 = {q е 0} заключается в выполнении следующей за ним операции условного

выполнения A |0} 0 , которая и является значением алгоритма. Таким образом, некоммутативная операция условного выполнения “:” - A |0} 0 :BYX состоит в том, что, если 02 С0 , то алгоритм B |X должен выполняться, в противном случае - нет.

Определение 9. Пусть "©" произвольная операция сигнатуры S и алгоритм A |Xе W(CA) построен на основе операций S над образующими алгоритмами V. Последовательную запись образующих алгоритмов (A10 © A^ © — © AN)|X = A |X назовем структурой Str(A \ CA) алгоритма A |X в соответствующей алгоритмической структуре CA или его структурной моделью.

4. Формальные грамматико-алгоритмические структуры

В формальной грамматико-алгоритмической структуре (ФГАС) основу составляет грамматическая структура, дополненная алгоритмической.

Определение 10. Грамматико-алгоритмической структурой назовем тройку

CGA = C , CA ) =

где MGA = (MG,MA,VA) - неоднородный носитель, VA - множество образующих алгоритмов,

Sga = {2, S A ,^2} - сигнатура, LGA = LG UЛA ULdGA . ЛdGA включает аксиомы 7 - 9 и определение 10.

Аксиома 7 (о природе терминалов и нетерминалов). Терминалами ФГАС являются образующие алгоритмы ФГАС, нетерминалами - абстрактные алгоритмы.

Аксиома 8 (об операциях связывания). Операциями связывания терминалов и

нетерминалов в цепочку являются операции SA .

Цепочка в терминах грамматической структуры является структурой подалгоритма в терминах алгоритмической структуры.

Свойства операций из SA полностью приведены в [11]. Они являются неотъемлемой частью аксиоматики алгоритмической структуры.

Аксиома 9 (о природе формального языка). Формальный язык ФГАС представляет собой множество допустимых структур алгоритмов (&г (А \ сш)}.

Определение 10 (уточнение операции подстановки). При выполнении операции

подстановки по правилу  1 \г ап  \Х Рт ^ ап 1, \Х Рт выполняется

; ; ; ^1 и2 11 и ;

подстановка входных и выходных данных в замещающей абстрактный алгоритм цепочке. Здесь

в}- 1и - абстрактный алгоритм, ап,Л}-,Ьт - цепочки абстрактных и образующих алгоритмов.

Подстановка входных и выходных данных моделирует аппарат формальных и фактических параметров.

Если объектом моделирования алгоритмических структур являются любые алгоритмы, конструируемые из образующих алгоритмов с помощью операций из ХА, то в ФГАС множество алгоритмов ограничено правилами вывода. В терминах грамматик алгоритмическая структура моделирует свободный язык структур алгоритмов, а ФГАС - формальный.

Таким образом, ФГАС представляет собой средство для моделирования множества алгоритмов для решения некоторой задачи либо нескольких близких, а, может, даже разрозненных задач.

Наиболее простым применением ФГАС представляется моделирование бесконечного множества алгоритмов решения некоторой задачи. Далее приведена такая модель для решения задачи сортировки массива без дополнительной памяти и параллелизма.

5. Представление метаалгоритма сортировки средствами грамматико-алгоритмических структур

Основная идея построения различных алгоритмов сортировки в возможном рекурсивном разделении исходного массива на части (равные или нет, взаимно отсортированные или нет) с последующей сортировкой каждой части одним из известных методов. В [1] неформально множество возможных алгоритмов сортировки представлено в виде метаалгоритма. Разработана формальная модель алгоритмов сортировки с помощью конкретной грамматико-алгоритмической структуры.

Конкретизация ФГАС для алгоритмов сортировки заключается в конкретизации начального нетерминала и правил вывода:

СОА

где ЛОА(Ав) =ЛОА и ЛАв , ЛАв включает аксиому 10 и аксиомы - правила вывода (6) - (33).

Аксиома 10 (о конкретном начальном нетерминале). Начальный символ в1 аъы КФГАС

является нетерминалом грамматической структуры, абстрактным оператором алгоритмической структуры, где М - сортируемый массив, а,Ъ - номера начального и конечного элементов части массива, подлежащего сортировке, И - массив с последовательностью приращений для метода сортировки Шелла размерности I (И = (31, 15, 7, 3, 1) [3]).

Обозначим абстрактные алгоритмы £ \Х и Т \гх. £ \гх отражает технологическую

последовательность построения аксиоматики ЛА£ модифицированным методом пошаговой детализации [1]. Т\х - вспомогательные алгоритмы, упрощающие правила вывода.

Таблица 1. Терминальные алгоритмы КФГАС

Образующий алгоритм Описание Образующий алгоритм Описание

О <3 с := а + Ь А„ \ С,ь Г1, а = 1 & Ь = 1 [ о, а Ф1 \ Ь Ф 1

а2 \а,Ь с := а - Ь А12 \ С,Ь Г1, а Ф Ь [о, а = Ь

4\а с := а А \тйт} Т1 ,Т 2 Цикл пока К =П ТК" - А, \ к}: Т2 i=\

»о о <3 с := а Ь А \тт Цикл до к = Т2 ]П Т Е"’1 - А, \й: Т, i=1

а \а,ь 11, а > Ь [о, а < Ь А \{^^} \ а,Ь,Т Цикл со счетчиком кг =ПТ г=а

О <3 Г1, а < Ь [о, а > Ь Ь А Прерывание цикла ь К\ЯГ\Щ = {А1 •... • А-... • Ап} = ъ = {А •... • А}

а \а,ь Г1, а > Ь [о, а < Ь В> \а,Ь в1\:,ь ° а1\:,ь

а \и Г1, а < Ь [о, а > Ь В2 \а,Ь В2 \а,Ь ° А2 \ а,Ь

а \{:} а9 \ а,1 Если а = 1, то выполняется терминал, следующий за текущим Вз\а Вз\ а ° Аз \ а

а \с ^10 \а,Ь Г1, а = Ь [о, а Ф Ь Вл ^ %а =" а"&1пТо$1г

Г .

Образующие алгоритмы уровня языка программирования обозначим как А1 ... А12, А, А,

/ Ь Г ./ Ь

А, А , их семантика приведена в таблице. А - алгоритмы вычисления предикатов, А, А, А, А, А

- алгоритмы управления последовательностью вычислений. Обратим внимание, что вход алгоритмов есть алгоритмы, а выходом являются действия (а не данные), такая возможность заложена в алгоритмических структурах [11].

Пусть В1 ... В4 - алгоритмы, используемые для формирования имен переменных, означает, что в качестве имени переменной нужно взять значение переменной %д. Реализация

алгоритмов В1 ... В4 может быть различной. В частности, это могут быть алгоритмы, реализующие препроцессорные переменные, как в языке программирования ПЛ/1.

Рассмотрим аксиоматику Л ОА(А8) в части правил вывода в порядке их разработки.

Имеем 4 правила вывода (6), (9) - (11) с начальным нетерминалом.

Правила вывода для формирования структуры алгоритма пирамидальной сортировки:

V \м  А к •А \1 А \Г • А \{к.} •А \{к.}

°1 \м,а,Ь,к$ А4 Ь,2 а1 к ,1 Аз Ь А I А \а Т \‘,м,г А \А \а Т \м,г,‘-

19 а5 \ 1,1 ,Т 1 \ /,М,Г а5 \ г,1 ,Т 2\ М,г ,/

'Т' \1,М,г______. л й о М,/ ,г 'Т' М,г,/_. о М л |Г о |М,/ ,г

Т1 \ 1,М,г  А2 \ /,1 • «2 М,/ ,г , Т 2 М,г,/  £3 М,1,г ‘ А2 \г,1 • «2 \м,/ ,г ,

где г, /,1, 7, х, а, к е б(А) и

«2 М,;,Г Аз \; • А, \' -Аз \^ ) • Аз \Ь • А \к1 ТМ „ • Аз (Г,

Тз\7,г,Ь ,Т4\7,г,М,х,Ь,1

Тз\а,г,.  Аб 7 • А|0 \Ь;. • АДЛ,

Т4!;;Мг,М,х,Ь,, А, И А Ц'иА1 ^ А \ММ(,№й) -А, \»:(А1 !;,1)). А, Им,и) А \;,}1: (Аз \о)' А, ^^(Аз \М $ А Г, А О.

Абстрактный алгоритм перестановки элементов массива:

V \м  А \х • А \м

°з \м,1,Аз \м.

Правила вывода для формирования структуры алгоритма быстрой сортировки:

Г

V \м  А \’ • А \р(1)/ • А \р(1)г • А \{к}

°1 М,а,Ь,Н,г^ ^з 11 ^з 11 ^з 1ь л1;4 \а Т \р^,м’

’ ,о 5 5 I р ,. ,м

Г

Т \р^,м  а \1 • А \Г •А \’ • А \{кг}

5 I р,’,М ^з 1р.(’)./ ^з 1р.(’).Г 2 1’,1 ^ 1А\{:}Т \1,

У У У ' У у > ’ А7\/,Г Тб\/ ,г ,р ,. ,м

з 1р.(5)./ з 1р.(’).Г 2 I’,1 1~ \{:} Т \\,Г,р,’,М '

Т \1 ,Г, р,’,м  а \ 1 • А \7 •А \кз •А \к4 •А \х •А \{кг} • А \гю • А \гп • ~ \к12 •А \{:}

Тб \ /,г,р,5,м ^ Аз \ / Аз \ г А1 \ /,г А4 \ кз,2 Аз \ М.(14) А \ ~\а ,^\М,^,,,7 А2 \7,/ А2 \г,1 Аб \ 1ю,1п А9 \ к12,1: (А8 \ 1,г V }

• А, \ {„’,1: (А1 \Аз, \ ,р(>» Аз, \ р(».Г) • Аз |Г) • А, С,,,: (А, \ ? -А, \ {„',1: (А1 \ ;л А р1’“ А р’)Г)• Аз \ /),

} •А ~

„а., аа1 . IТ \ а

Т \ м ,X,1,7  А \ №.} •А \ {"»} • А \ • А \ {:} :

Т 7 \ М,х,1 J^A-\ А \а А\1 А\ А\а А\7 Аб \ 1,7 А \ к,,1: (°, \ М,1,7 А1 \ 1,1 А2 \ 7,1),

А8 \м.(1 ),х ,А11,1 А8 \ х,М.(7 ),А2\7,1 ^ ^ ^

где ’,р е 0(А), р - стек номеров начальных и конечных элементов сортируемых частей

массива.

Правила вывода для формирования структуры алгоритма сортировки Шелла:

Т, \М ,1,»,.  Аз X

А \ {к.} А \ кб А \м(кб) т \ Г,»М А \ к5 А \м(к5) А \ 7

• А \ A8\X:,}м,г),Tlо\M»,м А1 \ 7,» Аз \ х , Tl0 \ 7»М  А1 \ ]* Аз \м.(7) -а2 \ 7,к,

где » е 0(А).

Возможность разбиения массива на части начинается со следующего правила:

V \м  В \11 В \%4 В \12 В \%п В \1з • В \%я • В \14 В \%/ • А \' (1) • А \" (2) •

°1 \м,а,Ь,Ь,1 ^з 11 4 1"дм,11 ^з 11 ^4 1"п",12 ^з 11 ^4 Г^",1з ^з 11 ^4 I"/",14 Лз 1а Лз Ь

• А \“1 •А \“2 •« \М

лз 11 лз 1-2 4 М,а,Ь,к,11,12,1з,14,%д,%п,%g,%/,г^,щ,ы2 ’

где 11,12,1з, 14 е 0(А) , %д - признак, отсортирована ли часть массива при разбиении его на части, %п - направление прохода сортировки (%п = 1 - сортировка в прямом направлении, %п = о - в обратном), %g,%/ - начальный и конечный индексы частей массива, отсортированных алгоритмами вставки, 2 - стек пар (начало, конец) сортируемых частей массива, V - стек пар (начало, конец) отсортированных частей массива, которые после их отдельной сортировки нужно объединять, и1 - указатель стека 2 , и2 - указатель стека V.

Следующие правила задают структуру алгоритма, где в цикле задается направление прохода и выполняется сортировка одним из методов.

а ^ ™

о \М _ а % А * А \{;}:

4 \Ы,а,ЬАіиЬА,і4%^ І1 Л5 1и,,0 1*,Д- Ч°5 \ги 'А\УТ\М,, ’’

о/ о/ о/ л2 А10\%а>1^'і11^М,а,Ь,к,І1,І2,і'3,І4,%д,

% п,% г,% /, 2 ,у,и1 ,и2 % и>% г %/ 2 ,у,и4,и2

М ,i1,i2,i3,i4,z,v, ~ ^ Ь

Т \м  V |м1,м2,%?,%п,%g,%/ а Кз а \{:} : (А \М1 А) V \%п

-‘11 1м,,1,12,,з,14,2,v, °б |м,11,12,1з,14,г^, Л1о 1%г,о ^ 1кз,^Л2 1М1,2 7 1%п '

М1,М2,%^,%П,% g,% / М1 ,М2,%^,%П,% g,% /

В (13) и (14) устанавливается направление прохода сортировки. В (13) - направление прохода с начала в конец, в (14) - наоборот.

V \г,Н1,%п,%g,%/  А \%п А \%g А \к1 А \%/ /ио\

^ 5 \ г,М1  Аз \1 А1 \ г.

V \ 2 ,и1,% п,% г,%/ _ А \ %п .А \ % г .А \ *1 А \ %/

0 5 \ г,и1 _ А3 \ -1 А1 \ 2.

Абстрактный алгоритм 04 - алгоритм одного прохода сортировки массива.

Правилом (15) один проход разбивается на два. Применение при выводе структуры конкретного алгоритма позволит сочетать проходы сортировки различными методами.

М ,І1,І2,І3,І4,2 ,У, М ,І1 ,І2 ,І3 ,І4 ,2 ,У, М ,^2^3^4,2 ,У,

о Іи1,и2,%q,%п,%г,%/ __________ о Іи1,и2,%q,%п,%г,%/ о \ %п V |и1,и2,%q,%п,%г,%/ о \ %п

°6 \М ,І1,І2,І3,І4,2,У, _ 0 б| М ,І1,І2,І3,І4,2 ,У, ° 7 \ %п ° 6 \М ,І1 ,І2,І3 ,І4 ,2 ,У, °7 \ %п

и1,и2,% q,% п,% г,% / и1,и2,% q,% п,% г,% / щ,и2,% q,% п,% г,% /

В (16) массив разбивается на две части одинакового размера, каждая часть сортируется отдельно, затем выполняется их объединение.

М, І1, І2, І3 , І4,2 ,У,

О 1и1,и2,% q,%n,%g,% / О |М, 2,Щ,У,и2 Г) ІІ1 и 1% q и І О \%п ту 1*3 О |%г

06 |л/,І1,І2,І3,І4,г,у, _ 08 \м,2,щ,У,и2 • В1 \і1,1 • В4 \"q",i1 ' В1 \ І2,1 ' В4 \ "п",І2 ' В1 \і3,1 ' В4 \"г",і3 '

и1 ,и2,% q,% п,% г,% /

1 \ І4,1 4 \ "/"і 04 \м,a,Ь,h,il,І2,iз,І4,%q, 04 \ М,a,Ь,h,il,І2,iз,І4,%q, 09 \м,у,щ 2 \ і1,1

%п,%г,%/,2,У,Щ ,и %п,%г,%/,2,У,Щ и

• В \ %q • В \ і2 • В \ %п • В \ із • В \ %г • В \ і4 • в \ %/

-°4 l"q",г1 -°2 Іі2,1 ^4 І"п",і2 П2 Іі3,1 п4 І"г",г3 П2 Іі4,1 п4 І"/",і4 •

Правило (17) разбивает массив на две взаимно отсортированные части (как в быстрой сортировке), и каждая часть сортируется отдельно.

О М1,М2,%^,% п,% g,%/ V О М ,/ ,Г Я |11 Я 1% % Я |12 # Г/о п я \Ь Я 1% g

°б|м,11,,2,1з,,4,2,v, °Ю М,/,Г ^1 111,1 ^4 ГУ! 1 112,1 4 1"п",,2 ^1 1,'з,1 4 |ng",1з

Щ ,Ы2 ,%%,%п,%g,%/

•В \14 • В \%/ • V \м • V \м • В 1 • В \%д •

^1 ^4 I"/",14 4 1м,а,Ь,А,11,12,1з,14,%д, 4 М,а,Ь,А,11,12,1з,14,%д, ^2 1/1,1 ^4 Г'г",11

%/ ,2 Vи, Щ2 %П,%g,%/ ,2 Vи, ,Щ

•В \12 • В \ • В Рз • В % • В \14 • В

2 1/2,1 -°4 1"п",12 2 1,з,1 ^4 l"g",i3 2 ^Д П\ I"/",14

выбором, вставкой, бинарными вставками.

Правила (18) - (20) определяют абстрактные алгоритмы, выполняющие прямой, обратный и маятниковый проходы массива (соответственно) методом пузырька (1Ь, 1е е Q(А)) .

М ,11,12,13,14,2

V |М1,М2,%д,%п,%g,%/ ___ т \{:} : (Т \1ем,2,и1 ) Т \%% /чял

°б \м ,11,12,1з,14,2 .V, ““\и и^чмз \/ь ,1е ,М ,2,и1У114 \/ь ,1е->

и,, и 2, % д,% п,% g,% /

Т \{:} _ А \ •А \г5 •А \ е •А \г7 •А \{:}

12 12,и^^У13 12.(и1) Л1 ЦД ^3 12.(?5) 8 \1ь ,1е 9 1*7,1’

/

"3 1Л ^3 1/ь ^2 1/е,1 А I 7 ^ ТМ,М,1 ^з 11 "-Ч ЦД ^3 1/е

Т \/еМ,2и _ а \1 •А \7 •А \кз /А \{к/} •А \/е •А \к4 •А \

Т 13 \/ь,/еМ,2,щ _ А3 \/ь А3 \/ь А2 \/е,1 А \Г;^3;T15\Г,м,1 А3 \1 А1 Цд А3 \I

т \%д _ а \к а \{:}:

Т 14 \/ь,/е _ А7 \/ь,/е А, \*б,1:(А3 \о ), Т 15 \7М,1 _ А1 \7,1 А5 \м.(7)М.(*,) А, \*2,1: (°3 \м7,^ А3 \7).

М ,11,12 ,13,14,2

V |и1,и2,%д,%п,%g,%/ _ Т \ {:} :

*^б |м ,11,1*2, 13 ,14,2 12 I 2 и, " V 1б 1/ь ,/е м ,2,щ) 14 1/ь ,/^

и1 ,и2,% д,% п,% g,% /

^ \/ь мг:2„1_ Аз \/,  Аз \/, а \?ь ,1 -л е ^ м-а \/ь а \2ь‘-1),

Т \ 7,м ,1 _ а \к1 •А \ к2 •А \{:} :

17 17,М,1 7 2 17,1 5 1м.(/1),м.(7) ^ 1*2,1 ф'°3 1м,*1,7 2 17,1

М ,11,12,13,14,2 ,v,

V д,% п,% g,%/ Т \{:} :

°б |М ,11,12,13,14,2 V, “7 ^12 12 щ,- Ч^Чо 1% п,1 'Л? 1?ю,^113 1/ь ,/е ,М ,2,и, / '

:l,:2,% д,% п,% g,% /

А \{} :

' ^ 1*1о,о- Ч-Мб \/ь,/е,М,2,:} // 14 \/ь,/е)'

Правило (21) предназначено для изменения направления прохода сортировки.

^\ %п  А2 \%% .

Разбиение массива на две части определим как

V \ 2:V:U1 ,и2__ л \/ь • л \ *1 •А \ /е •А \ *2 •А \ {:} :(А \ *з •А \ 2.(*з) •А \ *з •А \ *4 •

°8 и^3 12.(и}) ^1 1:,,^ 3 12.(*}) ^б \/ь,/е 1*2,^^11 1и1,2 ^3 12.(и}) ^1 1и1,3 ^1 Цд

• А \ *5 •А \ 2.(*з) •А \ 2.(и1) •А \ и2 А \*з •А \ v.(u2) •А \ *з •А \ v.(^з) А \ *з ^А \ *4 •

^1 12.(и1),2.(*4) 4 1*5,2 ^1 12.(*з),1 ^1 1и2,3 ^1 1и1,2 ^3 12.(*з) ^1 1и2,1 ^3 12.(и}) ^1 Iи2,2 ^1 Iи,,1

• Аз б!3) • А, \и12)- А, \{:}о: (А, \из 2 • Аз \}2.(*з) • А, Г3 з • Аз \2.(*з) • А, \и2 з • Аз \!;.(и2) • А, Г3 , •

3 12.(*4) 1 Iи,,2 / I*2,о Ч 1 Iи,,2 3 11 1 Iи,,3 311 1 Ш2,3 311 1 1и2,1

•Аз \Г(‘з) -А} \ц2,2 -Аз \Г3) -А} \и|,2).

Объединение двух отсортированных частей массива:

V \м,v,u2  а \1 •А \?1 •А \7 •А \?1 •А \1е •А \и2 •А \д • А \{к.}

М^,и2 3 ІV.(U2) 1 1и2,1 3 Щ*}) ^1 1и2,2 ^3 К.^}) 2 1и2,3 ^3 1т Л\а7 ,Т8\д^;Т,1,, ?

Т}8  Ао \д2,7 л, \i2li: (А5 Ц,1)М,п А {}}: С^з С:; -А} \^,}))-А, \{2}о: (А5

-АУ ^^з \м ^ • А1 \ 7 ,1)- А9 \!з!о:( А3 \м .(1) • А3 \м .(д) • А3 \д - А2 \./,2 -А 15,/б,Т19\М,М ' А2 1.7,1 '

А ^ А ^ А ^ Ь

-АзМ"0))-А,\;,1 -а,\;-,/е -а,\»:

т М  а \*1о а \М.

1 191 д,М ^1 1д,1 3 \м.(*1о) •

Разбиение массива на две взаимно отсортированные части:

а ^ Г

V \М,2,и1  л \ 1Ь • а \ *1 л \ ^ •А \ *2 •А \{:}:( А \ *з •А \*4 •А ^ А \{лг } •

°Ю М,2,и} ^ л3 12.(и}) Л1 и,,} л3 Щ*,) 1/ь,1е Л9 1?2,^ } Щи}),*.^}) 1?з,2 л3 12.(*4) л I; \ а т \ /*Ле м

151 /ь , 4^ 2о1 /Ь, /е ,М

А \*7 а \ *8 А \*9 а \ *}о а \ *п А \ {} :

Л1 1и},2 1и},3 л2 1/е,2.

А, \ {|1!,о:

\{:} :

1?и,о Л^1} 1/ь

М М А ^

Т2о\Мм А^ А\.. 'А^ А\-. -Лб\?.л.' А, (.'У ^ М/,/, А, \/‘,,, -А, \/;,,).

4 А8\м.( /ь ),(5, А1\/ь ,1 А8\/5 ,м.(1е),, А2\/е ,1 б’ ’^е Ь е’

Правила (25) - (27) определяют абстрактные алгоритмы, выполняющие прямой, обратный и маятниковый проходы массива (соответственно) при сортировке выбором.

м

11,12 ,!3 ,14 ,2 V

V Ы},и2,%д,%п,%g,%/ _____________ Т \{:}

°б|м,11,12,13,14,2,v, ^^12 12,:, " \ 21 1/ь,М,1е,2,:}/ М4 \1ь,1е’

и, ,и2,% д,% п,% g,% /

/

Т \/ь м ,/е ,2,и1 _ л \*1 л \ *2 л \7 а \{Й/} л \м .

Т21 \/ь м,/е,2,и^ А3 \ М.(/ь ) А3 \ /ь А1 \ /ь ,1 А \ 7,/е ,Т22\М^,*} ,*2 А3 \м.(/ь ) А3 \*1 А1 \/ь 4 А3 \/ь ,

Т \М,7 ,*1 ,*2 _ А \ *3 А \ « :

22 М,7,*2 "^^8 М.(7),*, ^*9 1?з,^^^13 М.(У) ^3 17 Л

М ,11,12,13,14,2 ,v,

V |и1,и2,% д,% п,% g,% / ________ Т \ {:} :

°б |м ,ll,І2,iз,І4,2,v, “^J}2 12 щ, " \ 23 1/ь ,1е ,2,и}У 114 \1ь ,1е ’

и, ,и2,% д,% п,% g,% /

/

Т \/ьм,/е,2,и1 _ А \*1 а \ *2 а \ 7 А \{Й/} А \м.

Т23 \ /ьМ,/е,2,:} А3 \М.(/е) А3 \ /е А2 \ /е,1 А\ /ь,Г:T24\^ А3 \м.(/е) А3 \ А2 \ /е,1 А1 \ и,,} А3 \ /е ,

Т \М, Г:^1:^2 _ А \*3 •; \{:} :

24 М :Г:f1:f^^У15 \М.(7),*, ^9 I ?з,^ ^^3 М.(^ ^3

М , 1} ,12 ,1'з ,14 , 2,V,

V |:1,:2,% д,% п,% g,%/ ___ т \ {:} :

°б\м ,1}, 12,13,14,2, V, “"*-42 12,:^У11о 1% п,^9 1?1о,|- ^21 1/ь ,М ,/е, 2,:^ ^9 1?}о,^123 1/ь ,М, 1е, 2,:^ ^14 1/ь ,/е • ^ ^

и, и,% д,% п,% g,% /

Правила (28) - (30) определяют абстрактные алгоритмы, выполняющие прямой, обратный и маятниковый проходы массива (соответственно) при сортировке вставками.

М ,1},12,1'з,14,2, V,

^ |:1,и2,%д,%п,%g,%/ _ Т \{:} : (Т \м,/ь,/е,2,:},%g А \%g А \*2 А \{:} : ( А \2.(:}) А \1ь)) Т \ %д

5б |М ,11,12,13,14,2, V, /12 12 ,:^-/25 М ,/ь ,/е ,2,:},% g /1|1% g ,1 /15 1% g ,1е ^9 1?2,^ 3 \1е \1е)) ^14 \1Ь ,1е-

щ ,:2 ,%д,% п,% g,% /

Т \м,/ь,1е,2,:1 ? %g _ А \х •; \7 •; \{лм! •; \Г} -А \

25 М,/ь,1е,2,:},%^ А3 1м.(%g) 2 1%gА |ТГ2б\;аЛ,м,х,Т27\;:'м 1 ^,^з1

Т \а _ А \*1 А \*2 А \а Т \ J:м _ А \ А \м.(*1) А \7

2б 17,1Ь м X 7 17,1Ь 5 М.(7 ),х Л11 и,,*^ 27 \Г:M Л1 I ^ ,1 ^3 М.(7) 2 I Г:1 ^

М ,11,12,13,14,2 V,

V Щ1,:2,%Ч,%п,%я,%/ Т \ {:} : (Т \М,1Ь,1е,2,:1,%/ А \ %/ А \ *2

°б |м,11,12,1з,14,2,v, ^ 12 12,:^ ^ 28 М,1Ь,1е,2,:},%/ 'А2 1%/,1 'А8 1%.

•* е V

"б |М,11,12,1з,14,2,v, ' -42 12,:^-[28 1м,1Ь,1е,2,:},%/ ^^2 1%/,1 ^^8 1%/,1Ь

:} ,:2,%д,%п,%я,%/

-А9\{г:}1:(А} \и'},1 -Аз \;ь1,з) -Аз \1Ь))-Ти \//Чl_,

Т \м,1ь,1е,2, :1,%/ _ л \х А \7 • ; \{Л«’} А \*1 А \м.

28 \м,1ь,1е,2,:},%/^ л3 М.(%/) Л1 1%/,1 л Т^,,,,,Тзо\;',М 2 ^,1 Л3 I,

'А \а _ А * А ^ А \а Т \7м _ А * А \м^ А \7

29 17,1е ,М ,х~ 17,1е 8 М.(7),, ^11 1г},г^ -'зо ^,М ~ ^2 17,1 ^3 М.(7) ^1 17,1 •

М,1} ,12 ,1з ,14 ,2,v,

V |:},и2,%д,%п,%я,%_ т \м%,%д

°б \м ,1}, 12,13,14,2 ,v, “^ -*31 \м,% я • 1Л1о 1% п ,1 9 1*5,^-/25 \м ,1Ь ,1е, 2,:},% я ^12 1% я ,% / ^*9 1?6,^/1|1% я,1 /

и,, и 2,% д, % п,% я,% /

• А \{:}:(Т \м,%я,%д))•; \{:}:(Т \м,ьЛе,2,и1,%/ •З \ *12 •; \{:} (л \%/ )•; \{:} :

9 1?б,^^ 32 М,%я )) 9 к,,о * V 28 М,1А,1*,2,:},%/ ^42 1%я,%/ ^9 2 1%/,1 / ^9 1*}2,о *

:

:(А \*з А \{:} : (V \м )• А \%д )• А \*4 А \{:} : (А \%д )• А \{:}

•4^5 1м.(1Ь ),М.(1е) 9 1*з,1-Ч°3 \м,1Ь ,1е) ^3 1о / 7 /,1е 9 1*4,1 • 4^3 Ю / ^9 1*4,о

т \м,%я,%д _ а \*7 • ; \*8 а \*9 А \*}о А ^ А \{:} :

32 М,%я ~ л2 1%я,1 лб М.(*7),М.(%я) 1%я,1 лб М.(%я),М.(*,) 1%,*}о л9 1*П,ГЧЛ3 1о /•

Правила (31) - (33) определяют абстрактные алгоритмы, выполняющие прямой, обратный и

маятниковый проходы массива (соответственно) при сортировке бинарными вставками.

М ,1} ,12 ,1з ,14 ,2, V,

V \ul:U2:%q,%п,%я,%/ . Т \{:} : (Т \М,/ь,/е,2:Ul:%g А \%я

°б |М,1},12,1з,14,2V 12 12^ 33 М,/ь,/е,2,:,,%я Л1 1%я,1

Ul:U2:%q:%n:%g:%/

•А5 ^(а,^ А £)) • ,

" / г \М Л Л ,2 .и1.% г _ а \х .А \г .А \Г .А \{д»! .А \7 •А \{д/! .А \М

зз \м,ІЬ,1.,2,и1,%^ Аз ІМ.(%г) Аз \іь л2 1%г,1 А1-^,г34\М,;Л2 1%г,1 А І7л^м лз \х >

Г341М_ А, ^ - а4 \;',2 - А8 \;,„.(,) - а, !»,: (А2 \;,)- а, (а, \:,,),

Г35 \ 7-,м _ а ь  а, \м •(;;,

М ,І1 ,І2 ,із ,І4 ,2,У,

о |и1 ,и2qп,%г,%/ _ г \{:> : (г \М,іь:Ie:[ а \%/ А \*2

°6 |м,/1 ,і2,і3,і4,2,у, ^ 12 12,и^ ^ V 36 ІМ,ІЬ,І.,2,и1 / Л2 1%/,1 Л5 1%/1

и^и^Го q,%n,% г,% /

ЛЕЛ А1 \и>,1 А, і;1'3’. А, \ ІЬ)) -Г14 \;%^,,

^ / г \М ,іь ,І.,2 ,“1,% / _ а \х .А \г .А \1 .А Р"-} .А \7 .А \{я/} .А \М

36 ІМ,ІЬ,І.,2,«1,%/^ Аз ІМ.(%/) Аз І А2 1%/,1 А і;а6\у,г,г37\',г,М 1 /1 Ч,г,г38\7,М Аз їх

г,7 \!Л \?,г  а4 \;-,г. А8 \х,м.(„)  .3,1”: (А2 \;,,)  А, \'7}о: (А \'„,1г,8 \7 ,М _ А2 \;,|  а, \м «>,

М, І1, І2 , Із , І4 ,2 ,У,

о |и1,и2,% q,% п,% г,%/ _ г \м ,% г,% q:(~ \ '5 А \{:} : (г \М ,іь ,І., 2 ,и1,% г А \'6

°6\М ,/1,і2,і3,/4,2,У, ^ ^ 31 ІМ,% г • ЧЛ10 1%п,1 Л9 І'5,^-'зз ІМ ,ІЬ ,І., г,и1,% г 12 1% г,%/

и1 ,и2 ,%q,%п,%г,%/

. -З, \!;}1:

:

: (А2 \%/,1) А, \'6,0: (г32 \м,%г ))).

Разработанная КФГАС позволяет формировать структуры алгоритмов сортировки.

Выполнив последовательно операции подстановки, начиная с начального нетерминала о1 \М аЬ h *

- абстрактного алгоритма сортировки и заканчивая цепочкой, в которой отсутствуют абстрактные

операторы, получим структуру некоторого конкретного алгоритма сортировки.

Например, выполнив подстановки согласно правилам

(11) ^ (12) ^ (13) ^ (15) ^ (21)3 ^ (25) ^ (2,),

будет построена структура (с соответствующими подструктурами) следующего алгоритма сортировки. Массив сортируется чередованием прямого прохода метода выбора и обратного прохода сортировки вставками

я*(Л,1 |Мм, \СШ(м,) = Б3 11 В, |%?, В |1 В, В |1 -Б, |%?4 В |1 В, |%Х•

. А 12-(1) • А 12-(2) • А |“і • А |“2 • А |%? • ~ |?20 А |{:} •( А |%и а |%£ А |^ А 1%/ •

А3 ^ А3 |6 А3 |1 А3 |-2 А3 |1 А5 |м1,0 А3 |ї20,1:(А3 |1 А1 ^.(цУ А3 |м1,1 А3 |г.(Г22),1

w

• л \{Kw} )

I л \У л \М h

л10'%q, 1 • AS2 jM,a, b,h, 1/, '2 , I3 , I4, %q,

%n,%g,% f ,z,v,ul ,«2

Str ( л jM \C ) — л j/b л j t24 л ' /e A j t25 .л j{:} :

V^S2 \M,a,b,h,11,12,13,14,%q, GA(ASV 3 lz.(M/) ^1 Цд ^3 lz.(t24) ^8 \/b,/e ^9 lt25,1'

%n,%g,%/,Z,V,Mi ,M2

/

:( л jt60 .л \t6l .л jj .A \{Л/} л jM .(t6l) .л jM(/b) л j/b A \,.(м1);).

• VA3 \м.(/ь) A3 \/b A1 \/b ,1 A I j,/ л 'M •j •t60 •t6l A3 M.(/b) A3 It60 A1 l/b ,1 A3 l/b

e’ S3 M,j,i60,i61

.~ j128 A \{:} :( л j% ?.л \%n л \/b .л Iі 24 .л j/e Л Iі 25 A j{:} :

Al \/b ,/e A \t28,/: (A \o A2 \o,%n A3 'z.(Ml) A1 'м/,1 A3 \z.(t24) л8 \/b,/e A9 jt25 ,1 :

w

: ( л Iх .л jj A j^} .л jt75 .л jM .(t75) .л j%f A jt73 .

• VA3 \M.(%/) A1 1%/,1 A U S j ? ,л, j M 2 lj,1 З їх 2 1%/,1 ^ 1%/,/b

S 4 j , /e , M , х S5 j , M

-l9 l!i3:l:( л, t"l -л, I Jb"74 ) A j/! ))^l I/”/, -A, \t :::і: (л, |%q ). л2 '2:%, .Л/0 Ё,:0

b

A9Іt:l,l-( A і;і:2  л). л2

Str

°^VAS: ІМ:МоЛі ^GA (AS^“^8 ІМ.(j):i60 ^9 lt62:^A3 ІМ.(j) A3 \j h Str(AS4 I jj:/eM;X \CGA(AS)) — A6 ' j7;/e .A8 jM.(j);Х .A11 '%•%•

s»-(as> ij'M \Cg,(-s))—л2 j -л, і;; j -л, jj,,.

Таким образом, предлагаемый формальный аппарат грамматико-алгоритмических структур позволил формальными средствами определить бесконечное множество возможных алгоритмов сортировки.

б. Заключение

На основе грамматических и алгоритмических структур разработан формализм грамматикоалгоритмических структур. Такие формальные структуры используют возможности структурного представления алгоритмов в виде последовательности образующих алгоритмов, связанных операциями композиции и условного выполнения. Средства грамматических структур позволяют выделить из всего множества алгоритмов, которые можно построить в рамках алгоритмической структуры, подмножество алгоритмов, предназначенное для решения некоторой задачи.

В [1] предложена неформальная модель множества алгоритмов сортировки в виде метаалгоритма. В данной работе такая модель выполнена в виде КФГАС, что является предпосылкой формализации адаптивных и в том числе структурно адаптивных алгоритмов.

Отметим, что приведенное множество образующих алгоритмов можно представить в виде некоторого подмножества базовых алгоритмов таких языков программирования, как Паскаль и Си. Для представления возможностей моделирования КФГАС отметим, что метаалгоритм на языке Паскаль, соответствующий аксиомам (б) - (33), занимает более 7QQ строк кода.

Моделирование средствами формальных структур позволяет сопоставлять модели, выполнять разного рода композиции моделей. Это дает возможность выйти на постановку и решение ряда задач. Практический и научный интерес вызывают задачи полноты и оптимизации. Полнота в конкретном приложении рассматривается в таком смысле: все ли возможные алгоритмы решения некоторой задачи есть в множестве алгоритмов, моделируемом КФГАС? Оптимальность можно рассматривать как применительно к набору аксиом-правил вывода, так и к алгоритму из допустимого множества.

СПИСОК ЛИТЕРАТУРЫ

1. Шинкаренко В.И. Структурная адаптация алгоритмов на основе полиморфизма / В.И. Шинкаренко // Математические машины и системы. - 2009. - № 2. - С. 28 - 44.

2. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений / Буч Г. - М.: Издательский дом "Вильямс", 2008. - 718 с.

3. Вирт Н. Алгоритмы + структуры данных = программа / Вирт Н. - М.: Мир, 1985. - 406 с.

4. Кнут Д.Э. Искусство программирования / Кнут Д.Э. - М.: Издательский дом "Вильямс", 2000. - Т. 3:

Сортировка и поиск. - 832 с.

5. Цейтлин Г.Е. Введение в алгоритмику / Цейтлин Г.Е. - К.: Сфера, 1998. - 310 с.

6. Яценко О.А. Розробка інтегрованих алгебро-алгоритмічних моделей: елементи, теорії, інструменарій, застосування: автореф. дис. на здобуття наук. ступеня канд. фіз.-мат. наук: спец. 01.05.03 / О.А. Яценко. - К.: Київський національний ун-т ім. Тараса Шевченка, 2005. - 17 с.

7. Алгебро-алгоритмические модели и методы параллельного программирования / Ф.И. Андон, А.Е. Дорошенко, Г.Е. Цейтлин и др. - К.: Академпериодика, 2007. - 634 с.

8. Глушков В.М. Алгебра. Языки. Программирование / В.М. Глушков, Г.Е. Цейтлин, Е.Л. Ющенко. - К.: Наукова

думка, 1989. - 376 с.

9. Ноден П. Алгебраическая алгоритмика / П. Ноден, К. Китте. - М.: Мир, 1999. - 720 с.

10. Ільман В.М. Структурний підхід до проблеми відтворення граматик / В.М. Ільман, В.І. Шинкаренко // Проблемы программирования. - 2007. - № 1. - С. 5 - 16.

11. Шинкаренко В.И. Структурные модели алгоритмов в задачах прикладного программирования. Ч. I: Формальные алгоритмические структуры / В.И. Шинкаренко, В.М. Ильман, В.В. Скалозуб // Кибернетика и системный анализ. - 2009. - № 3. - С. 3 - 14.

12. Хантер Р. Проектирование и конструирование компиляторов / Хантер Р. - М.: Финансы и статистика, 1984.

- 232 с.

Стаття надійшла до редакції 30.06.2009