Научная статья на тему 'Машинное решение задач дискретной математики'

Машинное решение задач дискретной математики Текст научной статьи по специальности «Математика»

CC BY
573
51
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
БУЛЕВА ФУНКЦИЯ / ПОЛНАЯ СИСТЕМА / САМОДВОЙСТВЕННОСТЬ / ПОЛИНОМ ЖЕГАЛКИНА / ГРАФ / МАКСИМАЛЬНЫЙ ПОТОК / BOOLEAN FUNCTION / FUNCTIONALLY COMPLETE SET / SELF-DUAL FUNCTIONS / ZHEGALKIN POLYNOMIAL / GRAPH / MAXIMUM FLOW

Аннотация научной статьи по математике, автор научной работы — Горюшкин Алесандрпетрович

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

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

MACHINE RESOLVING OF DISCRETE MATHEMATICS PROBLEMS

This paper discussed problems connected with machine study of Boolean functions and graph algebras. The results of this paper may be used in analysis of the subalgebras structure of the prototypical Boolean algebra and for resolving of graph algebras problems.

Текст научной работы на тему «Машинное решение задач дискретной математики»

Вестник КРАУНЦ. Физ.-мат. науки. 2011. № 2 (3). C. 58-68

Информационные и вычислительные технологии Informational and computational technologies

УДК 519.71

МАШИННОЕ РЕШЕНИЕ ЗАДАЧ ДИСКРЕТНОЙ

МАТЕМАТИКИ

Горюшкин А.П.

Камчатский государственный университет имени Витуса Беринга, 683032, г. Петропавловск-Камчатский, ул. Пограничная , 4

Филиал Дальневосточного Федерального государственного университета, 683031, г. Петропавловск-Камчатский, ул. Тушканова, 11/1

E-mail: as2021@mail. ru

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

Ключевые слова: булева функция, полная система, самодвойственность, полином Жегалкина, граф, максимальный поток

(с) Горюшкин В.А., 2011

MSC 03G05

MACHINE RESOLVING OF DISCRETE MATHEMATICS PROBLEMS

A.P. Goryushkin

Kamchatka State University by Vitus Bering, 683032, Petropavlovsk Kamchatskiy, Pogranichnaya st, 4, Russia

Branch of the Far Eastern Federal State University, 683031, Petropavlovsk-Kamchatsky, Tushkanova st., 11/1, Russia E-mail: as2021@mail. ru

This paper discussed problems connected with machine study of Boolean functions and graph algebras. The results of this paper may be used in analysis of the subalgebras structure of the prototypical Boolean algebra and for resolving of graph algebras problems.

Key words: Boolean function, functionally complete set, self-dual functions, Zhegalkin polynomial, graph, maximum flow

(c) Goryushkin A.P., 2011

Введение

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

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

Машинное решение задач в алгебре булевых функций

Важную роль в алгебре булевых функций (как, впрочем, и в любой алгебре) играют порождающие множества. Алгебра < P; S > имеет одноэлементные порождающие множества (полные функции). Нахождение «вручную» всех полных функций от n переменных достаточно легко удается лишь для небольших значений n. Уже для случая n = 4 решение этой задачи встречается со значительными техническими сложностями.

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

Следуя методике, предложенной в [1] и [2], одноэлементную полную функцию f (x, y, z, t, и) от пяти переменных будем искать в виде полинома Жегалкина. Одночленам этого полинома соответствуют подмножества множества {x, y, z, t, и}. Этих подмножеств всего лишь 25, перечислить их несложно и без машины; но, во избежание возможных ошибок, найдем все эти 32 подмножества машинным способом. Для этого сначала с помощью команды with(combinat) войдем в пакет «Discrete Mathematics»:

> with(combinat):

> choose([x,y,z,t,u]);

[[], М, [y], [xy], [z], [xz], [y,z], tx,y,z], и, tx,t], [y,t], tx,y,t], [z,t],

[x, z, t], [y, z, t], [x, y, z, t], [и], [x, и], [y, и],

[x, y, и], [z, и], [x, z, и], [y, z, и], [x, y, z, и],

