Научная статья на тему 'Использование деревьев и/или для перечисления выражений контекстно-свободных языков'

Использование деревьев и/или для перечисления выражений контекстно-свободных языков Текст научной статьи по специальности «Компьютерные и информационные науки»

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

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

Рассматривается вопросы использования деревьев И-ИЛИ для построения алгоритмов нумерации и генерации объектов. Описываются перечислительные свойства и алгоритмы для И-ИЛИ деревьев. Исследуются возможности использования деревьев И-ИЛИ для представления контекстно-свободных грамматик. Предлагается метод построения алгоритмов перечисления для контекстно-свободных грамматик. Приводится пример построения алгоритма перечисления для языка арифметических выраженийI

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

ssues of AND-ORtrees, used to build enumeration algorithms and objects generation, are considered within the article. Properties and algorithms of AND-OR trees listed are described in detail. Analysis is conducted to view the possibilities to apply AND-OR trees for context-restricted grammar(s). A method is offered to refer to build the algorithms of context-restricted grammar(s) enumeration. An example is examined to build enumeration algorithm as applied to arithmetic expressions.

Текст научной работы на тему «Использование деревьев и/или для перечисления выражений контекстно-свободных языков»

6. Yankovskaya А.Е. et al. Application of local metrics for formation and optimization of the knowledge base II Pattern Recognition and Image Analysis. 2001. Vol. 11. № 2.

7. Дюк B.A. Обработка данных на ПК в примерах; Статистические расчеты Построение графиков и диаграмм. Анализ данных. СПб., 1997

8. Бонгард М М. Проблема узнавания. М., 1967.

9. Берестнева О.Г. и др. Компьютерное моделирование специфики развития познавательных способностей II Компьютерное моделирование 2003: Тр. междунар. науч.-техн. конф. СПб., 2003.

10. Уразаев А.М. и др. Формирование социального и психологического портрета современных женщин в период репродуктивной активности II Вестн. Томского гос пед. ун-та. 2002. Вып. 3.

УДК 519.17:519.683.8

В.В. Кручииии

ИСПОЛЬЗОВАНИЕ ДЕРЕВЬЕВ И/ИЛИ ДЛЯ ПЕРЕЧИСЛЕНИЯ ВЫРАЖЕНИЙ КОНТЕКСТНО-СВОБОДНЫХ ЯЗЫКОВ

Томский государственный университет систем управления и радиоэлектроники

1. Введение

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

1) подсчет количества объектов, получаемых с помощью генерирующего алгоритма;

2) построение и исследование алгоритмов нумерации объектов;

3) построение и исследование алгоритмов управления генерацией.

Мощность множества объектов для данного генерирующего алгоритма является важной характеристикой, позволяющей оценить возможности генератора. В общем случае, для исследования мощности множества объектов используются методы теории перечислительной комбинаторики [1,2]. Имеются исследования, посвященные алгоритмам генерации и идентификации комбинаторных объектов, которые можно найти в работах [3,4]. Ниже предлагается оригинальные алгоритмы для нумерации и перечисления деревьев И/ИЛИ и разработка на их основе метода построения алгоритмов перечисления выражений контекстно-свободных языков. Показан и исследован пример разработки алгоритма перечисления для языка арифметических выражений.

2. Перечисление деревьев И/ИЛИ

Деревья И/ИЛИ, понятие которых впервые было предложено Слейглом [5], являются важным инструментом исследования и создания систем искусствен-

ного интеллекта [6-8]. Дерево И/ИЛИ содержит два типа узла: И-узел и ИЛИ-узел. В терминах решения задачи И-узел означает, что решение задачи разбивается на подзадачи. Решение всей задачи зависит от решения всех подзадач. ИЛИ-узел означает, что задача может быть решена несколькими методами. Соответственно, для решения задачи, представленного ИЛИ-узлом, необходимо использовать какой-либо один метод. Существуют и другие интерпретации узлов дерева И/ИЛИ. Например, И-узел описывает структуру некоторой системы, подсистемы, блока и т.д., а ИЛИ-узел - некоторое множество типов структур.

Вариантом дерева И/ИЛИ назовем поддерево, которое получается из заданного путем отсечения выходных дуг, кроме одной, у всех ИЛИ-узлов. Вариант в терминах решения задачи задает одно из возможных решений задачи.

Рассмотрим алгоритм подсчета вариантов решений в дереве И/ИЛИ. Для этого запишем следующую рекурсивную функцию:

w(z) =

со(s?) для ИЛИ-узла,

i~\

п

П<ф; ) для И-узла,

/»|

1 для листа,

(1)

