Т.В. Бурзалока, Некоторые задачи теории графов в системе "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
# 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,