[t,и], [x,t,и], [y,t,и], [x,y,t,и], [z,t,и], [x,z,t,и], [y,z,t,и], [x,y,z,t,и]]

Подмножества найдены; составим для f(x, y, z, t, и) полином Жегалкина f с неопределенными пока коэффициентами:

> f:= a0*x*y*z*t*u + (a1*y*z*t*u + a2*x*z*t*u + a3*x*y*t*u + a4*x*y*z*u + a5*x*y*z*t) + (a6*z*t*u + a7*x*t*u + a8*y*t*u + a9*x*y*z + a10*x*y*u + a11*y*z*t + a12*y*z*u + a13*x*z*t + a14*x*y*t + a15*x*z*u) + (a16*x*y + a17*y*z + a18*x*z + a19*t*u + a20*z*t + a21*x*u + a22*x*t + a23*y*u + a24*z*u + a25*y*t) + (a26*x + a27*y + a28*z + a29*t + a30*u) + 1:

Если функция f(x, y, z, t,и) совпадает со своей двойственной, то она не может быть полной, так как самодвойственные функции образую собственную подалгебру в алгебре < P; S >.

Выясним, для каких значений коэффициентов a, функция f совпадает со своей двойственной f*. Для этого вычислим на машине функцию f * (x, y, z, t, и) -двойственную для f(x, y, z, t, и), и вычтем ее из многочлена f.

Для этого используем машинные команды для работы с многочленами. Знать, как выглядит получившийся в результате многочлен (обозначим его f1), нам пока не нужно. Полином Жегалкина строится над полем Z2, поэтому вычисления проводятся по модулю 2.

> f1: = expand(f - (subs(x = x+ 1, y = y + 1,z = z+ 1,t = t+ 1,u = u+ 1,

f) + 1)) mod (2):

Теперь сгруппируем коэффициенты одночленов многочлена f1. Свободный член f1 удобно вычислить отдельно:

> s0: = tcoeff(f1, {x, y, z, t, u}):

> collect( f1, {x, y, z, t, u}, ‘distributed‘ );

1 + a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13 + a14 + a15 + a16 + a17 + a18 + a19 + a20 + a21 + a22 + a23 + a24 + a25 + a26 + a27 + a28 + a29 + a30 + a0 x y z t + a0 x y z и + a0 x y t и + a0 x z t и + a0 y z t и + (a0 + a5 + a4) x y z + (a3 + a5 + a0) x y t + (a5

+ a0 + a2) x z t + (a0 + a5 + a1) y z t + (a0 + a3 + a4) x y и + (a2 + a4

+ a0) x z и + (a0 + a4 + a1) y z и + (a3 + a0 + a2) x t и + (a3 + a0 + a1)

y t и + (a2 + a0 + a1) z t и + (a0 + a1 + a11 + a9 + a12 + a4 + a5) y z +

(a0 + a10 + a1 + a4 + a12 + a3 + a8) y и + (a2 + a0 + a3 + a7 + a5 + a13 + a14) x t + (a13 + a11 + a1 + a5 + a2 + a0 + a6) z t + (a0 + a15 + a2 + a1 + a6 + a12 + a4) z и + (a3 + a2 + a15 + a10 + a0 + a7 + a4) x и + (a0 + a9 + a15 + a2 + a5 + a4 + a13) x z + (a3 + a11 + a5 + a1 + a8 + a0 + a14) y t + (a7 + a3 + a0 + a1 + a6 + a2 + a8) t и + (a10 + a9 + a0 + a4 + a5 + a14 + a3) x y + (a3 + a7 + a5 + a0 + a9 + a13 + a4 + a14 + a22 + a16 + a2 + a18 + a10 + a15 + a21) x + (a5 + a17 + a25 + a23 + a0 + a12 + a11 + a9 + a3 + a8 + a10 + a14 + a1 + a4 + a 16) y + (a 13 + a17 + a11 + a6 + a0 + a5 + a20 + a4 + a18 + a12 + a9 + a15 + a24 + a2 + a1) z + (a3 + a0 + a19 + a22 + a20 + a25 + a7 + a8 + a1 + a2 + a13 + a6 + a5 + a14 + a11) t + (a0 + a21 + a3 + a2 + a8 + a12 + a1 + a23 + a15 + a19 + a7 + a10 + a24 + a4 + a6 ) и

