Главная страница

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


Скачать 4.43 Mb.
НазваниеНастоящий учебник посвящен системе Mathematica прикладному пакету компьютерной алгебры, при помощи которого можно решать любые задачи, в которых в той или иной форме встречается математика
АнкорМатематика
Дата11.05.2022
Размер4.43 Mb.
Формат файлаpdf
Имя файла106-108.pdf
ТипУчебник
#521834
страница34 из 38
1   ...   30   31   32   33   34   35   36   37   38
Посмотрим, удастся ли нам породить их сразу в лексикографическом по- рядке?
Для этого заметим, что расположение перестановок в лексикографиче- ском порядке обладает следующими свойствами:
Нумерация начинается с тождественной перестановки (12 . . . n).
Все перестановки разбиваются на n блоков порядка (n − 1)!, в соответ- ствии с возрастающим значением элемента i = 1, . . . , n в первой позиции.
Внутри i-го блока перестановки множества {1, . . . , i − 1, i + 1, . . . , n}
расположены лексикографически.
Ясно, что это является готовой рекуррентной процедурой для построения перестановок n-элементного множества в лексикографическом порядке.
4.1. Дайте рекуррентную процедуру генерации перестановок в лексико- графическом порядке.
Ответ. Например, так lex[
{}]:={{}}; lex[x ]:=Apply[Join,
Table[Map[Prepend[#,x[[i]]]&,lex[Delete[x,i]]],
{i,1,Length[x]}]]
Обратите внимание, что здесь x произвольный список. Таким образом,
чтобы породить перестановки
{1, . . . , n} нужно вычислить lex[Range[n]].
Попробуем теперь дать нерекуррентную процедуру генерации переста- новок в лексикографическом порядке. Ясно, что для решения этой задачи необходимо уметь находить для каждой перестановки ту перестановку, ко- торая следует за ней в лексикографическом порядке.
4.2.
Задайте функцию, сопоставляющую перестановке непосредственно следующую за ней в лексикографическом порядке.
Ответ. Ограничимся возможным ответом, предоставляя читателю само- стоятельно разобраться — как советует Кнут! — в том, что здесь происхо- дит и почему эта программа вообще работает.
191
next[x ]:=Module[
{n=Length[x],i,j,t,y=x},i=n-1;
While[Order[y[[i]],y[[i+1]]]==-1,i--]; j=n;
While[Order[y[[j]],y[[i]]]==1,j--];
{y[[i]],y[[j]]}={y[[j]],y[[i]]};
Join[Take[y,i],Reverse[Drop[y,i]]]]
Эта откровенно жульническая программа устроена так, что вычисление next[
{4,3,2,1}] дает {1,2,3,4}, как и задумано. Но почему это происхо- дит?
191
Детали на чуть другом языке можно найти в книге В. Липский. Комбинаторика для программистов – М:”Мир”, 1988, 213 C.

429 4.3.
Задайте функцию, сопоставляющую перестановке непосредственно предшествующую ей в лексикографическом порядке.
4.4. А теперь снова задайте функцию, генерирующую перестановки в лек- сикографическом порядке.
Ответ. Ну чего там, NestList[next,Range[n],n!-1].
Примерно так и работает команда LexicographicPermutations, опреде- ленная в пакете Combinatorica.
Часто удобнее пользоваться не лексикографическим, а антилексикогра- фическим порядком, при котором смотрят не на возрастание элементов начиная слева, а на убывание элементов, начиная справа. Для примера перечислим элементы S
3
в антилексикографическом порядке:
(1 2 3),
(2 1 3),
(1 3 2),
(3 1 2),
(2 3 1),
(3 2 1).
4.5. Дайте рекуррентную процедуру генерации перестановок в антилекси- кографическом порядке.
Указание. Для этого опишите свойства расположения перестановок в ан- тилексикографическом порядке — это и будет почти готовой рекуррентной процедурой.
Ответ. Как и выше, mutatis mutandis:
antilex[
{}]={{}}; antilex[x ]:=Apply[Join,
Table[Map[Append[#,x[[i]]]&,antilex[Delete[x,i]]],
{i,Length[x],1, -1}]]
4.6. Дайте итеративную процедуру генерации перестановок в антилекси- кографическом порядке.
Указание. Для этого, наверное, полезно определить перестановку, непо- средственно следующую за данной в антилексикографическом порядке.
4.7.
Задайте функцию, сопоставляющую перестановке непосредственно предшествующую ей в антилексикографическом порядке.
5. Транспозиции.
192
В настоящем разделе мы покажем, что симметрическая группа порож- дается самыми простыми мыслимыми перестановками. Циклы длины 2 на- зываются транспозициями. Таким образом, каждая транспозиция имеет вид w
ij
= (ij), 1
≤ i 6= j ≤ n, она переставляет элементы i 6= j и оставляет все остальные элементы множества n на месте. Ясно, что w
ij
= w
ji
, так что в действительности различных транспозиций вдвое меньше, чем пар
(i, j), i
6= j, они отвечают тем парам (i, j), в которых i < j. По определе- нию каждая транспозиция является инволюцией, т. е. элементом порядка
2. Иными словами, w
1
ij
= w
ij
192
На практике колокол неудобно сдвигать более, чем на одно место за один раз.
Остановить колокол в верхнем положении равновесия — дело довольно тонкое. c
Алиса
Дикинсон Переборы с вариациями: теория и практика из книги Узоры симметрии. —
М.: Мир, 1980, с.69–78.

430 5.1. Докажите, что каждая перестановка является произведением транс- позиций (ij), i < j.
Решение.
В следующем параграфе мы докажем, что каждая переста- новка является произведением циклов — даже независимых циклов. По- кажем поэтому, что каждый цикл является произведением транспозиций.
Мы утверждаем, что каждый цикл длины l является произведением l
1
транспозиции. В самом деле, легко видеть, что
(i
1
i
2
. . . i
l
1
i
l
) = (i
1
i
2
) . . . (i
l
2
i
l
1
)(i
l
1
i
l
).
Назовем фундаментальной транспозицией транспозицию двух со- седних символов,
s
i
= w
i,i+1
= (i, i + 1),
i = 1, . . . , n
1.
5.2. Докажите, что каждая перестановка является произведением фунда- ментальных транспозиций s
1
, . . . , s
n
1 5.3. С учетом предыдущей задачи нам достаточно доказать, что любая транспозиция w
ij
, i < j, является произведением фундаментальных. Бу- дем вести индукцию по j
− i. База индукции j − i = 1, когда транспозиция
w
ij
сама является фундаментальной. Пусть j
− i ≥ 2, причем для всех транспозиций с меньшей разностью j
− i утверждение уже доказано. Так как j
− i ≥ 2, то можно найти такое h, что j < h < j. Легко видеть,
что w
ij
= w
ih
w
hj
w
ih
, причем по индукционному предположению w
ih
и w
hj
уже являются произведениями фундаментальных транспозиций. Вот яв- ная формула для w
ij
, которая получается на этом пути:
w
ij
= s
i
. . . s
j
2
s
j
1
s
j
2
. . . s
i
.
5.4. Докажите, что группа каждая перестановка является произведением транспозиций (12), (13), . . . , (1n).
5.5.
Докажите, что группу S
n
невозможно породить менее, чем n
1
транспозицией.
5.6. Докажите, что группа S
n
порождается транспозицией (12) и длинным циклом (123 . . . n).
5.7. Верно ли, что группа S
n
порождается длинным циклом (123 . . . n) и любой транспозицией? Найдите необходимое и достаточное условие для того, чтобы S
n
порождалось длинным циклом (123 . . . n) и транспозицией
(1m).
Решение. Так как группа H =
h(123 . . . n), (1m)i содержит все транспози- ции (i, i+m
1), то она содержит и все транспозиции вида (i, i+j(m−1)), где второй индекс понимается по модулю n. В случае, когда d = gcd(n, m
1) =
1 можно выбрать j такое, что j(m
1) 1 (mod n). Тем самым, в этом

431
случае H содержит (12) и мы оказываемся в условиях предыдущей зада- чи. Если же d
2, то разобьем n на d блоков {1, 1 + d, . . . , n − d + 1},
{2, 2+d, . . . , n−d+2}, . . . , {d, 2d, . . . , n}. Ясно, что как (123 . . . n), так и (1m)
переставляет блоки, так что никакое их произведение не может отобразить
1 в 2, оставив при этом 1+d на месте. Тем самым, H собственная подгруппа в S
n
. В действительности можно доказать, что порядок H равен d((n/d)!)
d
Минимальный пример, когда d
2 – это группа h(1234), (13)i ≤ S
4
порядок которой равен 8.
5.8. Докажите, что группа S
n
порождается транспозицией (12) и циклом
(23 . . . n).
6. Переборы с вариациями.
193
При порождении перестановок в лексикографическом порядке каждая вторая получалась из предыдущей одной транспозицией. Но есть и такие,
которые требуют
b(n + 1)/2c транспозиций. Между тем для многих прило- жений важно уметь порождать перестановки в таком порядке, что каждая следующая отличается от предыдущей одной фундаментальной транспо- зицией — такой порядок перестановок называется minimum change order.
Например, при умножении перестановки на фундаментальную транспо- зицию многие комбинаторные инварианты мало меняются, скажем увели- чиваются или уменьшаются на 1. Поэтому на списке перестановок, записан- ном в minimum change order, многие комбинаторные алгоритмы работают значительно быстрее.
Исторически эта задача возникла в связи с вызваниванием переборов с вариациями = change ringing
194
. Чтобы понять, о чем идет речь, необ- ходимо знать, что традиция английского колокольного звона радикально отличается как от русской, так и от континентальной европейской. В то время как на Руси звонарь ударяет в колокол раскачивая его язык , в Ан- глии он поворачивает сам колокол при помощи специального колеса. Это значит, что на английских колоколах невозможно вызванивать сложные мелодии. Вызванивание переборов с вариациями начинается с нисходящей гаммы, в которой звучат все колокола начиная с самого маленького до са- мого большого. После этого вызваниваются всевозможные перестановки восьми колоколов — вариации = changes. Максимум того, что физически осуществимо в очередной вариации, это придержать один их колоколов с тем, чтобы переставить его с соседним колоколом по сравнению с преды- дущей вариацией. Это и есть генерация перестановок в minimum change order.
193
Если бы ты был младенцем с Криптона, то умел бы, к примеру, летать... — Я
не раз летал, — с достоинством ответил Жихарь. — Я целых два раза летал посред- ством горячего воздуха. Правда, второй раз в полном беспамятстве... — Посредством горячего воздуха нынче только ленивый не летает, — сказал Колобок. — Нет, тебе бы полагалось лететь без пара и без крыльев, одною силою духа. c
Михаил Успенский, Кого за смертью посылать
194
A. T. White, Ringing the cosets. — Amer. Math. Monthly, 1987, October, p.721–746.

432
Для примера перечислим элементы S
3
в обычном кампанологическом порядке, где принято гонять самый маленький колокол:
(1 2 3),
(2 1 3),
(2 3 1),
(3 2 1),
(3 1 2),
(1 3 2).
Обратите внимание, что здесь происходит. Вначале первый колокол пе- ремещается на последнюю позицию — на кампанологическом языке это называется hunting up, после чего происходит перестановка двух других колоколов и первый колокол снова перемещается на первую позицию —
hunting down.
При генерации S
n
первый колокол попеременно перемещается между первой и последней позицией (n
1)! раз. Эту процедуру генерации пере- становок называют алгоритмом Джонсона–Троттера
195
. Она реализо- вана в функции MinimumChangePermutations пакета Combinatorica
196
С точки зрения удобства программирования несколько естественнее го- нять не первый, а последний колокол, иными словами порождать S
3
в сле- дующем порядке:
(1 2 3),
(1 3 2),
(3 1 2),
(3 2 1),
(2 3 1),
(2 1 3).
6.1. Напишите рекуррентную программу, реализующую алгоритм Джон- сона—Троттера в варианте с гоном последнего элемента.
Ответ. Вот вариант такой процедуры, реализованный с особым цинизмом.
На четных перестановках 1, . . . , n
1 происходит гон n вниз, а на нечетных
— гон вверх. Вероятно, большинство пользователей вместо Range[n,1,-
1] предпочли бы использовать Range[n] и заменили условие и порядок исходов в условном операторе на противоположные.
minperm[0]=
{{}}; minperm[n ]:=Flatten[Outer[
If[Signature[#1]==1,
Insert[#1,n,#2],Insert[#1,n,n-#2+1]]&,
minperm[n-1],Range[n,1,-1],1],1]
6.2. То же, но с гоном первого элемента.
6.3. Напишите итеративную программу, реализующую алгоритм Джонсо- на—Троттера в варианте с гоном последнего элемента.
Указание. При желании можно написать примерно такую же процедуру,
как та, которую мы использовали при построении перестановок в лексико- графическом порядке.
197 195
S.M.Johnson, Generation of permutations by adjacent transpositions. – Math. Com- put., 1963, vol.17, p.282–285.
196
Начиная с версии 10, основная функциональность пакета Combinatorica включена в ядро Mathematica
197
Детали изложены в упомянутой выше книге В. Липский.
Комбинаторика для программистов – М:”Мир”, 1988, 213 C.

433 7. Декремент.
198
В этом разделе мы построим гомоморфизм sgn : S
n
−→ {±1}. Обо- значим через m =
|n/σ| число орбит перестановки σ ∈ S
n
. По определе- нию m = r + s, где r — количество истинных циклов перестановки σ, а
s =
| Fix(σ)|. Разность decr(σ) = n − m называется декрементом переста- новки σ. Знаком перестановки σ
∈ S
n
называется sgn(σ) = (
1)
decr(σ)
= (
1)
n
−m
=
m
Y
i=1
(
1)
|X
i
|−1
,
где произведение берется по всем орбитам X
1
, . . . , X
m
перестановки σ.
Достоинством этого определения является то, что, с одной стороны, лег- ко доказать его совпадение с обычным определением в терминах транспо- зиций, к которому мы вернемся в следующих двух параграфах, а с другой стороны, так как знак определен в терминах самой перестановки σ, вопро- са о корректности при этом не возникает. В следующих параграфах мы дадим еще два определения знака, но проверить их корректность и совпа- дение друг с другом заметно сложнее. В некоторых старых книгах знак перестановки назывался ее сигнатурой, в связи чем в Mathematica знак перестановки x вычисляется посредством Signature[x].
Signature[x]
знак перестановки x
7.1. Докажите, что τ
1
, . . . , τ
l
если транспозиции, то sgn(τ
1
. . . τ
l
) = (
1)
l
Решение.
Индукция по l. Случай l
1 очевиден. Для индукционно- го перехода достаточно показать, что знаки τ
2
. . . τ
l
и τ
1
. . . τ
l
различны.
Мы покажем, что если π — любая перестановка, а τ — транспозиция, то sgn(τ π) =
sgn(π). Достаточно показать, что число орбит изменяется на
1. Пусть τ = (pq). Орбиты π, не содержащие ни p, ни q, продолжают оставаться орбитами τ π. Поэтому нам нужно рассмотреть следующие два случая: p, q лежат в различных орбитах, p, q лежат в одной орбите.
Если p, q лежат в различных орбитах, то
(pq)(pi
2
. . . i
r
)(qj
2
. . . j
s
) = (pi
2
. . . i
r
qj
2
. . . j
s
)
так что в этом случае две орбиты сливаются в одну.
Если p, q лежат в одной орбите, то
(pq)(pi
2
. . . i
r
qj
2
. . . j
s
) = (pi
2
. . . i
r
)(qj
2
. . . j
s
),
так что в этом случае одна орбита распадается на две.
Проанализировав это рассуждение, внимательный читатель может за- метить, что оно доказывает значительно более точное утверждение.
198
Все, что дается даром, наиболее ценно. Все наиболее ценное должно даваться даром. c
Поль Валери., Тетради

434 7.2.
Пусть d = decr(σ). Докажите, что σ можно представить как про- изведение d транспозиций, причем d наименьшее число, обладающее этим свойством.
Таким образом, декремент перестановки σ есть в точности длина этой перестановки по отношению к множеству транспозиций, т. е. наименьшее число d
N
0
такое, что σ можно представить в виде произведения d транс- позиций. Поскольку m
1, декремент принимает наибольшее значение на множестве длинных циклов: длинные циклы и только они требуют для своего выражения n
1 транспозиции.
8. Знакопеременная группа.
199 8.1. Докажите, что отображение sgn : S
n
−→ {±1} является гомоморфиз- мом.
Решение. Если перестановку π можно представить как произведение l
транспозиций, а перестановку σ — как произведения m транспозиций, то,
конкатенируя эти представления, мы выразим πσ как произведение l + m
транспозиций. Таким образом,
sgn(πσ) = (
1)
l+m
= sgn(π) sgn(σ).
Назовем перестановку σ четной, если sgn(σ) = 1, и нечетной, если sgn(σ) =
1. Например, l-цикл требует для своего выражения l − 1 транс- позиции и, тем самым, цикл четной длины нечетен, а цикл нечетной длины четен. Ядро sgn называется знакопеременной группой и обозначается
A
n
, от первой буквы слова alternating.
По определению A
n
состоит из всех четных перестановок. Множество
S
n
\ A
n
всех нечетных перестановок образует смежный класс S
n
по A
n
в качестве представителя которого можно выбрать, например, любую транс- позицию:
S
n
= A
n
t (S
n
\ A
n
) = A
n
t A
n
(12).
Для любого n
2 группа A
n
является подгруппой индекса 2 в S
n
и, значит
A
n
E S
n
. Порядок группы A
n
равен n!/2.
8.2. Постройте вложение S
n
в A
n+2
. Покажите, что S
n
нельзя вложить в
A
n+1
По определению группа A
n
порождается всевозможными произведени- ями двух различных транспозиций (ij)(hk). Однако обычно удобнее поль- зоваться другой системой образующих.
8.3. При любом n
3 группа A
n
порождается 3-циклами.
199
При любом числе колоколов ровно половина всех вариаций имеет одну природу и ровно половина — другую. В чем именно заключается эта природа, мне не дано судить,
но, как станет мало-помалу ясно, в ней непременно следует разобраться, прежде чем мы сможем постичь науку композиции звонов и их исполнения. c
C.A.W.Troyte, Change
Ringing

435
Решение. Для доказательства теоремы нам нужно выразить произведе- ние двух транспозиций (ij)(hk) как произведение 3-циклов. Если оказыва- ется
|{i, j, h, k}| = 3, то это произведение само является 3-циклом. С другой стороны, если
|{i, j, h, k}| = 4, то (ij)(hk) = (ij)(ih)(ih)(hk) является про- изведением двух 3-циклов.
8.4. Докажите, что группа A
n
порождается 3-циклами (123), (124), . . . ,
(12n).
8.5. Докажите, что группа A
n
порождается 3-циклами (123), (234), . . . ,
(n
2, n − 1, n).
Указание. Группа A
n
порождается подгруппой A
n
1
, стабилизирующей
n, и одним (любым) циклом, перемещающим n.
8.6. Пусть n нечетно, верно ли, что группа A
n
порождается 3-циклами
(123), (145), . . . , (1, n
1, n)?
8.7. Докажите, что группа A
n
порождается 3-циклом (123), и либо длин- ным циклом (12 . . . n) при нечетном n, либо циклом (23 . . . n) при четном.
8.8. Покажите, что при n
4 центр группы A
n
тривиален.
Решение. Для любого π
6= id найдется i такое, что π(i) 6= i. Так как
n
4, то найдутся j, h такие, что все четыре индекса i, π(i), j, h различны.
Тогда π(ijh)π
1
= (π(i), π(j), π(h))
6= (i, j, h).
8.9. Докажите, что при n
5 все 3-циклы в A
n
сопряжены. Верно ли это для n = 4?
Решение. Мы уже знаем, что 3-циклы сопряжены в S
n
. Пусть (ijh) и
(klm) — два любых 3-цикла, а π
∈ S
n
– перестановка такая, что π(ijh)π
1
=
(klm). Если перестановка π четна, мы достигли своей цели. Если пере- становка π нечетна, но n
5, то найдутся такие r, s, что все 5 индек- сов i, j, h, r, s различны.
Тогда (rs) коммутирует с (ijh) и, тем самым,
π(rs)(ijh)(π(rs))
1
= (klm), причем π(rs) четна. С другой стороны, цен- трализатор 3-цикла содержит по крайней мере 3 элемента, поэтому в A
4
имеется не более 12/3 = 4 циклов, сопряженных с данным. Это значит, что
3-циклы в A
4
разбиваются на два класса сопряженности.
9. Инверсии.
200
Забудем про определение из
§ 9 и дадим другое определение знака. Поло- жим sgn(σ) = (
1)
l
, если σ можно представить как произведение l транс- позиций σ = τ
1
. . . τ
l
. Это определение эквивалентно нашему основному определению через декремент. Однако, из этого нового определения совер- шенно неясно, почему знак определен корректно, т. е. почему перестанов- ку σ нельзя представить в виде
σ = τ
1
. . . τ
l
= ρ
1
. . . ρ
m
,
200
Мне, конечно, легче сойти с ума, чем им. Я, например, увижу на карте Пакиста- на: там, где должен быть Исламабад — там оказалось Равалпинди, а там, где прежде было Равалпинди, увижу Исламабад — и все, я сбрендил. А они все даже не заме- тят. c
Венедикт Ерофеев, Из записных книжек

436
где l и m имеют разную четность? Это можно доказать методом совместной индукции
201
, но мы не будем обсуждать доказательство здесь. Вместо это- го покажем, что знак вполне характеризуется тем, что это гомоморфизм,
переводящий транспозиции в
1.
9.1. Для любого n
2 знак sgn является единственным нетривиальным гомоморфизмом ϕ : S
n
−→ {±1}.
Решение. В самом деле, пусть (pq), (rs) — две транспозиции в S
n
, а π
любая перестановка такая, что π(p) = r, π(q) = s. Тогда π(pq)π
1
= (rs),
так что при всех гомоморфизмах ϕ : S
n
−→ {±1} в абелеву группу 1}
транспозиции принимают одно и то же значение. Если это значение равно
1, то гомоморфизм ϕ тривиален. Если же оно равно
1, то ϕ = sgn.
9.2. При n
2 знакопеременная группа A
n
является единственной под- группой индекса 2 в S
n
Сейчас мы дадим третье определение знака перестановки, в терминах длины этой перестановки по отношению к множеству фундаментальных транспозиций. Говорят, что пара (i, j) образует инверсию = inversion =
Fehlstand для перестановки σ
∈ S
n
, если i < j, но σ(i) > σ(j). Обозначим через inv(σ) общее число инверсий перестановки σ, т. е. количество всех пар (i, j), 1
≤ i < j ≤ n, образующих инверсию для σ.
Заметим, что многие авторы называют инверсией не саму пару (i, j), а ее образ (σ(i), σ(j)) под действием σ. Кнут утверждает, что понятие ин- версии ввел в 1750 году Крамер в книге Introduction `
a l’analyse des lignes courbes alg´
ebriques, но, конечно, трудно себе представить, чтобы Секи Кова и фон Лейбниц не владели этим понятием лет за 70 до Крамера, когда они одновременно — и, насколько мы в состоянии судить, независимо — ввели понятие определителя. Однако в шпенглеровском смысле понятие инверсии гораздо старше и уже абсолютно отчетливо выступает в китайских текстах
III в. до н.э.
9.3. Докажите, что для любой перестановки sgn(σ) = (
1)
inv(σ)
Решение. Каждая транспозиция есть произведение нечетного числа фун- даментальных транспозиций. Умножение на фундаментальную транспози- цию создает или убивает ровно одну инверсию.
В действительности, имеет место гораздо более точное утверждение.
9.4. Пусть d = inv(σ). Докажите, что σ можно представить как произ- ведение d фундаментальных транспозиций, причем d наименьшее число,
обладающее этим свойством.
Теперь мы в состоянии дать еще одно определение знака перестановки —
можно думать, что это шутка, но в действительности, это цитата взято из учебника высшей алгебры Куроша:
sgn(σ) =
Y
1
≤i
σ(i)
− σ(j)
i
− j
.
201
А.И.Кострикин, Введение в алгебру, ч.I: Основы алгебры. – М.: Наука, 1994

437
При всей своей неестественности
202
это определение обладает одним тех- ническим преимуществом, а именно, для этого определения очевидно, что sgn является гомоморфизмом. Для этого нужно лишь заметить, что в дей- ствительности произведение в этой формуле берется по
{i, j} ∈
V
2
(n). В
частности, для любой перестановки π имеем
Y
1
≤i
σ(i)
− σ(j)
i
− j
=
Y
1
≤π(i)(j)≤n
σ(i)
− σ(j)
i
− j
Это значит, что следующее свойство получается даром.
9.5. Отображение (
1)
inv
: S
n
−→ {±1}, π 7→ (1)
inv(π)
, является гомо- морфизмом.
Решение. В самом деле,
(
1)
inv(πσ)
=
Y
1
≤i
πσ(i)
− πσ(j)
i
− j
=
=
Y
1
≤i
πσ(i)
− πσ(j)
σ(i)
− σ(j)
Y
1
≤i
σ(i)
− σ(j)
i
− j
= (
1)
inv(π)
(
1)
inv(σ)
.
9.6. Дайте еще одно доказательство того, что для любого n
2 знак sgn является единственным нетривиальным гомоморфизмом ϕ : S
n
−→ {±1}.
Решение.
Как мы только что показали, отображение (
1)
inv является гомоморфизмом S
n
−→ {±1}. Этот гомоморфизм нетривиален, так как,
например, у транспозиции τ = (1, 2) всего одна инверсия, и, следовательно,
(
1)
inv(τ )
=
1. В силу единственности знака гомоморфизм (1)
inv обязан совпадать с sgn.
10. Принцип инволюций.
203
Перестановка называется инволюцией, если ее квадрат равен id. Меж- ду большинством математиков и специалистами по теории групп существу- ет расхождение в понимании того, является ли сама тождественная пере- становка id инволюцией. Большинство математиков считают ее тривиаль- ной инволюцией. В то же время в теории групп инволюцией называется только элемент порядка 2.
202
Эпитет неестественность относится не к выражению (
1)
inv(σ)
как таковому, на- оборот, с точки зрения теории групп Вейля inv(σ) совпадает с n(σ), числом положи- тельных корней, которые становятся отрицательными под действием σ и, тем самым, с
l(σ) — длиной σ в Коксетеровских образующих. Нет ничего естественнее этого опре- деления! Однако выражать (
1)
inv(σ)
как дурацкое произведение!!! Такое определение было бы уместно в учебнике математического анализа, как часть общей перверсивно- декадентской парадигмы. Но цель курса алгебры прямо противоположна — культи- вировать радость, силу, вкус и привычку к естественности
!
203
Решением Комиссии по переименованиям астероиду номер 35627 возвращено ис- торическое название “астероид номер 27635”. c
ВНиколай Фоменко

438 10.1. Напишите программу, порождающую все инволюции.
Указание. Каждая инволюция n либо оставляет n на месте и тогда она получается из инволюции n
1, либо она переставляет n с каким-то i,
1
≤ i ≤ n − 1, и тогда она получается из такой инволюции n − 1, кото- рая оставляет на месте i.
10.2. Вычислите количество инволюций в симметрической группе S
n
Под действием инволюции π множество X разбивается на одноэлемент- ные орбиты
{x}, отвечающие инвариантным элементам x = πx, и двух- элементные орбиты
{x, y}, отвечающие энантиоморфным парам x, y, где
y = πx
6= x. Обозначим через X
π
множество неподвижных точек. Только что сказанное означает, что если π, σ — любые две инволюции на конеч- ном множестве X, то порядки множеств X
π
и X
σ
сравнимы по модулю
2. В частности, если инволюция π имеет на X нечетное количество непо- движных точек, то и любая другая инволюция σ имеет на X по крайней мере одну неподвижную точку. Это несложное соображение, называемое принципом инволюций, имеет далеко идущие следствия.
Стандартное доказательство теоремы Лагранжа о том, что любое це- лое представляется в виде суммы четырех квадратов, приводимое в любом учебнике теории чисел, состоит из двух частей:
тождества Эйлера, сводящего все к представимости простого числа,
(доказанной Эйлером) теоремы Ферма о представлении простых чисел в виде суммы двух квадратов.
При этом обычно считается, что именно вторая часть требует некоторых усилий, скажем построения арифметики целых гауссовых чисел. Surprise!!!
10.3. Докажите следующую теорему Ферма: любое простое p
1 (mod 4)
представимо в виде суммы двух квадратов. Иными словами, найдутся та- кие m, n
N, что p = m
2
+ n
2
Решение. Приведем совершенно замечательное доказательство Цагира,
основанное на принипе инволюций
204
. Рассмотрим множество
X =
{(x, y, z) | x, y, z ∈ N, x
2
+ 4yz = p
}.
Легко видеть, что отображение h : X
−→ X заданное посредством
(x, y, z)
7→





(x + 2z, z, y
− x − z), если x < y − z,
(2y
− x, y, x − y + z), если y − z < x < 2y,
(x
2y, x − y + z, y), если 2y < x,
является инволюцией (проверьте!). Ясно, что у этой инволюции ровно одна неподвижная точка на X, а именно, (1, 1, l), где p = 4l + 1. По принципу инволюций тогда инволюция g : X
−→ X, (x, y, z) 7→ (x, z, y), тоже имеет
204
D.Zagier, A one-sentence proof that every prime p
1 (mod 4) is a sum of two squares.
— Amer. Math. Monthly, 1990, vol.97, N.2, p.144.

439
по крайней мере одну неподвижную точку (m, n, n), так что p = m
2
+ 4n
2
,
как и утверждалось.
11. Беспорядки.
Перестановка π называется беспорядком = derangement, если она не оставляет на месте ни одного символа, иными словами, если π(i)
6= i для всех i. Задача вычисления количества беспорядков D
n
называется задачей
Монмора. Вот ее простой частный случай.
11.1. Сколькими способами можно расставить шахматной доске 8 ладей так, чтобы ни одна из них не била другие и чтобы ни одна не стояла на главной диагонали a8–h1?
11.2. Определите функцию, выясняющую, является ли данная переста- новка беспорядком.
Ответ. Например, вот как это сделано в пакете Combinatorica:
DerangementQ[x ]:=FreeQ[Range[Length[x]]-x,0]
11.3. Напишите программу, порождающую все беспорядки степени n.
11.4. Проведя численный эксперимент, постарайтесь угадать, к чему стре- мится отношение количества беспорядков порядка n к общему количеству всех перестановок степени n при росте n.
Ответ. Ответ совершенно удивителен, это отношение чрезвычайно быст- ро стремится к 1/e.
С точки зрения всех практических целей уже для небольших значений n (порядка нескольких десятков) вероятность того,
что случайно выбранная перестановка является беспорядком, не зависит от n. Например, если пальто в гардеробе выдаются случайным образом,
то вероятность того, что уходя из театра каждый зритель возьмет чужое пальто, не зависит от количества зрителей.
А теперь объясним получившийся ответ.
11.5. Вычислите количество D
n
беспорядков в общем случае.
Ответ. По формуле решета получаем, что
D
n
= n!

1

1 1!
+
1 2!
− . . . + (1)
n
1
n!

.
Интересно, что формула в скобках – это начало разложения в ряд для e
1
Таким образом, для не слишком маленьких n число e
1
> 1/3 является очень хорошим приближением для отношения D
n
/n!, т.е. вероятности то- го, что наугад взятая перестановка n символов не оставляет на месте ни одного символа. Совершенно удивительно, что эта вероятность практиче- ски не зависит от n! Как замечает по этому поводу Райзер,
для всех практических целей вероятность равна e
1
= для гренладских китов
π = 3.
В действительности, совсем легко указать и явную рекуррентную фор- мулу для определения количества беспорядков степени n. Следующее про-

440
стое рассуждение взято из книги
205
. Пусть D
n
есть количество беспорядков степени n.
Пусть π — беспорядок степени n − 1. Умножая π на транспозицию
(i, n), для какого-то 1
≤ i ≤ n − 1, мы получим беспорядок степени n. Эта процедура даст (n
1)D
n
1
беспорядков степени n.
Однако, не каждый беспорядок степени n получается таким образом.
А именно, пусть π перестановка степени n
1, оставляющая на месте ровно один элемент, а именно, i, 1
≤ i ≤ n − 1. Тогда π(i, n) также является беспорядком степени n.
Ясно, что эти две процедуры дадут нам все беспорядки степени n. А имен- но, для любого беспорядка степени n найдется такое i, 1
≤ i ≤ n − 1, что
π(i, n) оставляет на месте n. Но тогда ограничение π(i, n) на первые n
1
символ либо является беспорядком, либо имеет единственную неподвиж- ную точку i, причем эти возможности являются взаимоисключающими.
11.6. Напишите программу, вычисляющую количество беспорядков степе- ни n, и сравните ее с Round[N[n!/E]].
Ответ. Вот непосредственная реализация описанного выше алгоритма:
derang[1]=0; derang[2]=1;
derang[n ]:=derang[n]=(n-1)*derang[n-1]+(n-1)*derang[n-2]
11.7. Сколько перестановок из S
n
оставляют на месте ровно m символов?
11.8. Напишите программу, порождающую все перестановки степени n,
имеющие ровно m неподвижных точек.
Указание.
Вначале породите все перестановки, оставляющие на месте точки 1, . . . , m и только их.
The game never ends, but not the players.
§ 5. Циклы
Наша стратегия состоит в том, чтобы одному биться против деся- ти, наша тактика — в том, чтобы десяти биться против одного.
Мао Цзе-Дун
1. Циклы.
206
Фиксируем какую-то перестановку π
∈ S
n
. Определим на множестве
n
=
{1, . . . , n} отношение , полагая i ∼ j, если j = π
k
(i) для k
Z.
Очевидно, что отношение
является эквивалентностью. Иными словами,
оно
рефлексивно: i = id(i) = π
0
(i);
симметрично: если j = π
k
(i), то i = π
−k
(j);
205
J.L.Snell, Introduction to probability theory with computing. — Prentice Hall, 1975.
206
Revolution is the opiate of the intellectuals. c
Karl Marx

441
транзитивно: если j = π
k
(i) и h = π
l
(j), то h = π
k+l
(i).
Таким образом, с каждой перестановкой π связано разбиение множе- ства n на классы эквивалентности
, эти классы называются орбитами
π.
Тем самым, n = X
1
t . . . t X
m
, где X
1
, . . . , X
m
суть орбиты пере- становки π. Иногда множество орбит перестановки σ обозначается через
n/σ =
{X
1
, . . . , X
m
}. Орбиты, содержащие более одного элемента, будут называться нетривиальными.
С каждой перестановкой π
∈ S
n
можно связать два подмножества в n, а именно, множества
Fix(π) =
{i ∈ n | π(i) = i},
Mob(π) =
{i ∈ n | π(i) 6= i}
неподвижных alias стабильных точек и подвижных alias мобильных точек. Иными словами, Fix(π) является объединением всех одноэлемент- ных орбит, в то время как Mob(π) является объединением всех нетривиаль- ных орбит. Ясно, что Fix(π) и Mob(π) устойчивы под действием π, причем
n = Fix(π)
t Mob(π).
Перестановки π и σ называются независимыми, если
Mob(π)
Mob(σ) = ∅.
Перестановка σ
∈ S
n
называется циклом, если множество ее мобильных элементов представляет собой одну орбиту под действием σ. В этом случае
Mob(σ) часто называется также носителем цикла σ, а порядок
| Mob(σ)|
его длиной. Циклы длины 1 называются тривиальными, цикл длины
2
называется истинным циклом. Обычно, говоря о циклах, математики имеют в виду истинные циклы, однако, из программистских соображений нам будет удобнее считать id циклом и писать id = (1) = (2) = . . . = (n).
Циклы настолько часто используются в вычислениях, что нам будет удобно ввести для них специальные обозначения. Пусть i
1
, . . . , i
l
∈ n
набор попарно различных символов. Тогда через (i
1
. . . i
l
), обозначается цикл длины l с носителем
{i
1
, . . . , i
l
}, под действием которого
i
1
7→ i
2
7→ i
3
7→ . . . 7→ i
l
7→ i
1
,
а все остальные элементы множества n остаются на месте. Один и тот же цикл может быть записан по разному:
(i
1
i
2
. . . i
l
) = (i
2
. . . i
l
i
1
) = . . . = (i
l
i
1
. . . i
l
1
).
Обычно для записи циклов мы будем пользоваться именно такой записью,
которая называется циклической.
1.1.
Напишите программу, возвращающую запись цикла (i
1
i
2
. . . i
l
) как перестановки степени n.
Ответ. В пакете Combinatorica это делается при помощи функции

442
PermutationWithCycle[n ,l ]:=
FromCycles[Append[(
{#}&) /@ Complement[Range[n],l],l]]
1.2. Вычислите обратный к циклу.
Ответ. Ясно, что обратный к циклу (i
1
. . . i
l
) равен (i
l
. . . i
1
), так что для нахождения обратного достаточно применить к циклической записи функ- цию Reverse.
2. Длинные циклы.
Перестановка σ называется длинным циклом, если все множество n
образует одну орбиту под действием σ. Длинные циклы, называемые так- же элементами Коксетера, представляют собой один из наиболее инте- ресных типов перестановок. Особенно часто используются следующие два взаимнообратных длинных цикла:
RotateRight = (1 2 3 . . . n),
RotateLeft = (n n
1 n − 2 . . . 1).
2.1. Найдите количество длинных циклов в S
n
Решение. Запись длинного цикла имеет вид (π(1), . . . , π(n)) для некоторо- го π
∈ S
n
. Таким образом, количество различных записей длинных циклов равно n!. Однако, как было уже замечено, применение RotateRight к за- писи длинного цикла не меняет этот цикл. Так как порядок RotateRight равен n, то любой длинный цикл допускает ровно n различных записей.
Это значит, что количество n-циклов на n-элементном множестве равно
n!/n = (n
1)!.
2.2. Напишите программу, генерирующую все длинные циклы степени n
в циклической записи.
Ответ. Среди всех n циклических записей такого цикла ровно одна на- чинается с 1. Поэтому грубое решение состоит в том, чтобы выбрать те перестановки степени n, сокращенная запись которых начинается с 1 и ин- терпретировать их как запись цикла длины n. Для чуть более экономного решения можно записать все перестановки степени n
1 и приаппендить к ним n. Либо, еще лучше, взять все перестановки 2, . . . , n и приписать к ним 1 слева:
Map[Prepend[#,1]&,Permutations[Range[2,n]]]
Вот, например, все длинные циклы степени 4 в циклической записи:
(1 2 3 4)
(1 2 4 3)
(1 3 2 4)
(1 3 4 2)
(1 4 2 3)
(1 4 3 2).
2.3. Напишите программу, осуществляющую переход от циклической за- писи длинного цикла к обычной.
Решение. Перейти от циклической записи к полной записи совсем про- сто. Нужно лишь приписать к циклу x тот же цикл, сдвинутый на одну позицию влево
{x,RotateLeft[x]}. Можно поступить и наоборот, а имен- но, предварить цикл тем же циклом, сдвинутым на одну позицию вправо,

443
{RotateRight[x],x}. Теперь обычная конструкция с Transpose и Sort поз- воляет найти сокращенную запись.
2.4. Напишите программу, генерирующую все длинные циклы степени n
в сокращенной записи.
Ответ. Нужно лишь скомбинировать результаты двух предыдущих задач посредством Map. Например, так long[n ]:=Map[Last[Transpose[
Sort[Transpose[
{#,RotateLeft[#]}]]]]&,
Map[Prepend[#,1]&,Permutations[Range[2,n]]]]
Вот, например, все длинные циклы степени 4 в сокращенной записи:
(2 3 4 1)
(2 4 1 3)
(3 4 2 1)
(3 1 4 2)
(4 3 1 2)
(4 1 2 3).
3. Каноническое разложение на циклы.
207
В соответствии с общим определением два цикла называются независи- мыми, если их носители дизъюнктны. Иными словами, циклы (i
1
, . . . , i
l
)
и (j
1
, . . . , j
m
) независимы, если
{i
1
, . . . , i
l
} ∩ {j
1
, . . . , j
m
} = .
Следующий результат, известный как разложение на независимые циклы, лежит в основе всей теории групп перестановок. Каждую переста- новку можно представить как произведение попарно независимых истин- ных циклов. Такое представление единственно с точностью до переста- новки сомножителей.
Следующий способ позволяет сделать разложение на циклы единствен- ным. А именно, обозначим через π
1
цикл, содержащий наименьший эле- мент из Mob(π), через π
2
– цикл, содержащий наименьший элемент из
Mob(π), который не попал в Mob(π
1
), через π
3
— цикл, содержащий наи- меньший элемент из Mob(π), который не попал в Mob(π
1
)
Mob(π
2
), и т. д.
Полученное в результате разложение называется каноническим разло- жением π на циклы.
Для того, чтобы единственным было не только само разложение на неза- висимые циклы, но и его запись, математики обычно начинают запись каж- дого цикла с наименьшего элемента. Например, при этом соглашении

1 2
3 4
5 6
7 8
9 3
5 1
8 9
4 7
6 2

= (13)(259)(486)
При вычислениях вручную тривиальные циклы обычно опускаются, но при реализации эффективных компьютерных алгоритмов часто естествен- но явно выписывать и все тривиальные циклы и мы обычно так и будем поступать. Например, к приведенному выше разложению следовало бы дописать тривиальный цикл (7).
207
Это вам так показалось. Ведь я знаю, что они на рынке покупают. Купит вон тот каналья повар, что выучился у француза, кота, обдерет его, да и подает на стол вместо зайца. c
Николай Гоголь, Мертвые души

444
Сейчас мы определим функции, восстанавливающие по перестановке ее каноническое разложение и по каноническому разложению исходную пере- становку в обычной записи.
3.1. Напишите программу, возвращающую по перестановке ее канониче- ское разложение на циклы.
Решение 1 (функциональное программирование). Следующий текст является вариацией на тему определения команды ToCycles, определенной в пакетах SymmetricGroup и Combinatorica. Вот как вычисляется циклен- ный тип перестановки x степени n:
toCycles[x ]:=Block[
{i},Fold[If[MemberQ[Flatten[#1],#2],#1,
Append[#1,NestWhileList[x[[#]]&,i=#2,x[[#]]!=i&]]]&,
{},Range[Length[x]]]
Эта программа работает следующим образом. Два слота #1 и #2 заполня- ются соответственно
списком циклов, начиная с пустого списка циклов {},
текущим номером i от 1 до n.
Если индекс i использован в каком то из уже образованных циклов, про- грамма не меняет список циклов. В противном случае она начинает об- разовывать список, состоящий из образов i под действием перестановки x
до тех пор, пока снова не получится i. В этот момент она прекращает вы- полнение команды NestWhileList и добавляет получившуюся орбиту i к списку циклов.
Решение 2 (процедурное программирование). Для циклоидов при- ведем процедурную программу, решающую ту же задачу:
toCycles[x ]:=Block[
{n=Length[x],list={},cycle,test,i,j},
test=Table[True,
{n}];
For[i=1,i<=n,i++,If[test[[i]],For[j=i;cycle=
{},
test[[j]],AppendTo[cycle,j];j=x[[j]],
test[[j]]=False];
AppendTo[list,cycle]]];Return[list]]
Здесь происходит следующее. Прежде всего, мы вводим шесть локальных переменных — степень n перестановки x, список циклов list, текущий цикл cycle, тест свежести индекса test, начало текущего цикла i и теку- щий индекс в текущем цикле j. Тест test[[j]] дает значение True, если индекс j свежий, иными словами, еще не учтен ни в перечисленных ранее циклах, ни в составе текущего цикла. В противном случае тест test[[j]]
дает значение False, в этом случае j не может ни служить началом нового цикла, ни аппендиться к текущему циклу. Изначально ни один индекс не учтен, поэтому первое присваивание в теле блока говорит, что все индексы свежие. Далее, в первом цикле мы по порядку перебираем все индексы
i от 1 до n и, если индекс i свежий, мы начинаем с него новый текущий цикл cycle=
{}, текущий элемент которого обозначается j. До тех пор, пока

445
элемент j является свежим, мы добавляем его к циклу cycle, делаем его несвежим и присваиваем j следующее значение j=x[[j]].
В качестве примера приведем вычисленный при помощи этой функции канонические разложения перестановок степени 4.
(1 2 3 4) = (1)(2)(3)(4)
(1 2 4 3) = (1)(2)(3 4)
(1 3 2 4) = (1)(2 3)(4)
(1 3 4 2) = (1)(2 3 4)
(1 4 2 3) = (1)(2 4 3)
(1 4 3 2) = (1)(2 4)(3)
(2 1 3 4) = (1 2)(3)(4)
(2 1 4 3) = (1 2)(3 4)
(2 3 1 4) = (1 2 3)(4)
(2 3 4 1) = (1 2 3 4)
(2 4 1 3) = (1 2 4 3)
(2 4 3 1) = (1 2 4)(3)
(3 1 2 4) = (1 3 2)(4)
(3 1 4 2) = (1 3 4 2)
(3 2 1 4) = (1 3)(2)(4)
(3 2 4 1) = (1 3 4)(2)
(3 4 1 2) = (1 3)(2 4)
(3 4 2 1) = (1 3 2 4)
(4 1 2 3) = (1 4 3 2)
(4 1 3 2) = (1 4 2)(3)
(4 2 1 3) = (1 4 3)(2)
(4 2 3 1) = (1 4)(2)(3)
(4 3 1 2) = (1 4 2 3)
(4 3 2 1) = (1 4)(2 3)
Обратите внимание, что запись (ijhk) в левой и в правой частях имеет совершенно разный смысл. Слева это приведенная запись перестановки, а справа — ее каноническое разложение на циклы. Иными словами, в левой части (1 2 3 4) обозначает тождественную перестановку, а в правой части
(1 2 3 4) обозначает длинный цикл 1
7→ 2 7→ 3 7→ 4 7→ 1.
3.2. Напишите программу, возвращающую по каноническому разложению перестановки на циклы ее полную запись.
Решение. Ну, это совсем просто, из предыдущего параграфа мы знаем,
как превратить в полную запись один цикл, теперь мы должны просто сделать то же самое для всех циклов, входящих в цикленную запись z
перестановки, а потом убрать лишний уровень вложенности:
{Flatten[z],Flatten[Map[RotateLeft,z]]}
или, что то же самое,
{Flatten[Map[RotateRight,z]],Flatten[z]}
3.3. Напишите программу, возвращающую по каноническому разложению перестановки на циклы ее сокращенную запись.
Ответ. Нужно просто совместить функцию, построенную в предыдущей задаче, с функцией перехода от полной записи к сокращенной. Например,
так fromCycles[z]:=Last[Transpose[Sort[Transpose[
{Flatten[z],Flatten[Map[RotateLeft,z]]}]]]]
Именно так, по существу, и устроена функция FromCycles, определенная в пакете Combinatorica.
Сейчас мы предложим задачу, которая объясняет, почему программисты называют каноническим разложением перестановки на циклы реверсиро- ванное каноническое разложение. Рассмотрим отображение f сопоставля- ющее перестановке π перестановку, которая получается из нее следующим образом: мы записываем каноническое разложение π на циклы, а потом стираем все внутренние скобки в получившемся разложении и интерпре- тируем его как сокращенную запись перестановки f (π). Например, стирая

446
внутренние скобки в канонических разложениях (1)(2)(3), (12)(3), (1)(23)
(123) мы каждый раз получим (123), а стирая внутренние скобки в (13)(2)
и (132), мы получим перестановку (132), каноническое разложение которой равно (1)(23).
3.4. Изучите динамику функции f .
Ответ. Можно, конечно, провести компьютерный эксперимент применив
Flatten[toCycles[x]] ко всем перестановкам небольших степеней, но каж- дому и так ясно, что однократное применение функции f к любой переста- новке приводит к перестановке, для которой 1 является неподвижной точке.
Тем самым, ее двухкратное применение приводит к перестановке, для ко- торой неподвижны 1 и 2, etc. Это значит, что не более чем за n
1 шагов от каждой перестановки мы дойдем до тождественной перестановки, которая является единственной неподвижной точкой функции f .
3.5. Докажите, что сушествует перестановка, от которой применением f
нельзя дойти до тождественной перестановки меньше, чем за n
1 шаг.
Опишите все такие перестановки.
Ответ. Имеется ровно (n
1)! такая перестановка степени n, а именно,
это все перестановки π такие, что π(1) = n. В самом деле, разложение та- кой перестановки на циклы начинается с (1n . . . ) и, значит, f (π) = (1n . . . ).
Иными словами, разложение f (π) на циклы начинается с (1)(2n . . . ) и, зна- чит, f
2
(π) = (12n . . . ). При каждом дальнейшем применении f индекс n
будет сдвигаться вправо на одну позицию.
4. Реверсированное каноническое разложение на циклы
208
Программисты обычно называют каноническим разложением переста- новки ее реверсированное каноническое разложение, т.е. разложение,
получающееся записью циклов ее канонического разложения в обратном порядке. Кроме того, они, конечено, явно выписывают все тривиальные циклы. Вот, для примера, реверсированное каноническое разложение пе- рестановки, рассмотренной в предыдущем пункте:

1 2
3 4
5 6
7 8
9 3
5 1
8 9
4 7
6 2

= (7)(486)(259)(13).
Таким образом, по прежнему каждый цикл начинается с наименьшего эле- мента, но теперь циклы расположены не в порядке возрастания, а в порядке убывания своих наименьших элементов. Ясно, что реверсированное кано- ническое разложение перестановки получается из ее канонического разло- жения применением функции Reverse. С другой стороны, поскольку вхо- дящие в реверсированное каноническое разложение циклы по прежнему независимы, исходная перестановка восстанавливается по нему при помо- щи той же самой функции fromCycles.
208
Never make anything simple and efficient when a way can be found to make it complex and wonderful. The Tao of Real Programming

447
Важным техническим преимуществом реверсированного канонического разложения является то, что — в отличие от обычного канонического раз- ложения! — в нем можно вообще не ставить внутренние скобки, так как их положение однозначно восстанавливается. А именно, если стереть в ревер- сированном каноническом разложении все внутренние скобки, то, чтобы вернуться к исходному разложению, достаточно вставить пару скобок )(
перед каждым элементом, слева от которого нет ни одного меньшего эле- мента. Например, (8 5 9 2 6 4 3 1 7) может получиться только из разложения
(8)(5 9)(2 6 4 3)(1 7).
4.1. Напишите программу, восстанавливающую внутренние скобки в ре- версированном циклическом разложении перестановки.
Это типичный формальный экзерсис, относительно которого абсолютно все равно, как именно добиваться поставленной цели. Наоборот, в таких случаях на занятиях мы обычно поощряли студентов найти решение при помощи тех функций, с которыми они еще не встречались, или, наоборот, не используя тех функций, использование которых они уже хорошо понимают.
Решение 1. Вот как, примерно, это делается в пакете Combinatorica.
Прежде всего, составим список, состоящий из позиций тех элементов, слева от которых нет меньших элементов:
nodes[x ]:=Module[
{m=Infinity},DeleteCases[
Table[If[x[[i]]{i,1,Length[x]}],0]
Например, вычисление nodes[
{4,10,8,2,5,9,3,1,6,7}] вернет {1,4,8}.
Осталось расставить скобки в исходном списке перед номерами, содержа- щимися в этом списке. Это можно сделать, например, при помощи коман- ды Take. Вначале мы добавляем n + 1 к списку узлов, потом разбиваем получившийся список номеров на подсписки длины 2 с отступом 1. Для приведенного выше примера при этом получится
{{1,4},{4,8},{8,11}}.
Каждый такой подсписок состоит из номера позиции, в которой начинает- ся текущий цикл, и номера позиции, в которой начинается следующий цикл
— в том числе несуществующий цикл, начинающийся с n + 1. Наконец, мы выбираем в x фрагменты с соответствующим началом и концом:
RevealCycles[x ]:=Map[Take[x,
{First[#],Last[#]-1}]&
Partition[Append[nodes[x],Length[x]+1],2,1]]
Решение 2. Сейчас мы продемонстрируем несколько другое решение, ис- пользующее Split для той цели, для которой в первом решении применя- ется Take. Прежде всего, определим список, где на i-м месте стоит номер начала того цикла перестановки x, в который попадает i-й элемент. Эту функцию было бы естественно назвать runs, но, поскольку это имя уже занято, мы назовем ее corsa:
corsa[x ]:=Module[
{m=Infinity,j=1},
Table[If[x[[i]]{i,1,Length[x]}]]
Для того примера, который рассмотрен в предыдущем решении, вычисле- ние corsa[
{4,10,8,2,5,9,3,1,6,7}] дает {1,1,1,4,4,4,4,8,8,8}. А те- перь проделаем обычный трюк с двойным транспонированием, который мы

448
уже много раз использовали с функцией Sort. Впрочем, имеются два отли- чия. Во-первых, Sort по умолчанию сортирует пары по первому элементу,
а для Split нужно явно задать тест, определяющий эквивалентность на множестве пар, в данном случае совпадение элементов списка corsa[x] с соответствующими номерами. Во-вторых, после применения Sort мы полу- чали табличную запись самой перестановки, а после применения Split мы получим список, состоящий из табличных записей составляющих ее циклов и, значит, Last[Transpose[#]] нужно применять не к списку в целом, а к его элементам. Таким образом, мы получаем примерно следующий текст:
revealCycles[x ]:=Map[Last[Transpose[#]]&,
Split[Transpose[
{Range[10],x}],
corsa[x][[First[#1]]]==corsa[x][[First[#2]]]&]]
Рассмотрим теперь отображение f , сопоставляющее перестановке π пере- становку, которая получается из нее следующим образом: мы записываем реверсированное каноническое разложение π на циклы, а потом стираем все внутренние скобки в получившемся разложении и интерпретируем его как сокращенную запись перестановки f (π). Действие этого отображения значительно интереснее, чем действие аналогичного отображения, рассмат- ривавшегося в предыдущем параграфе. Если в предыдущем случае тожде- ственная перестановка была неподвижной точкой, то теперь тождественная перестановка (1, . . . , n) переходит в реверсию (n, . . . , 1).
4.2. Найдите все неподвижные точки отображения f .
Ответ. При n
2 у этого отображения нет неподвижных точек.
4.3. Постарайтесь понять динамику отображения f .
Ответ. Здесь без компьютерного эксперимента, использующего функцию
Flatten[Reverse[toCycles[x]]] обойтись не удастся. Перестановки сте- пени 3 образуют одну орбиту под действием f :
(1 2 3)
(3 2 1)
(2 1 3)
(3 1 2)
(1 3 2)
(2 3 1)
Перестановки степени 4 образуют две орбиты, при этом орбита тожде- ственной перестановки состоит из 15 элементов:
(1 2 3 4)
(4 3 2 1)
(2 3 1 4)
(4 1 2 3)
(1 4 3 2)
(3 2 4 1)
(2 1 3 4)
(4 3 1 2)
(1 4 2 3)
(2 4 3 1)
(3 1 2 4)
(4 1 3 2)
(3 1 4 2)
(1 3 4 2)
(2 3 4 1)
Вторая орбита состоит из 9 элементов:
(1 2 4 3)
(1 3 2 4)
(2 1 4 3)
(2 4 1 3)
(3 2 1 4)
(3 4 1 2)
(3 4 2 1)
(4 2 1 3)
(4 2 3 1)
Еще интересней картина для степени 5. Здесь тоже имеется две орбиты,
одна из них трехэлементная:
(2 1 3 5 4)
(4 5 3 1 2)
(3 2 5 1 4)

449
В то же время орбита тождественной перестановки состоит из остальных
117 перестановок степени 5.
Дальше эта закономерность сохраняется: почти все перестановки данной степени попадают в орбиту тождественной перестановки, например, для степени 6 это 694 перестановки из 720, для степени 7 это 4804 перестановки из 5040. Остальные элементы образуют несколько совсем маленьких орбит.
Скажем, для степени 6 порядки этих орбит равны 17, 5 и 4, соответственно.
5. Умножение циклов
Чтобы разложение на циклы стало удобным интсрументом, нужно вы- разить все основные конструкции над перестановками в терминах циклов.
Мы уже убедились, что обратная перестановка чрезвычайно естественно выражается в терминах циклов — и еще раз вернемся к этой теме в сле- дующем параграфе. А вот как в терминах циклов ищется произведение перестановок?
5.1. Задайте функцию, вычисляющую каноническое разложение на цик- лы двух перестановок, заданных своими каноническими разложениями на циклы.
Ответ. Нет ничего проще, нужно просто перейти от цикленной записи к обычной, перемножить перестановки и снова вернуться к цикленной запи- си:
cycleProduct[x ,y ]:=ToCycles[FromCycles[x][[FromCycles[y]]]]
в общей алгебре это называется перенос структуры.
Конечно, это совсем не то, что имелось в виду! Цикленная запись не только компактнее полной, но — при некотором навыке — удобнее для вычислений. Чтобы убедиться в этом, рассмотрим более общую задачу.
Пусть σ = σ
1
. . . σ
s
— произвольное произведение циклов. Как вычислить обычную и/или цикленную запись σ? Разумеется, как и выше, мы можем просто превратить каждый из этих циклов в обычную запись перестановки степени n и перемножить все эти перестановки.
5.2. Задайте функцию, вычисляющую каноническое разложение на циклы перестановки, заданной как какое-то произведение циклов.
Перестановку σ можно вычислить следующим образом. Чтобы опреде- лить образ i под действием σ, начнем с того, что найдем самый правый цикл, скажем, σ
p
, в запись которого входит фрагмент вида (. . . ij . . . ) либо
(j . . . i), этот цикл переводит i в j. Если i не входит в запись ни одного из циклов σ
p
, то σ(i) = i. Найдем теперь самый правый цикл σ
q
левее σ
p
, в запись которого входит фрагмент вида (. . . jh . . . ) либо (h . . . j), этот цикл переводит j в h. Если j не входит в запись ни одного из циклов σ
q
, q < p, то
σ(i) = j. В противном случае, продолжая действовать таким же образом,
мы в конце концов найдем σ(i).
Для иллюстрации этого алгоритма рассмотрим перестановку
σ = (1753)(162)(46)(3574).

450
Вычислим, для примера, σ(7). Цикл (3574) переводит 7 в 4, цикл (46) пе- реводит 4 в 6, цикл (162) переводит 6 в 2, наконец, цикл (1753) оставляет
2 на месте. Поэтому σ(7) = 2. В действительности, вычисляя теперь об- раз σ(2), мы видим, что σ(2) = 7, так что в разложение σ на независимые циклы входит цикл (27). Прежде, чем переходить к следующему упражне- нию, мы предлагаем читателю довести это вычисление до конца и записать каноническое разложение σ на независимые циклы.
5.3. Напишите программу, реализующую описанный выше алгоритм умно- жения циклов.

1   ...   30   31   32   33   34   35   36   37   38


написать администратору сайта