Научная статья на тему 'Формальная постановка задачи структуризации алгоритмов'

Формальная постановка задачи структуризации алгоритмов Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
206
24
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Г. С. Иванова

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Формальная постановка задачи структуризации алгоритмов»

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

1. Гольденберг Л. М. Цифровая обработка сигналов / Л.М. Гольденберг, Б.Д. Матюшкин, М.Н. Поляк. -М.: Радио и связь, 1985.

2.The Scientist and Engineer's Guide to Digital Signal Processing. Second Edition / Ed. by S. W. Smith. - California Technical Publishing, 1999.. http://www.dspguide.com/

3. B l a h u t R. E. Fast algorithms for digital signal processing / R.E. Blahut. - Addison-Wesley, 1985.

4. Numerical Recipes in C. The Art of Scientific Computing. Second Edition / W.H. Press, S.A. Teukolsky, W.T. Vetterling, B.P. Flannery. - Cambridge University. Press, 1988. http://www.library.cornell.edu/nr/

5. A r n d t, J. Algorithms for programmers: ideas and source code. - 2002. http://www.jjj.de/

Статья поступила в редакцию 5.07.2005

УДК 681.3:519.6

Г. С. Иванова

ФОРМАЛЬНАЯ ПОСТАНОВКА ЗАДАЧИ СТРУКТУРИЗАЦИИ АЛГОРИТМОВ

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

Одним из принципов построения технологичных программ считается структурное программирование [1], которое предполагает при разработке программ на универсальных процедурных языках высокого уровня использование только так называемых "структурных" конструкций. К структурным относят три основные конструкции: следование, ветвление и цикл с условием на входе ("цикл-пока"), и три дополнительные: выбор, цикл с заданным количеством повторений ("счетный") и цикл с условием на выходе ("цикл-до"). Из накопленного к настоящему времени опыта структурного программирования следует, что технологичность программ, составленных с использованием только этих структур, гораздо выше, чем в том случае, когда разработчик использует неструктурное программирование. Это связано с тем, что структурные программы легче анализировать, они содержат меньше ошибок, проще тестируются и отлаживаются. Однако

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

Неструктурный вид программ, получаемых при использовании операторов неструктурной передачи управления, порождает целый ряд проблем. Во-первых, в этом случае сложно разобраться в получаемой программе, что уменьшает возможности "ручной" оптимизации на данном уровне. Во-вторых, существенно усложняется, если не становится невозможным, автоматический анализ вычислительной сложности полученных программ. Естественным решением проблемы является создание средств автоматического преобразования программ к струк-турному виду.

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

Принципиальная возможность структуризации программ была доказана, еще в начале 60-х годов прошлого века академиком В.М. Глуш-ковым [2]. В последующем им и его последователями была разработана система алгоритмических алгебр, содержащая строгую методику структуризации алгоритмов [3], но для очень ограниченного класса схем программ — схем Янова.

Для структуризации реальных программ и алгоритмов в настоящее время предложено много способов [4-9], но при этом не существует общей методики выявления неструктурностей, предлагаемые способы не базируются на анализе моделей алгоритмов или программ, а потому не могут быть автоматизированы. Единственная известная автоматизированная методика выполняет лишь частичную структуризацию программ в процессе декомпиляции [10]. Она основана на выявлении неструктурностей в программах по присутствию оператора GOTO. Однако использование этого оператора может и не нарушать структурности конструкций.

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

Модель программы для задачи структуризации. При решении частных задач структуризации программ, написанных на языках высокого уровня, на правила преобразования оказывает существенное вли-

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

Естественным выходом из этого положения является преобразование к структурному виду не программ, а алгоритмов, описанных в некотором операторном базисе, который является допустимым семантикой всех или широкого класса языков высокого уровня. Такой класс операторов определен в [11]. Он включает операторы: изменения данных, вычисления условий, ветвления и слияния потоков управления, позволяя описывать как структурные, так и неструктурные конструкции.

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

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

Основные структурные конструкции, их модели и свойства. На рисунке представлены фрагменты схем алгоритмов и модели основных структурных конструкций: следования, ветвления (полная и усеченная) и цикла-пока.

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

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

Основные структурные конструкции алгоритма и их модели:

а, г — следование; б, д — ветвление; в, е — цикл-пока

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

1. Модель оператора обработки данных представляет собой одновершинный кусок й0(X0,и0), такой что:

X0 = {хк },

Ъ(хк) = "обработка данных", и0 = = {«(0, Хк), и(хк, 0)},

(1а) (1б) (1в)

где Ь(хк) — тип к-ой вершины; и0 — подмножество внешних ребер куска й0 (X0 ,и0).

Из соотношений (1а)-(1в) следует, что

|х01 = 1,

| U01 =2,

P (X0) = S (X0) = 1,

(1г)

(1д)

(1е)

где Р (X0), 5 (X0) — полустепени исхода и захода куска й0 (X0, и0).

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

2. Конструкция "следование" подразумевает последовательное выполнение операций обработки данных. Моделью конструкции является кусок управляющего графа ^ и1) = СЛ(хк, хк+п), где СЛ — простая цепь, в которой хк — вершина начала конструкции следования, а хк+п — вершина конца конструкции следования (см. рисунок, г), т. е. подмножество внешних ребер куска С1(Х1, и1) — и1 = {и(0, хк),

и(жк+п, 0)}.

Формальными признаками данной конструкции являются

Р (X1) = 5 (X1) = 1, (2а)

(Ух; € X 1)(р(х1) = з(х;) = 1&£(х;) = "обработка данных"), (2б)

где Р(X1), Б(X1) — полустепени исхода и захода куска С1(Х1, и1); р(х;), з(х;) — полустепени исхода и захода вершины х;, ¿(хк) — тип к-й вершины.

3. Конструкция "ветвление" подразумевает выполнение операций вычисления условия, ветвления потоков управления, обработки данных и слияния потоков управления. Моделью конструкции является кусок управляющего графа С2^2, и2) (см. рисунок, Э).

Подмножество внешних ребер куска С2^2, и2) — и2={и(0, хк), и(хк+4, 0)}, где хк — вершина начала конструкции ветвления, хк+4 — вершина конца конструкции ветвления.

Формальные признаки данной конструкции:

Р (X2) = 2) = 1, (3а)

¿(хк) = "вычисление условия", (3б)

¿(хк+4) = "слияние", (3в)

(Р+1(хк) = хк+1)&(^(хк+1) = "разветвление"), (3г)

(Р+1(хк+1) = {хк+2,хк+з})&((хк+2 = х/&хк+з = хЛ)У

V (хк+2 = хк+4&хк+3 = хь) V (хк+2 = х/&хк+3 = хк+4))&

&(£(х^) = ¿(х/) = "обработка данных"). (3д)

где Р(X2), Б(X2) — полустепени исхода и захода куска С2^2, и2), ¿(хк) — тип к-й вершины.

Характеристики (3а)-(3д) образуют полный набор формальных признаков (инвариантов) данной модели.

4. Конструкция "цикл-пока" подразумевает также выполнение операций вычисления условия, ветвления потоков управления, обработки данных и слияния потоков управления, но в другой последовательности. Моделью конструкции является кусок управляющего графа С3^3, и3) (см. рисунок,е). Подмножество внешних ребер куска

С3^3, и3) — = {«(0, хк), -и(хк+2, 0)}, где хк — вершина начала цикла, хк+2 — вершина конца цикла.

Формальные признаки данной конструкции:

где Р(X3), 5(X3) — полустепени исхода и захода куска С3^3, и3); t(xk) — тип к-й вершины.

Характеристики (4а)-(4д) образуют полный набор формальных признаков (инвариантов) данной модели.

Таким образом, множество базовых моделей структурного алгоритма Св включает четыре модели:

где С0 — модель оператора обработки данных; С1 — модель конструкции следования; й2 — модель конструкции ветвления; й3 — модель конструкции цикла-пока.

Анализ инвариантов моделей перечисленных конструкций показывает, что необходимым (но не достаточным) формальным признаком того, что некоторый кусок графа С^ представляет собой модель структурной конструкции, может служить свойство (1е), (2а), (3 а), (4а). Недостаточность этого признака обусловлена тем, что некоторый фрагмент с одним входом и одним выходом может включать неструктурные конструкции.

Различать модели конструкции можно, используя свойства (2б), (3б) и (4б).

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

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

Р (X3) = 5 (X3) = 1, (£(хк) = "слияние"), (¿(хк+2) = "разветвление"),

(4а) (4б) (4в)

(^+1(Хк+2) П F-1(Хк) = Хк+3)ВДХк+3) =

= "обработка данных"), (4г)