Приравняем к нулю все коэффициенты многочлена f1 и решим получившуюся систему линейных уравнений.

solve({s0 = 0, a0 = 0,(a18+a15+a13+a10+a4+a22+a9+a2+a3+a5+a0+a21+a16+a7 +a14 ) = 0, (a0+a8+a 10+a 17+a 16+a 1+a9+a5+a4+a 14+a23+a 12+a25+a 11+a3) =

0, (a11+a17+ a12+a1+a4+a6+a0+a9+a5+a13+a15+a20+a18+a2+a24) = 0,

(a 19+a 11+a 13+a7+a3+a6+a25+a0+a2+a8+a20+a 1+a5+a22+a 14) = 0,

(a3+a 15+a 10+a7+a 1+a2+a21+a0+a6+a8+a4 +a24+a19+a12+a23) = 0, (a4+a0+a9+a2+a15+a5+a13) = 0, (a5+a9+a4+a1+a12+a0+a11) = 0, (a3+a2+a7+a13+a14+a5+a0)=0, (a0+a2+a1+a13+a11+a6+a5) = 0, (a14+a11+a1+a8+a0+a5+a3) = 0, (a0+a15+a7+a10+a2+a3+a4) = 0, (a12+a0+a6+a15+a4+a2+a1)=0, (a0+a4+a5+a10+a3+a49+a14) = 0, (a7+a3+a0+a6+a8+a2+a1) = 0, (a3+a10+a12+a1+a8+a0+a4) = 0, (a4+a5+a0) = 0,(a5+a0+a3) = 0, (a5+a0+a2)=0,(a0+a5+a1) = 0, (a4+a0+a3) = 0, (a1+a4+a0) = 0, (a4+a2+a0) = 0, (a2+a0+a3) = 0,(a3+a0+a1) = 0, (a0+a2+a1) = 0}) mod(2); a0 = 0, a1 = 0, a10 = 0, a11 = 0, a12 = 0, a13 = 0, a14 = 0, a15 = 0, a16 = a24 +

а22 + а25, а17 = а24 + а22 + а23, а18 = а21 + а24 + а25, а19 = а21 + а24 +

а23, а2 = 0, а20 = а21 + а24 + а25 + а22 + а23, а21 = а21, а22 = а22, а23 = а23, а24 = а24, а25 = а25, а26 = 1 + а27 + а28 + а29 + а30, а27 = а27, а28 = а28, а29 = а29, а3 = 0, а30 = а30, а4 = 0, а5 = 0,а6 = 0, а7 = 0, а8 = 0, а9 = 0

Это значит, что девять неизвестных: а21, а22, а23, а24, а25, а27, а28, а29, а30 являются свободными; и, следовательно, число самодвойственных функций от пяти переменных, не сохраняющих ни нуль, ни единицу, равно 29 = 512. Оставшиеся из 230таких функций являются полными. Таким образом, среди функций от пяти переменных содержится

230- 29= 1073741824 - 512 = 1 073 741 312.

полных функций. Отметим, что именно благодаря машинному вычислению, число полных функций от пяти переменных, приближенно полученное в [1] и [2], получает окончательное уточнение. Уточняется и относительная плотность таких функций в Р|, равная

1073741312

~ 0,2499998808

4294967296

Отметим, кстати, что эта новая оценка значительно ближе к асимптотической оценке, равной 0,25 для функций от пяти переменных, полученной в [1].

Запишем полином Жегалкина для самодвойственной функции от пяти переменных в явном виде. «Для красоты» перенумеруем параметры от которых