где 2 - рассматриваемый узел дерева; {э*} - множество сыновей узла г,п- количество сыновей; со(г) - количество вариантов для узла г.

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

Рис. 1. Пример подсчета вариантов в дереве И/ИЛИ Далее, используя значения функции ®(г) для каждого узла 2, можно построить алгоритм нумерации вариантов. Этот алгоритм по номеру из данного дерева получает необходимый вариант поддерева. Предварительно зададим дне функции нумерации, которые по номеру варианта для рассматриваемого узла вычисляют номера вариантов для сыновей. Для И-узла будет следующая функция:

ОД

-тосішО,"), / > 1,

(2)

пк*;)

1

Цг) тосі со(л"), / = 1.

Для ИЛИ-узла необходимо определить не только номер варианта, но и номер соответствующего сына. Для этого запишем следующее уравнение относительно к:

Ц5І) = -

Цг), Цг) < сф;), к = 1, шт[1(г)-^а($р], Ц^)>0, к>\.

(3)

г\

5. Все сыновья рассматриваемого узла г

записываюгся в данный вариант, добавляются в список и для каждого узла вычисляется £($/), используя выражение (2).

6. Если это ИЛИ-узел, то определяется единственный сын 5*', заносится в список и определяется /.(),

используя выражение (3).

7. Переход на шаг 3.

Работа алгоритма генерации варианта поддерева по заданному номеру для примера (рис. 1) имее т всего шесть вариантов (рис. 2).

2)

3)

Пусть даны И/ИЛИ дерево Д где {л-,}"., - множество узлов, и некоторое число I, 0 й Л < , где

5(ПЙ, - корень дерева. Тогда алгоритм построения варианта поддерева по заданному номеру £ будет следующий:

1. Первоначально производится подсчет количества вариантов для каждого узла дерева <о(г), г е {^}.

2. В вариант записывается корень дерева и заносится в список

3. Из списка вынимается пара <2,1>=Н$1.ри11()' Если список пуст, то завершить работу.

4. Определяется тип текущего узла Если это И-узел, то переход на шаг 5, иначе переход на шаг 6.

Рис. 2. Все варианты для примера И/ИЛИ дерева

3. Использвание деревьев И/ИЛИ для перечисления арифметических выражений

В общем случае задача нумерации всех выражений, языка, заданного некоторой грамматикой, неразрешима. Однако для конкретного вида грамматики можно найти алгоритмы нумерации [9, 10]. Ниже предлагается метод, основанный на использовании преобразования грамматики в дерево И/ИЛИ и применении соответствующего алгоритма нумерации.

Как известно из [ 11], грамматика задается четверкой ^,Т,Р,Я), где N - множест во нетерминальных символов; Т- множество терминальных символов;

Р — множество правил преобразований; £ — начальный нетерминал.

Рассмотрим простую контекстно-свободную грамматику для записи арифметических выражений:

1. {Е, Т, £>} - множество нетерминалов.

2. Е-начальный нетерминал.

3.{+, *, /, (, ), *} - множество терминалов.

4.11равила подстановок:

(р 1) Е => Е + Т (р2) Е => Е - Г (рЗ)Е => Т (р4)Т => Т*Э (р5)Т => Т/О (р6)Т=> Э

(Р7) D => (Е)

(р8) О => х

Грамматику G можно представить деревом И/ИЛИ, ограничивая глубину рекурсии для применения правил. Для этого используем следующий алгоритм:

1. Корнем дерева И/ИЛИ является начальный нетерминал Е грамматики G.

2. Находится нетерминал А € N из списка листьев И/ИЛИ дерева и определяются все правила, левая часть которых содержит нетерминал Л.

Для каждого найденного правила организуется узел р;, который станет сыном узла А. Все символы правой части записываются как сыновья узла рг Узел, соответствующий нетерминалу А, становится ИЛИ-узлом. Узлы, соответствующие правилам рр становятся И-узлами.

3. Задавая ограничение на правила, содержащие рекурсию, можно добиться построения И/ИЛИ дерева, листьями которого будут только терминалы.

Рассмотрим оценки размеров деревьев И/ИЛИ для грамматик с ограниченной глубиной рекурсии. Общее число узлов в дереве для правил р1,р2,рЗ можно описать следующей рекурсивной функцией:

/(и) Л1’ " = 0,

|2/(л-1) + 9, и > О,

где п - глубина рекурсии. А число узлов Т в зависимости от глубины рекурсии п будет