^+1(хк) = хк+1)&(£(хк+1) = "вычисление условия"). (4д)

GB _ г /"Ю /"(1 /"(2

— {G , G , G , G },

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

Под операцией свертки (факторизации) структурной конструкции, вложенной в данную, будем понимать свертку в одну всех вершин X, куска графа С, , и) , являющегося моделью этой конструкции, таким образом, что

/actor(G,(X,, U,).) =

Gj (Xj ), если |Xj | = 1, Gf (Xf ,Uf), если |Xj| > 1,

где Xf = {xn}, xn — единственная вершина, заменяющая свертываемый кусок графа; t(xn) ="обработка данных", t(xn) — тип вершины xn; Uf = 0, Uf — множество внутренних ребер (петель) одновершинного куска; Uf = j = {U(0, жп), м(жп, 0)} = Uj\U¿,¿ = j, Uf, j — множества внешних ребер одновершинного и свертываемого кусков; Uj j — множество внутренних ребер свертываемого куска.

При таком преобразовании сохраняется основное свойство моделей структурных алгоритмов: S(Xj) = P(Xj) = S(Xf) = P(Xf) = 1.

Формальное описание структуры "структурного" алгоритма и правила разбора таких алгоритмов определяет аксиоматика операций свертки над сложными структурными конструкциями:

factor (G0) = G0f = G0,

factor(G¿ G {G:,G1f,G2,G2f,G3,G3f}) = G0f, factor({Gk} С G1C&Gk G {G2f ,G3f}) = G1f, factor(G01 ,G02 С G2C&G0i,G02 G {G1,G1f,G2,G2f,G3,G3f}) =

= G2f,

factor(G0 С G3C&G0 G {G1,G1f,G2,G2f,G3,G3f}) = G3f,

где G1C — кусок управляющего графа, соответствующий линейной последовательности операторов обработки данных, операторов ветвления и операторов цикла-пока (в свою очередь, возможно, включающих внутренние структурные конструкции), т. е. G1C = Ch(Gi,Gj), где Сh — последовательность кусков, являющихся моделями указанных выше последовательных операторов, причем

(Vk = ij)Gk G {G0,G2,G2f,G3,G3f};

G2C — кусок управляющего графа, соответствующий оператору ветвления (сложной структурной конструкции типа G2), ветви которого

С01,С01 С С2С могут содержать вложенные структурные конструкции, т. е.

п п Г- Гп1 п1Р п2 п2Р п3 п3Рл. С01, С02 £ {С , С , С ,С , С ,С }.

С3С — кусок управляющего графа, соответствующий оператору цикла-пока (структурной конструкции типа С3), тело которого С0 С С3С

может содержать вложенные структурные конструкции, т. е. С0 £

гг<1 п1Р п2 п2¥ п3 п3¥\ £ {С ,С , С ,С , С ,С }.

Таким образом, получаем множество моделей конструкций, изоморфных базовым Св и получаемых из сложных посредством свертки:

гчВЕ _ Г/-Ч1Е г*2Р Г*3Р\

С — {С ,С ,С ,С }.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Формальная постановка задачи структуризации алгоритма.

Формально задачу структуризации алгоритмов можно поставить следующим образом.

Выполнить преобразование

С^^^Т^ и ,Р>) Л СУС(<X2,T>,< и2,Р>) и

СДН({< Xl,Т >, < У1,< >>},

{<? 1,Т1 >,< ? 1,< Т12,^3 >>}) ->

{< ?2,Т1 >,< ?2,<Т,я3 >>}),

такое что

(Уг £ /) АН (5г) = АС (5г);

где СУН и СУС — куски управляющих графов неструктурной и структурной программ без вершин, сопоставленных началу и концу программы; 5 = {¿¿/г £ I} — множество всех допустимых наборов входных данных задачи, для решения которых предназначен данный алгоритм; АН

— неструктурная программа, управляющим графом которого является граф СУН; АС — структурная программа, соответствующая преобразованным графам СУС и СДС; при выполнении следующих условий, вытекающих из свойств алгоритмов:

1X11 < 1X2!, X П X2 = 0, и! < |и2|, и1 П и2 = 0;

и существует разрезание В куска графа СУС на совокупность кусков В(СУС), удовлетворяющих условиям

(VGfc g B(Gyc)) Gfc = 0, i G J;