> #: = 8иЬз(а0 = 0, а1 = 0, а10 = 0, а11 =0, а12 = 0, а13 = 0, а14 = 0, а15 = 0, а16 = а24+а22+а25, а17 = а24+а22+а23, а18 = а21+а24+а25, а19 = а21+а24+а23, а2 = 0, а20 = а21+а24+а25+а22+а23, а21 = а21, а22 = а22, а23 = а23, а24 = а24, а25 = а25, а26 = 1+а27+а28+а29+а30, а27 = а27, а28 = а28, а29 = а29, а3 = 0, а30 = а30, а4 = 0, а5 = 0, а6 = 0, а7 = 0, а8 = 0, а9 = 0,!): > #: = БиЬ8(а21 = а[1], а22 = а[2], а23 = а[3], а24 = а[4], а25 = а[5],а27 = а[7], а28 = а[8], а29 = а[9], а30 = а[10], g); g := 1 + «4гм + а5у? + а7у + +«9? + аюм + («4 + «2 + а5)ху +(«4 + «2 + 03) уг

+ (ал + а4 + а5)хг + (ал + а4 + а3)ги + (ал + а4 + а5 + а2 + а3 )г? + алхи + а2х? + а3уи + (1 + а7 + а8 + а9 + аю)х

На всякий случай сделаем проверку

> g0: = g - expand(subs(x = x+ 1, y = y + 1,z = z+ 1,t = t+ 1,u = u + 1,

g) + 1) mod(2): expand(g0) mod(2);

0

Проверка подтвердила, что все функции такого вида, где a; принимают всевозможные значения из множества {0, 1}, i =1,2,... 9, действительно самодвойственные. Следовательно, любая функция, полином Жегалкина которой имеет свободный член и содержит четное число одночленов, и отличная от функций указанного вида, является полной.

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

Командами with(combinat) и choose([x, y, z, t, u, w]) выпишем все подмножества множества {x, y, z, t, u, w}, и, таким образом, получим все 64 одночлена полинома Жегалкина от шести переменных.

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

> f1: = f - expand(subs(x = x+ 1, y = y + 1,z = z+ 1,t = t+ 1,u = u+ 1, w = w + 1, f) + 1) mod (2);

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

Используя команды

tcoeff(f1,{x,y,z,t,u,w}) и collect(f1, {x,y,z,t,u,w}, ‘distributed‘ ),

получим коэффициенты одночленов у многочлена f1, и так же, как для случая пяти переменных командой solve найдем решение соответствующей системы линейных уравнений.

Решение это машина выдает в виде:

{a1 = a1, a10 = a3 + a6 + a33 + a18, a11 = a13 + a37 + a40, a12 = a3 + a63 +

a17 + a33 + a18 + a47, a13 = a13, a14 = a48, a15 = 0, a16 = a16, a17 = a17, a18

= a18, a19 = a48 + a37 + a21, a2 = 1 + a1 + a8 + a4 + a32 + a16, a20 = a20, a21

= a21, a22 = a40, a23 = 0, a24 = a17 + a18 + a20 + a47, a25 = a37, a26 = a37 + a40 + a48 + a13 + a21, a27 = 0, a28 = a37 + a13 + a21, a29 = 0, a3 = a3, a30 = 0, a31 = 0, a32 = a32, a33 = a33, a34 = a37 + a13 + a21, a35 = a35, a36 = a37 + a40 + a48 + a13 + a21, a37 = a37, a38 = 0, a39 = a63 + a33 + a35 + a47, a4 = a4, a40 = a40, a41 = a21, a42 = 0, a43 = a48 + a37 + a21, a44 = 0, a45 = 0, a46

= 0, a47 = a47, a48 = a48, a49 = a13, a5 = a3 + a63 + a17 + a6 + a33 + a18 +

a35 + a20 + a47, a50 = 0, a51 = a13 + a37 + a40, a52 = 0, a53 = 0, a54 = 0, a55

= a37 + a40 + a48, a56 = 0, a57 = 0, a58 = 0, a59 = 0, a6 = a6, a60 = 0, a61 = 0,

a62 = 0, a63 = a63, a7 = a37 + a40 + a48, a8 = a8, a9 = a6 + a33 + a18 + a35 +

a20 + a47}

