Научная статья на тему 'Некоторые задачи теории графов в системе "Mathematica"'

Некоторые задачи теории графов в системе "Mathematica" Текст научной статьи по специальности «Математика»

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

Аннотация научной статьи по математике, автор научной работы — Бурзалова Т. В.

В данной работе рассматривается применение компьютерной системы «Mathematica» при решении комбинаторных задач школьной математики. Внедрение этой методики в школьный курс значительно повышает эффективность обучения решению сложных и трудоемких задач комбинаторики.

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

Some tasks of graph theory in system " Mathematica "

In the given work is considered application of computer system " Mathematica " at the decision of combinatory tasks of school mathematics. Introduction of this technique in a school rate considerably raises a learning efficiency to the decision of difficult and toilful tasks of graph theory.

Текст научной работы на тему «Некоторые задачи теории графов в системе "Mathematica"»

Т.В. Бурзалока, Некоторые задачи теории графов в системе "Mathematica " 29

Т. В. Бурзалова

Россия, Улан-Удэ, Бурятский государственный университет Некоторые задачи теории графов в системе "Mathematica"

В данной работе рассматривается применение компьютерной системы «Mathematica» при решении комбинаторных задач школьной математики. Внедрение этой методики в школьный курс значительно

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

>

T.V. Burzalova

Some tasks of grapb theory in system " Mathematica "

In the given work is considered application of computer system " Mathematica " at the decision of combinatory tasks of school mathematics, introduction of this technique in a school rate considerably raises a learning efficiency to the decision of difficult and toilful tasks of graph theory.

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

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

Приведем решение нескольких таких задач с использованием компьютерной системы "Mathematica". Стандартный пакет расширения «D iscreteMath1Сombinatoriса" этой компьютерной системы обладает богатейшим набором встроенных функций теории графов и комбинаторики (около 450). Он содержит функции для конструирования графов и других комбинаторных объектов, вычисляет их инварианты и, наконец, позволяет создать их графическую визуализацию.

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

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

ад - 1= {{яй, ги2, гвЗ, vi, VZ, v3, Ь}, (яй, я2, шЭ, vi, Ь) , (лй, И2, m3, v2, Ь) , {mi, гв2, тЗ, v3, Ь] , (rol, я£, vi, v2, Ь} , (яй, тЗ, vlf v3, Ь) , (Ш2, шЗ, v2, v3, Ь), {mi, ш2, тЗ, v2, Ь} , {mi, ш2, тЗ, v3, ЪЬ (лй, м2, тЗ, v2, v3, Ь), {ral, т2, гаЗ, vi, v3, Ь}, (вй, й2, »3, vi, v2, Ь), (яй, vi, Ь} , {т2, v2, Ь), {тЗ, v3, Ь}, {vi, v2, v3, Ь>, {vi, v2, Ь> , (vi, v3, Ь), {v2, v3, Ы , (пй, вЙ, тЗ, vi, о}, {пй, в2, тЗ, v2, о), )ш1, пЙ, тЗ, v3, о), {яй, я2, vi, v2, о), {яй, тоЗ, vi, v3, о) , {го2, тЗ, v2, v3, о) , {mi, Ш2, тЗ, v2, о} , {mi, т2, тЗ, v3, о} F {mi, ш2, юЗ, о} , {дй, vi, о}, {Я2, v2, о), {тЗ, v3, о), (vi, v2, о), {vi, v3, о), [v2, v3, о), {vi, о) , (v2, о) , {v3, о}, {о});

Этот список содержит 38 элементов.

Inl3|= Lengthíl]

Ш[3]= 38

Построим бинарное отношение на множестве 1:

114):= кГ =