/(rt) = {1, " = 0,

[2t(n -1) •+■ 3, п> 0.

Тогда, исключив рекурсию, получим следующее

выражение для функции f(n): /'(и) = 5-2'н1-9.

А для t(n): t(ri) = 2"*2 - 3.

Тогда число узлов в ИЛИЛИ дереве для правил pi, р2, рЗ с заданной глубиной рекурсии п без узлов Т будет вычисляться по формуле

<7(«) = /(")-'(и) = 3-2’’,,-6.

С учетом того, что правиларЗ,р4,р5 аналогичны р],р2.рЗ, получим формулу подсчета количества узлов для правил pi, р2, рЗ, р4, р5, рб:

p(n,m) = q(n) + t(n)q(m) + t(n)t(m),

где п - глубина рекурсии для нетерминала Е\ т - глубина рекурсии для нетерминала Т.

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

q(n) +t(n)q(m) +t(n)t(m), k = 0, s(n,m,k) = • q(n) + t(n)q(m) +

+t(n)t(m)s(n,m,k -1), k 0, где k - глубина рекурсии для нетерминала D. Устраняя рекурсию, получим

s(n,m,k) = [# (и) + t(n)q(m) + t(n)t(m)] х 1-[r(«)f(w)]**‘ г . . . ч1*+|

х + [t(n)t(m)Y*'.

1 -t(n)l(m)

Запишем значения функции s(n, т, к) для некоторых аргументов: s(l,1,1)=1561, s(2,2,2)=12 067 021, s(3,3,3)-l 250 616 032 401, s(4,4,4)=l 783 357 279 157 206 501.

Очевидный экспоненциальный характер функции s(n, т, к) приводит к тому, что даже при малых значениях т, п, к нельзя использовать явный алгоритм построения ШИЛИ дерева.

Рис. 3. Фрагмент дерева И/ИЛИ для грамматики в

4. Алгоритм перечисления арифметических выражений

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

Этот алгоритм базируется на том свойстве, что структура И/ИЛИ дерева может быть задана рекурсивно. Отсюда можно записать рекурсивные функции подсчета вариантов И/ИЛИ дерева для каждого узла Е, Т и £). Запишем функции подсчета вариантов для дерева (рис. 3), используя выражение (1) для подсчета вариантов в дереве И/ИЛИ. Тогда для узла Е (это ИЛИ-узел по определению) будет и(£(л,шД)) = аз(р\(п,т,к)) + <й(р2(п,т,к)) + +<й(рЗ(п,т,к)). (4)

Для узлов р1, р2, рЗ (это И-узлы )

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

(й(р\(п,т,к)) = со(Е(п - \,т,к))ш(Т(п,т,к)), (5)

со(р2(п,т,к)) = со(Г(п,т,к)),

(6)

со(рЗ(п,т,к)) = со(Е(п - ],т,к))ы(Т(п,т,к)). (7)

Подставляя полученные выражения (5)—(7) в (4) и упрощая запись для обозначения количества вариан-

шт

0)Е(п,т,к) =

и>г (п,т,к) =

0)0(п,т,к) =

тов, получим следующую рекурсивную функцию для подсчета вариантов в И/ИЛИ дереве для узла Е(п, т, к): 2cof(w - 1 ,т,к)оаТ(п,т,к) +

+юг(п,т,к), п > О,

1, п = 0.

Аналогично запишем функции подсчета вариантов для Т(п,т,к) и D(n,m,k):

2(ог(и,т - \,к)фв(п,т,к) + +u>D(n,m,k), т > 0,

1, т - 0, fcog(n,m,£-l), &>0,

[1, к = 0.

Ниже приведены значения функции &Е(п,т,к):

оэе(1,1,1)=1 961 190,

О)f (2,2,2) =8 374 524 791 605 526 331.

Алгоритм перечисления выражений для грамматики арифметических выражений с заданной глубиной рекурсии похож на метод рекурсивного спуска, применяемый при разборе ^/--грамматик [11]. Параметр пит задает номер выражения, которое нужно получить. Параметры п,т,к задают глубину рекурсии для узлов Е, T,N. Построение выражения начинается с функции FuncE. Если рекурсия запрещена (и=0), то вызвать FuncT(). Далее вычисляется номер правила pi, р2 или рЗ, при этом используется выражение (3) для узла ИЛИ. Далее для каждого правила р!,р2 и рЗ производится вычисление значений пит. После этого, используя выражение (2) для определения номеров сыновей И-узла, вычисляем значения пит для функций FuncE и FuncT.

FancE(num,n,m,k)

begin

if n = 0 then FuncT(num,n,m,k) [рекурсия запрещена} else

if пит <<о£(и — \,т,к)(йТ(п,т,к) then begin {правило pi)

FuncE(num / a>r (n -1, m, к), n -1, m, k) print(«+»)

FuncT (n um mod озТ(п,т,к),п,т,к) end

if пит < со£(л -\,m,k)(oT(n,m,k) + юТ(п,т,к) then begin {правило p2)

FuncT(num - oog(n -1,m,k)a>r(n -1,m,k),n -1 ,m,k) end

else begin {правило рЗ}

пит = пит -соF(n- 1,т,к)слТ(п,т,к) -<oT(n,m,k)

FuncE(num t (or(n -\,m,k),n -1 ,m,k) print(«—»)

FuncT (num mod a>T (n, m,k), n,m,k) end

endfunc

FuncT (num,n,m,k) begin

if n = 0 then Func1\num,n,m,k) {рекурсия запрещена) else

if num <wT(n,m - \,k)a>D(n,m,k) then begin {правило p4\

FuncT (пит I a>D(n,m-\,k),n,m-i,k) print(«*»)

FuncD(num mod co0 (я, m,k), n, m, k) end

if num <(>)r(n,m-\,k)(oD(n,m,k) + 0)D(n,m,k) then

begin {правило p5)

FuncD(num~G>r(n,m - \,k)ton(n,m-l,k),n,m - 1,A)

end

else

begin {правило рб} num - num-w1(n,m-],k)<>>[>(n,m,k)-(i>D(n,m,k)

FuncT (пит I (aD(n,m ~\,k),n,m -1,&) print(«lv>)

FuncT (num mod (л0(п,т-\,к),п,т-\,к) end

endfunc

Функция для узла D и правил р7, р8 ¥uncD(num,n,m,k) begin

if k = 0 or num=0 then print («х») [рекурсия запрещена} else begin print(«(»)

FuncE (num -\,n,m,k-\) print(«)») end

endfunc

Фрагмент работы алгоритма для n= 1, m=l, k=l приведен в таблице.

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

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

num FuncE(num,l,M)

4707 • х*(х+х*х)+(х*х)/(х/х-х/х)

4708 х*(х+х*х)+(х)/х

4709 х*(х+х*х)+(х)/(х*х+х*х)

47 Ю х*(х+х*х)+(х)/(х*х+х)

4711 х*(х+х*х)+(х)/(х*х+х/х)

. . . • • •

1948695 (х/х-х/х)/(х/х+х/х)-(х-х)*(х*х+х*х)

1948696 (х/х-х/х)/(х/х+х/х)-(х-х)*(х*х+х)

1948697 (х/х-х/х)/(х/х+х/х)-(х-х)*(х*х+х/х)

1948698 (х/х-х/х)/(х/х+х/х)-(х-х)*(х+х*х)

ных объектов (возможно бесконечную). Запишем основные лапы метода построения генерирующею алгоритма:

1. Проводятся исследования с целью прямого преобразования информационной модели в фиксированное дерево И/ИЛИ.

2. Если прямого преобразования не найдено или оно не эффективно, то проводятся исследования с целью получения алгоритма построения дерева И/ИЛИ.

3. Проводятся исследования свойств полученного дерева И/ИЛИ или алгоритма построения.

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

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

Литература

1. Гульден Я., Джексон Д. Перечислительная комбинаторика. М., 1990.

2. Стенли Р. Перечислительная комбинаторика. М., 1990.

3. Akl S.G. A comparison of combination generation methods II ACM Trans, of Math. Software. 1981. № 7.

4. Akl S.G. Adaptive and optimal parallel algorithms for enumerating permutations and combinations II The Computer J. 1987. № 30.

5. Slagle J.R. A heuristic program that solves symbolic integration problems in freshmen calculus II E. Feigenbaum and J. Feldman, editors, Computer and Thought, pages 192-203, McGraw-Hill. N.-Y., 1963.

6. Nilsson N. Principles of artifical intelligence. Spring Verlag, 1983.

7. Ефимов Е.И. Решатели интеллектуальных задач. М., 1982.

8. Братко И. Программирование на языке Пролог для искусственного интеллекта. М., 1990.

9. Ландо С.К. Комбинаторика. М., 1994.

10. Makinen Е. Ranking and unranking left szilard languages. University of Tampere, Departament of Computer Science, Series of Publications AA-1997-2, Jan., 1997.

11. Axo А., Ульман Дж. Теория синтаксического анализа, перевода и компиляции. Т. 1. М., 1978.

12. Кручинин В.В. Генераторы в компьютерных учебных программах. Томск, 2003.

УДК 519.711.3

С. Б. Бочки, М. У. Изи.пов

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

Братский государственный технический университет

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

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

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

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