С помощью команды subs подставим найденные значения коэффициентов в представление функции f, проделаем замену переменных для удобочитаемости выражения, и получим в результате полиномы Жегалкина всех самодвойственных функций g:

g := i + (a4 + a5 + 05 + ai5)tw + (ai2 + ai4 + ai6)xyz + (ai2 + + a7)ztw + +

(ai6 + ai2 + a7)ztw + (ai2 + ai4 + ai6 + «2 + a7)xzw + (ai6 + ai2 + a7)xyw + + (ai7 + aio + 05 + aii + «6 + ai5)xt + (ag + aig + a4 + ai7 + aio + a5 + aii + a6 + ai5)xz + (ai2 + «2 + a7)xyw + (ai2 + ai4 + ai6 + a2 + a7)ytM + + (a2 + ai2 + ai4)zww + aix + + a9w + ai3

z + ai9t + a4xw + a5yw + + a6zw + agxy + ai0yw + aii zw + ai5ww + ai7yz + aigxw + a2xzt + + a7xzw + ai2yzw + ai4xtw + ai6xww + a2yww + a7yt w + ai2xtM + + ai4yzw + (a2 + ai2 + ai4)xyt + ai6yzt + (i + ai + ai9 + ai3 + 09 + оз)у + + (ag + ai7 + aio + a5)yt + (aig + aio + aii + ai5)tw + + (ag + aig + 04 + aio + 05 + ai5)zt + (ai2 + ai4 + ai6)t«w .

Здесь 19 параметров a; независимо друг от друга пробегают множество {0, 1}. Это значит, что 2^функций являются самодвойственными, и, следовательно, каждая из оставшихся 262 - 2i9 = 4611686018426863616 функций образует одноэлементную полную систему. Вычислим относительную плотность одноэлементных полных функций с двадцатью знаками после запятой:

> evalf((2~62 - 2Л19)/(2Л64), 20);

0.24999999999997157829

Оказалось, что асимптотическая оценка плотности полноты, приведенная в [1] и

[2], с большой степенью точности достигается уже для функций от шести переменных.

Машинное решение задач в алгебре графов

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

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

В качестве примера нахождения максимального потока возьмем транспортную сеть из [[3], стр. 88].

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

На данном рисунке граф сети построен с уже пронумерованными вершинами и «без подсказок» (в [3] насыщенные дуги заранее выделены жирными линиями, и читателю остается лишь сложить веса этих дуг). И насыщенные дуги, и величину потока в этой сети найдем машинным способом.

Для решения задачи сначала войдем в подпакет «Теория графов», а затем зададим матрицу смежности этого графа. Вершине истока x0 присвоим номер 1, а вершина стока (z) пусть будет под номером 8. Явный вид матрицы графа нам не потребуется.

> with(GraphTheory):

> A := Matrix([ [0, 2, 0, 0, 2, 0, 2, 0], [0, 0, 1, 1, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2], [0, 0, 0, 0, 0, 0, 0, 2], [0, 0, 1, 1, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2], [0, 0, 1, 1, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0] ]):

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

G := Digraph(A, weighted);

G := Graph 1: a directed weighted graph with 8 vertices and 15 arc(s)

Машина сообщила, что матрица действительно задает граф (первый за сегодня), причем этот граф ориентированный, взвешенный с 8 вершинами и 15 дугами. Теперь выясним, является ли граф О с такой матрицей сетью.

> 1БЫе1'№0гк(О);

{1}, {8}

Да, это сеть; вершина с номером 1 является истоком сети, а вершина 8 - ее сток. Теперь дадим команду нарисовать граф.

> Ога’№Ые1’мэгк(О);

Получено изображение графа точно такое же, как в [3] (передвижения вершин по плоскости не считаются). Любопытства ради, спросим, не планарный ли это граф?

> IsPlanar(G, ’F’);

false

Граф не планарный, хотя машину можно было и не спрашивать: невооруженным глазом видно, что подграф на вершинах {2, 3, 4, 5, 6, 7} является полным двудольным графом Кз,зс долями {2, 5, 7} и {3, 4, 6 }.