(VGfC G B(GfC)) (GfC G GB V GfC G GBF), UGfC = GyC,

¿el

(VGfC,Gf+C G B(GfC))(XfC П Xff = 0 & Ufc П UfC =

= Ujii+i 0 |Uiii+i| = 1), i, i + 1 G J,

(VGfC,GfC G B(GfC))(XfC П XfC = 0 & UfC П Uf C = 0),

i,j G J, j = i ± 1,

или, другими словами

factork (GfC) = G0F.

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

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

1. Дал У, Дейкстра Э., Хоор К. Структурное программирование. - М.: Мир, 1975.

2. Г л у ш к о в В. М. Теория автоматов и формальные преобразования программ // Кибернетика. - 1965. - № 5. - C. 1-9.

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

4. AshcroftE., Manna Z. The translation of GOTO Programs to WHILE Programs // Proc. IFIP Congress 71, Lubljana, Yugoslavia, August 23-28, 1971. - Amsterdam: North-Holland Publ. Co. - 1972. - V. 1. - № 1. - P. 250-255.

5. K o s a r a j u S. R. Analysis of Structured Programs // J. Computer and System Sci. - 1974. - V. 9. - № 2. - P. 232-255.

6. K n u t h D. E., Floyd R. W. Notes on avoiding GOTO statements // Inform. Processing Letters. - 1971. - № 1. - P. 23-31.

7. Martin J. L. Generalized structured programming // AFIPS Conf. Proc. - Chicago, 1974.-V. 43.-P. 665-669.

8. M i 11 s H. D. Mathematical foundation for structured programming // IBM Tech. Rep. 1972. FSC-72-6012. - P. 34.

9. Peterson W. W., Kasami T., Tokura N. Onthe capabilities of the WHILE, REPEAT, and EXIT statements // Comm. ACM. - 1973. - V. 16. - № 8. - P. 503-512.

10. E r o s a A. M., H e n r o n L. J. Taming Control Flow: A structured Approach to Elimination GOTO Statements // Proc. IEEE International Conf. on Computer Languages. May 1994. - P. 229-240.

11. Овчинников В. А., Иванова Г. С. Информационно-логическая модель алгоритма // Вестник МГТУ. Серия "Приборостроение". - 2005. - № 1. - С. 109121.

Статья поступила в редакцию 27.10.2004

Иванова Галина Сергеевна родилась в 1954 г., окончила МВТУ им. Н.Э. Баумана в 1978 г. Канд. техн. наук, доцент кафедры "Компьютерные системы и сети". Автор 25 научных работ в области вычислительной техники и проектирования программных систем.

G.S. Ivanova(b. 1954) graduated from the Bauman Moscow Higher Technical School in 1978. Ph. D. (Eng.), assoc. professor of "Computer Systems and Networks" department of the Bauman Moscow State Technical University. Author of 25 publications in the field of computing technology and design of software systems.

УДК 004.89; 004.912; 004.5

В. А. Фомичев

КЛАСС ФОРМАЛЬНЫХ ЯЗЫКОВ И АЛГОРИТМ ДЛЯ ПОСТРОЕНИЯ СЕМАНТИЧЕСКИХ АННОТАЦИЙ ВЕБ-ДОКУМЕНТОВ

Предложена широко применимая и гибкая теория формального описания структурированных значений текстов на естественном языке (предложений и дискурсов) — теория стандартных К-языков (СК-языков). Анализ выразительной силы класса СК-языков дает возможность предположить, что СК-языки позволяют строить семантические аннотации произвольных Веб-документов и удобны для построения таких аннотаций. Теория СК-языков была использована при разработке широко применимой математической модели лингвистической базы данных (ЛБД) и сложного структурированного алгоритма семантико-синтаксического анализа текстов из представляющих практический интерес подъязыков естественного (русского) языка, базирующегося на построенной модели ЛБД. Алгоритм реализован в системе программирования Visual C+ + и может быть широко использован для построения семантических аннотаций Веб-документов.

Благодаря бурному прогрессу компьютерной сети Всемирная Паутина (the World Wide Web, WWW, W3) пользователи сети во всем мире получили быстрый доступ к огромному количеству ЕЯ-текстов, относящихся к различным областям деятельности человека. С середины 1990-х годов специалисты в самых разных предметных областях работают не только с публикациями и базами данных (БД) своих орга-

i Надоели баннеры? Вы всегда можете отключить рекламу.