MDdule[{t=03nplanenfc[#l, #2]}, Length[#2] -LengthE#l] 1 &SLast[#l] =1= Last[#2] SSLast[#l] = oSSLength[#2] =!=7И Iengtb[Cc«plenent[#2, #1]] == 2 ц Length[#2l -Leng£h[#l] ==• 2 SS Last(#l] =! = Xast[»2) S& Last[#l] == ü£&Length[#2] = ! = 7SSLBngth[Conplatent(((2, #1]] == 3 11

{LengtJi{#l] - Length[#2) - 2íSLast[#lj = ¡= Last[#2j ííLaígth[Coiplement(#lf #2]J a 3S4Iast[#l] == bj ] i, Построим граф с вершинами в точках множества 1, причем две вершины связаны ребром, если они удовлетворяют отношению кг:

|п[5):= ShowLabeledSraph[g = MakeGraph[l, кг], BdgeDirection-> Truej

Рассмотрим кратчайший путь из первой вершины в тридцать восьмую: fn[Sj- ShortestPath[g, 1, 38]

Out[S)= (1, 21, 10, 28, 2, 29, 5, 32, 16, 35, 13, 38}

Рассмотрим исходные метки соответствующих вершин, именно они показывают искомое решение задачи:

¡r(7]:= tep[l[[#]j &, ShortestPath[g, 1, 38]]

Ш[7]= {{mi, ш2, тЗ, vi, v2, v3, bj, {mi, m2, m3, v2, o}, [mi, m2, m3, v2, v3, b}, {mi, m2, m3, o),

{ral, m2, m3, vi, b}, {mi, vi, o), {ral, ra2, vi, v2, b}, {vi, v2, o}, [vi, v2, v3, b], [vi, o], [mi, vi, b), (o}} Выделим кратчайший путь от первой до тридцать восьмой вершины: tftS!:= ShowLabeledGraph[Highlic^it[g, {Partítion[ShortestPath[g, 1, 38], 2, 1]}]]

Улучшим вложение графа с помощью встроенной функции RankedEmbedding: lr(9j= ShowGraph[RankedQttoecMing[g, {1}], EdgeDixectionTrue]

V

Вьщелим гамильтоиов цикл:

irflO]™ ShowGraphf Highlight [ RankedEufcedding [ g, {!}], {Parti tionfShortestPathfg, 1, 38], 2, Ij > J J

Задача. Требуется перечислить все перестановки множества {1,2,,..,п} в таком порядке, чтобы каждая последующая перестановка отличалась от предыдущей ровно одной транспозицией.

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

Заметим, что две перестановки находятся в отношении Р, если они отличаются как упорядоченные множества ровно в двух позициях. Следующая функция определяет Р:

1п[25И Р = (р. #1; q = #2; к= 0; Do[If[p[[iJ] «q[[i]], , кзк+1], l±, 1, Langtfc[#l])] ; If [к== 2, True, False]} &;

Мы определили функцию Р от двух аргументов, здесь р=#1 -первая перестановка, q~U2- вторая перестановка, далее в цикле Do[] подсчитываем количество к несовпадающих позиций в этих перестановках. Функция возвращает True, если Рассмотрим пример для перестановок длины 4.

hi(27}:= gs MakeGraph[Pmraitations[4] , P, Type-* Undixected]

Ouf[27)= -Graph:-;72, 24, Undirected:» -

Для наглядности построим ранжированное вложение вершин этого графа относительно первой вершины:

ln(2Sj = ShowGr^di[RankedEubedding[g, {!}]]

Я

/ \

«Г

Если мы хотим определить перестановку, соответствующую каждой вершине графа g , то достаточно в теле графа установить опцию Уег1ехЬаЬе!->Тгае, но метки сильно загромождают рисунок.

ЩЩ- Ь = МакебгарЬ [ РагпкЛа-Ь.опз [ 4 ], Р, Туре -» ШсЛгесЬес!, Уег±ехЬаЬе1 Тгие]; ShawGra$>h[Ran]cedEIIbeddmg[h, {1}]]

4321

"A'-v:

3214 - ' ■■■■^--у...... .■..._ 4312

4123 . _ 3421

_ 2134 • ^ 3241 \

-...-. _ 3124 • ▼

* 14эй ' _ 1324 л 3142

... ^ 2431 ■.-■у-. V 2413

У- # 2314 - '' .^¿im ■i'1342

ф 1243 ■. 2341

Проверим, является ли граф g гамильтоновым:

!п[30]:= HamiltotiianCycle[g]

Ои[ЭО|= (1, 2, 4, 3, 5, 6, 12, 7, 8, 10, 9, 11, 17, 14, 13, 15, 16, 18, 24, 19, 20, 23, 21, 22, 1}

Выделим этот гамильтонов цикл в графе:

ShowGraph[RanJcedEnbeddingrHighlight[g, {Partition[HaniltOTiianCycle [ g], 2, l]f], {!}]]

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

Inf32]:= GetVerfaaxIabels [ h, HamiltonianCycXe [ h] ]

CU[33J= {1234, 1243, 1342, 1324, 1423, 1432, 2431, 2134, 2143r 2341, 2314,

2413, 3412, 3142, 3124, 3214, 3241, 3421, 4321, 4123, 4132, 4312, 4213, 4231, 1234} Построим расстояния в графе от первой вершины: 1п[34]:= RankGraph[g, {1}]

Out(34i= {X, 2, 2, 3, 3, 2, 2, 3, 3, 4, 4, 3, 3, 4, 2, 3, 3, 4, 4, 3, 3, 2, 4, 3} Рассмотрим распределение расстояний:

(п(35|:= Distribution[RankGraph[g, {1}]] OU[35)= {1, 6, 11, 6}

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

То же самое можно вычислить с помощью числа Стерлинга первого рода: 436]:= Table[StirlingFirst[4, i], {i, 4, 1, -1}]

Out{36H {1, б, 11, 6}

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

Требуется перебрать все перестановки множества {1,2,...,п} в таком порядке, чтобы каждая последующая перестановка отличалась от предыдущей во всех позициях. Известно, что перестановки лу и nj отличаются друг от друга во всех позициях, если произведение (я])лхя2 есть перестановка без неподвижных точек.

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

inf3S]:- d= DerangementQfPermutefInversePermutation[#1 ], #2]] &;

dgraph= MakeGraph[Permutations[4], d, Type-» Undirected, VertexLabel True]

M[40]= -Graph:<108, 24, Undirected^

Т. В, Бурзалова. Некоторые задачи теории графов в системе "Ма!ИетаИса "__35

Чтобы последовательность вершин и ребер в гамильтоновом ш^кде была рви о выделена, лучше выделить гамильтонов цикл анимацией. Для этого выделим последовательность вершин и ребер гамильтонова цикла:

ВД-- з= а, 8], 8, {8, 3], 3, {3, 11}, и, (11, 4}, 4, {4, 7), 7, {7, 21,2, {2, 9}, 9, {9, 5}, 5, (5, 1С), 10, {10, б) , 6, (6, 13) , 13, £13, 12}, 12, {12, 19} , 19, {19, 15}, 15, {15, 20} , 20, {20, 16}, 16, {16, 23) , 23, {23, 18}, 18, <18, 21}, 21, '{21, 14), 14, {14, 22}, 22, {22, 17}, 17, (17, 24}, 24, {24, 1}};

Ф

Эта команда в динамике покажет прохождение вершин цикла:

1г[47] = йшлlateGraph[RaIlkedEldDвdding[h, {X}], г]

_ <1231

^ Т

1П43

Дважды кликнув по этому рисунку, можно увидеть прохождение по всем вершинам и ребрам гамильтонова цикла:

ir(4S];= GetVertexLabels [ h, HanriJ.tenianCycle[h] ]

0ut[48j= {1234, 2143, 1324, 2413, 1342, 2134, 1243, 2314, 1423, 2341, 1432,

3124, 2431, 4123, 3214, 4132, 3241, 4312, 3421, 4213, 3142, 4231, 3412, 4321, 1234}

Эту задачу можно решить с помощью бинарного отношения Q:

(рг |l;q = #2; ks 0; Do[If[p[[i]) =! = q[[i]], , k.k+1], {i, 1, Lengih[#l]>]; If[k>0, False, TrueJ) 4;

Или проще:

in[50j:= Q= (Count[#l-#2, 0] == 0)

Построим граф отношения Q:

(r(Si!= ShowGraphi

EanfcadEntoesiilnglSetGraphOptiarisig = MakeGraph[ PsnnutafcLons [ 4] , Q, Гурвч №directsd, VertexLabel True] {1, 8, 10, 11, 14, 17, 18, 19, 23, 24, VertexLabelltositionUpperLeft)], [!}], PlotRange-t 0.25]

<3231 4213

1234

; 1423

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

# 1342

# 1.324 ^ 1243

3124 2431 2314 2134 1432

32^1 3214

Выведем вершины гамильтонова цикла:

in[52j:= GetVertexLabels [ g, HareHtonianCycle[g] ]

Out[52]= {1234, 2143, 1324, 2413, 1342, 2134, 1243, 2314, 1423, 2341, 1432,

3124, 2431, 4123, 3214, 4132, 3241, 4312, 3421, 4213, 3142, 4231, 3412, 4321, 1234}

Литература

(.Сурикова C.B., Анисимова MB. Использование графовых моделей при решении задач// Нач.школа.-2000.-№4.-С. 56-62.

2. Сангалова М.Е. Формирование метода графового моделирования //Перспектива: межвуз. сб. науч. трудов.-Арзамас: АГПИ, 2003.-С.15Ы54,

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