Переходим, наконец, к поставленной задаче. Найдем величину максимального потока и подграф, реализующий этот поток. Команда MaxFlow(G, m, n), где m, n номера вершин истока и стока соответственно, выдаст величину потока и матрицу смежности нужного подграфа.

> MaxFlow(G, 1, 8);

С помощью матрицы смежности построим подграф максимального потока. Разместим изображение этого подграфа на исходном графе.

> A1 := Matrix([[0, 2, 0, 0, 2, 0, 2, 0], [0, 0, 1, 1, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2], [0, 0, 0, 0, 0, 0, 0, 2], [0, 0, 1, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 2], [0, 0, 0, 1, 0, 1,

0, 0], [0, 0, 0, 0, 0, 0, 0, 0]]):

> G1 := Digraph(A1, weighted);

'0 2 0 0 2 0 2 0"

0 0 1 1 0 0 0 0

0 0 0 0 0 0 0 2

0 0 0 0 0 0 0 2

0 0 1 0 0 1 0 0

0 0 0 0 0 0 0 2

0 0 0 1 0 1 0 0

0 0 0 0 0 0 0 0

G1 := Graph 2: a directed weighted graph with 8 vertices and 12 arc(s)

> DrawNetwork(Gl);

Для многовершинного графа задача нахождения минимального пути в графе может оказаться не менее трудоемкой. В качестве примера нахождения кратчайшего пути возьмем граф из [[3], стр. 80], где требуется найти кратчайший путь между вершинами хо и х9.

Для решения задачи сначала войдем в подпакет «Теория графов», зададим наш граф перечислением ребер - множества Е, и посмотрим на его и изображение. Номера вершин для упрощения записей переобозначим: вместо х будем писать просто

І.

> ’ИЬ(ОгарЬТЬеогу):

> Е :={[{0, 1}, 1], [{1, 2}, 10], [{2, 9}, 5], [{0, 3}, 10], [{3, 4}, 4], [{4, 9}, 2], [{0, 5}, 6],

[{5, 6}, 3], [{6, 9}, 8], [{0, 7}, 3], [{7, 8}, 8], [{8, 9}, 5], [{3, 5}, 4], [{3, 2}, 1], [{3, 6}, 1],

[{4, 6}, 5], [{7, 5}, 2], [{7, 6}, 6], [{1, 3}, 10], [{2, 3}, 1], [{2, 4}, 2], [{6, 8}, 3]}:

> G := Graph(E);

G := Graph 3: an undirected weighted graph with 10 vertices and 21 edge(s)

Машина сообщила, что граф номер 3 неориентированный, взвешенный с 10 вершинами и 21 дугой. Даем команду нарисовать граф.

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

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

Найдем теперь кратчайший путь в графе G, соединяющий вершины 0 и 9.

> DijkstrasAlgorithm(G, 0, 9);

[[0, 7, 5, 3, 2, 4, 9], 14]

Зададим подграф кратчайшего пути перечислением ребер и выполним рисунок графа с уже выделенным подграфом.

> E:= {[{0, 7}, 3], [{7, 5}, 2], [{5, 3}, 4], [{3, 2}, 1], [{2, 4}, 2], [{4, 9}, 2]};

> H:= Subgraph(G, E):

> DrawGraph(G,style = spring);

Задача нахождения кратчайшего пути в графе решена полностью.

В качестве «последнего штриха» в этой задаче вернемся к исходному графу из

[3], выделив на нем кратчайший путь, найденный компьютером:

Литература

1. Горюшкин А.П. Об одноэлементной функциональной полноте в алгебре булевых функций // Вестник КРАУНЦ, Сер. физ.-мат. науки. - 2011 - № 1 (2). - С. 6-15.

2. Горюшкин А.П. Полные булевы функции // Вестник Камчатского государственного технического университета, Петропавловск-Камчатский, выпуск 15, 2011 - С. 5-11.

3. Берж К. Теория графов и ее применения .М. : ИЛ, 1962, 320 с.

Поступила в редакцию / Original article submitted: 05.11.2011

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