Алгоритмы и модели вычисления [Дмитрий Голубенко] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Ôåäåðàëüíîå ãîñóäàðñòâåííîå àâòîíîìíîå
îáðàçîâàòåëüíîå
ó÷ðåæäåíèå âûñøåãî îáðàçîâàíèÿ
¾Ìîñêîâñêèé ôèçèêî-òåõíè÷åñêèé èíñòèòóò
(ãîñóäàðñòâåííûé óíèâåðñèòåò)¿
Öåíòð ðàçâèòèÿ ÈÒ-îáðàçîâàíèÿ

Àëãîðèòìû è ìîäåëè âû÷èñëåíèÿ
Äìèòðèé Ãîëóáåíêî
Àëåêñåé Êðîøíèí
Ýäóàðä Ãîðáóíîâ

Ìîñêâà, 2019

Îãëàâëåíèå
Ïðåäèñëîâèå

3

×àñòü 1. Ââåäåíèå

5
10
16
19

×àñòü 2. Ñîðòèðîâêè è ìåäèàíû

25
26
39

×àñòü 3. Àëãåáðà è òåîðèÿ ÷èñåë

41
50
51
55
57
59
62
65
70
75
75
82
87
88
89
96
100

Àñèìïòîòè÷åñêèå îöåíêè. Ìåòîä Àêðà-Áàççè
Ëèíåéíûå ðåêóððåíòû
Âåðîÿòíîñòü: ââåäåíèå

Ñîðòèðîâêè
Ïîèñê k-îé ñòàòèñòèêè

Ïîëèíîìèàëüíûå àðèôìåòè÷åñêèå àëãîðèòìû
Ïîëèíîìèàëüíîñòü àëãîðèòìà Åâêëèäà
Áûñòðîå óìíîæåíèå ÷èñåë è ìàòðèö
Áûñòðîå âîçâåäåíèå â ñòåïåíü
Ïîëèíîìèàëüíîñòü àëãîðèòìà Ãàóññà
Ïðîñòåéøèå êðèïòîãðàôè÷åñêèå ïðîòîêîëû
Äèñêðåòíîå ïðåîáðàçîâàíèå Ôóðüå
Áûñòðîå ïåðåìíîæåíèå ìíîãî÷ëåíîâ
Ðåøåòî Ýðàòîñôåíà
Âåðîÿòíîñòíûå òåñòû íà ïðîñòîòó
Àëãîðèòì ÀÊÑ
Âçÿòèå êâàäðàòíîãî êîðíÿ ïî ìîäóëþ
Äèñêðåòíîå ëîãàðèôìèðîâàíèå
Ôàêòîðèçàöèÿ öåëûõ ÷èñåë
Ôàêòîðèçàöèÿ ìíîãî÷ëåíîâ. Àëãîðèòì Êàíòîðà-Öàññåíõàóñà
Àëãîðèòì Áåðëåêåìïà
1

Òåîðåòèêî-ãðóïïîâûå àëãîðèòìû
Çàäà÷à ïðèíàäëåæíîñòè
Ôèëüòð Äæåððàìà
Çàäà÷à graph-iso è òåîðåòèêî-ãðóïïîâûå àëãîðèòìû

101
104
109
110

×àñòü 4. Ãðàôû è àëãîðèòìû

115
117
121
125
130
133
143
144
151
154
161
166
169

×àñòü 5. Ýëåìåíòû òåîðèè ñëîæíîñòè
Âåðîÿòíîñòíûå àëãîðèòìû: îïðåäåëåíèÿ
Êëàññû P, NP è co − NP
P RIM ES ⊂ NP ∩ co − NP
Ñèñòåìû ëèíåéíûõ íåðàâåíñòâ
Ïîëèíîìèàëüíàÿ ñâîäèìîñòü

177
187
189
195
199
203

×àñòü 6. Èçáðàííûå çàäà÷è è ðåøåíèÿ

219

Áèáëèîãðàôèÿ

235

Depth-rst search
Ïîèñê òî÷åê ñî÷ëåíåíèÿ
Êîìïîíåíòû ñèëüíîé ñâÿçíîñòè
Breadth-rst search
Ïîèñê êðàò÷àéøèõ ïóòåé
Ìèíèìàëüíûå îñòîâíûå äåðåâüÿ
Àëãîðèòìû Ïðèìà, Êðóñêàëà è Áîðóâêè
Ïîòîêè è ñåòè
Ìåòîä Ôîðäà-Ôàëêåðñîíà. Àëãîðèòì ÝäìîíäñàÊàðïà
Ìåòîä ïðîòàëêèâàíèÿ ïðåäïîòîêà. Àëãîðèòì Òàðüÿíà-Ãîëäáåðãà
0-1 ïîòîêè
Âåðøèííàÿ è ðåáåðíàÿ ñâÿçíîñòè

Ïðåäèñëîâèå
Ýòà êíèæêà íàïèñàíà ïî ìîòèâàì ìàòåðèàëîâ îäíîèìåííîãî êóðñà êàôåäðû ìîó íà
Ôèçòåõå, çàïèñàííûõ Äèìîé Ãîëóáåíêî, Ëåøåé Êðîøíèíûì è Ýäîì Ãîðáóíîâûì. Êóðñ
âåë Ñåðãåé Òàðàñîâ, è îí æå ïðèäóìàë êîíöåïöèþ, ñèëüíî îòëè÷àþùóþ ¾Àëãîðèòìû è
ìîäåëè âû÷èñëåíèÿ¿ îò äðóãèõ àíàëîãè÷íûõ êóðñîâ. Ñòàíäàðòíûé êóðñ ïî àëãîðèòìàì
 îáçîð îñíîâíûõ àëãîðèòìîâ(áûñòðàÿ ñîðòèðîâêà, ïîèñê ìåäèàíû, îáõîäû ãðàôîâ) è
ñòðóêòóð äàííûõ, íåîáõîäèìûõ êàæäîìó ïðîãðàììèñòó. Íåòðóäíî âèäåòü, ÷òî ïî÷òè âñå
ýòè îñíîâíûå àëãîðèòìû âîçíèêëè âî âðåìÿ ðåøåíèÿ íåêîòîðûõ ìàòåìàòè÷åñêèõ çàäà÷.
×èòàÿ ¾Àëãîðèòìû è ìîäåëè âû÷èñëåíèÿ¿, Ñåðãåé â ïåðâóþ î÷åðåäü ñòðåìèëñÿ ïðîäåìîíñòðèðîâàòü ñâÿçü àëãîðèòìîâ è ìàòåìàòèêè, êàêèå àëãîðèòìû è êàê ïîçâîëÿþò ðåøàòü
ìàòåìàòè÷åñêèå çàäà÷è (èç ñàìûõ ðàçíûõ îáëàñòåé, áóäü òî òåîðèÿ ÷èñåë èëè òîïîëîãèÿ)
è êàêàÿ ìàòåìàòèêà ëåæèò â îñíîâå òåõ èëè èíûõ àëãîðèòìîâ. Òåîðèÿ àëãîðèòìîâ âîçíèêëà åñòåñòâåííûì îáðàçîì èç âû÷èñëèòåëüíûõ çàäà÷ â ðàçíûõ îáëàñòÿõ ìàòåìàòèêè è ïî
ñåé äåíü îñòàåòñÿ æèâîé îáëàñòüþ, â êîòîðîé íåêîòîðûå òðèâèàëüíî ñôîðìóëèðîâàííûå
âîïðîñû äî ñèõ ïîð îòêðûòû.  ýòîé êíèæêå ìû ðàññêàæåì ìàòåìàòè÷åñêèì ÿçûêîì îá
îñíîâíûõ àëãîðèòìàõ ñîðòèðîâêè, àëãåáðû, òåîðèè ÷èñåë è òåîðèè ãðàôîâ.
Ìíîãèå øêîëüíèêè èçó÷àþò àëãîðèòìû, ãîòîâÿñü ê îëèìïèàäàì ïî ïðîãðàììèðîâàíèþ. Âîçìîæíî, ÷òî ýòà êíèãà ïîìîæåò ìàòåìàòèêàì-îëèìïèàäíèêàì, íå çàíèìàâøèìñÿ
àëãîðèòìàìè, çàèíòåðåñîâàòüñÿ îëèìïèàäíûì ïðîãðàììèðîâàíèåì, à ìîæåò áûòü  è
òåîðèåé àëãîðèòìîâ.
Àâòîðû áëàãîäàðÿò Ñåðãåÿ Òàðàñîâà, ñîáðàâøåãî íåîáû÷íóþ êîìíàäó ñåìèèíàðèñòîâ
è ïðèäóìàâøåãî îðèãèíàëüíóþ êîíöåïöèþ êóðñà, à òàêæå ñîòðóäíèêîâ Öåíòðà Ðàçâèòèÿ
ÈÒ-Îáðàçîâàíèÿ è ëè÷íî Òàòüÿíó Áàáè÷åâó, ÷üè äîáðîòà, îòçûâ÷èâîñòü è óñèëèÿ ñäåëàëè
ñóùåñòâîâàíèå ýòîé êíèæêè âîçìîæíûì.

×àñòü 1

Ââåäåíèå

Ñî øêîëû êàæäîìó çíàêîìî èíòóèòèâíîå îïðåäåëåíèå àëãîðèòìà  ¾íàáîð èíñòðóêöèé, îïèñûâàþùèõ ïîðÿäîê äåéñòâèé èñïîëíèòåëÿ äëÿ äîñòèæåíèÿ íåêîòîðîãî ðåçóëüòàòà¿. Ñ÷èòàåòñÿ, ÷òî àëãîðèòì ïðèíèìàåò íà âõîä íåêîòîðûé
,
âûïîëíÿåò îïðåäåëåííóþ ïîñëåäîâàòåëüíîñòü äåéñòâèé è âîçâðàùàåò (åñëè îñòàíàâëèâàåòñÿ) íîâûé êîíñòðóêòèâíûé îáúåêò. Êîíñòðóêòèâíûé îáúåêò  òîò, äëÿ êîòîðîãî ñóùåñòâóåò êîíñòðóêòèâíûé ñïîñîá çàäàòü åãî, íàïðèìåð, íàòóðàëüíîå ÷èñëî, ìàòðèöà èëè
ãðàô.
Òàêîå ïîíÿòèå àëãîðèòìà äîâîëüíî ðàñïëûâ÷àòî è íå ïîçâîëÿåò êîíêðåòíî îòâåòèòü
íà òàêèå âîïðîñû:

êîíñòðóêòèâíûé îáúåêò






ëþáàÿ ëè çàäà÷à ðàçðåøèìà àëãîðèòìè÷åñêè?
åñëè íåêîòîðàÿ çàäà÷à íå ðàçðåøàåòñÿ íèêàêèì àëãîðèòìîì, êàê ýòî äîêàçàòü? Èíûìè ñëîâàìè, êàê ïîêàçàòü, ÷òî ëþáîé àëãîðèòì ðàçðåøàåò çàäà÷ó,
îòëè÷íóþ îò äàííîé?
êàê âû÷èñëèòü âðåìÿ, ñîâåðøåííûõ àëãîðèòìîì, èëè òðåáóåìóþ ïàìÿòü? Íåëüçÿ âû÷èñëèòü âðåìÿ ðàáîòû àëãîðèòìà, ïðîñòî ðàññìîòðåâ íåêîòîðóþ åãî ðåàëèçàöèþ (íàïðèìåð, íà ÿçûêå C), è ñëîæèâ êîëè÷åñòâà âûïîëåíèé êàæäîé îïåðàöèè. Êîìàíäû íå óíèòàðíû íè ïî âðåìåíè, íè ïî ðåñóðñîåìêîñòè, âðåìÿ âûïîëíåíèÿ îäíîé è òîé æå êîìàíäû ìîæåò áûòü ðàçíûì. Ëó÷øåå, ÷òî ìîæíî
ñäåëàòü â äàííîì ñëó÷àå  îöåíèòü (åñëè âîçìîæíî) âðåìÿ ðàáîòû êîìàíäû (â
õóäøåì ñëó÷àå) ñâåðõó íåêîòîðîé êîíñòàíòîé. Íî òóò âàæíî çíàòü, êàêèå îïåðàöèè ìû ñ÷èòàåì ýëåìåíòàðíûìè è ó êàêèõ îïåðàöèé âðåìÿ ìîæíî îöåíèòü
ñâåðõó êîíñòàíòîé (â ÷àñòíîñòè, ñëîæåíèå ÷èñåë íåëüçÿ a priori ñ÷èòàòü îïåðàöèåé, âûïîëÿíåìîé çà íå áîëåå ÷åì ïîñòîÿííîå âðåìÿ  åñëè ìû íå ñ÷èòàåì,
íàïðèìåð, ÷òî ñàìè ñëàãàåìûå îãðàíè÷åíû ñâåðõó).



êàê ïîêàçàòü, ÷òî äàííàÿ çàäà÷à íå ìîæåò áûòü ðåøåíà òî÷íî çà îòíîñèòåëüíî ìàëîå âðåìÿ? Ñàìî ïî ñåáå ñóùåñòâîâàíèå íåêîòîðîãî àëãîðèòìà íå ãà-

ðàíòèðóåò, ÷òî íåëüçÿ ïîñòðîèòü áîëåå áûñòðûé àëãîðèòì, ðàçðåøàþùèé òó æå
çàäà÷ó.

×åòêèå îòâåòû íà ýòè âîïðîñû òðåáóþò íàëè÷èÿ ëîãè÷åñêîãî ïîíÿòèÿ àëãîðèòìà. Â
ýòîé êíèãå ìû äàäèì òî÷íîå ïîíÿòèå àëãîðèòìà â ðàçäåëå, ïîñâÿùåííîì òåîðèè ñëîæíîñòè. Äëÿ ïðàêòè÷åñêèõ íóæä îáû÷íî äîñòàòî÷íî èíòóèòèâíîãî îïðåäåëåíèÿ àëãîðèòìà;
êàæäûé ðàç ìû áóäåì îãîâàðèâàòü, ÷òî ÿâëÿåòñÿ åäèíèöåé ïàìÿòè è êàêèå îïåðàöèè
, òî åñòü âûïîëíÿþòñÿ çà íå áîëåå ÷åì ïîñòîÿííîå âðåìÿ.
Áîëüøèíñòâî àëãîðèòìîâ, ñ êîòîðûìè ìû áóäåì èìåòü äåëî, ÿâëÿþòñÿ
, òî åñòü øàãè, êîòîðûå îíè äåëàþò, à òàê æå ðåçóëüòàò, êîòîðûé îíè âûäàþò,
çàâèñÿò òîëüêî îò âõîäà àëãîðèòìà. Îäíàêî â ðÿäå ñëó÷àåâ ìîæíî èñïîëüçîâàòü
ïðîöåäóðû, âìåñòî äåòåðìèíèðîâàííûõ. Äåëàåòñÿ ýòî ïðåæäå âñåãî äëÿ òîãî,
÷òîáû óìåíüøèòü âðåìÿ ðàáîòû àëãîðèòìà. Êîíå÷íî, çà ýòî ïðèõîäèòñÿ ïëàòèòü òåì, ÷òî

ýëåìåíòàðíû
ðîâàííûìè
íîñòíûå

äåòåðìèíèâåðîÿò-

Ââåäåíèå
ðåøåíèå çàäà÷è ïîëó÷àåòñÿ íåòî÷íûì èëè ïðàâèëüíûé îòâåò äà¼òñÿ ñ íåêîòîðîé âåðîÿòíîñòüþ. ×àñòî áûâàåò, ÷òî ïðèõîäèòñÿ äåëàòü áîëüøå èòåðàöèé, íî ñòîèìîñòü îäíîé
èòåðàöèè ñòàíîâèòñÿ ãîðàçäî ¾äåøåâëå¿. Ñòîèò îòìåòèòü, ÷òî âåðîÿòíîñòíûå àëãîðèòìû
âàæíû íå òîëüêî ñ òåîðåòè÷åñêîé òî÷êè çðåíèÿ, íî è ñ ïðàêòè÷åñêîé, òàê êàê íåêîòîðûå
âåðîÿòíîñòíûå ïðîöåäóðû î÷åíü õîðîøî ñåáÿ çàðåêîìåíäîâàëè íà ïðàêòèêå. Íàïðèìåð,
íåêîòîðûå ëþäè, êîòîðûå çàíèìàþòñÿ ãëóáîêèì îáó÷åíèåì (Deep Learning), ïîä ñëîâàìè ¾ãðàäèåíòíûé ñïóñê¿ (÷òî áû ýòî íå çíà÷èëî) ÷àñòî ïîíèìàþò åãî ñòîõàñòè÷åñêóþ
âåðñèþ, ââèäó å¼ âûñîêîé ïðàêòè÷åñêîé öåííîñòè. Òàê ÷òî ïîëåçíî áóêâàëüíî ñ ïåðâûõ
øàãîâ ïðèâûêíóòü ê ÿçûêó òåîðèè âåðîÿòíîñòåé, à ïðè ðàçðàáîòêå è àíàëèçå àëãîðèòìîâ
ê ñëó÷àéíîñòè ñëåäóåò îòíîñèòüñÿ êàê ê ïîòåíöèàëüíî âàæíîìó ðåñóðñó. Íî îñîçíàòü, â
÷åì, ñîáñòâåííî, ýòîò ðåñóðñ çàêëþ÷àåòñÿ, ìîæíî òîëüêî ðåøàÿ çàäà÷è.
Êàê îöåíèâàòü âðåìÿ âåðîÿòíîñòíûõ ïðîöåäóð? Ñóùåñòâóåò 2 îñíîâíûõ ïîäõîäà.

â õóäøåì

(1) Ãîâîðÿò, ÷òî àëãîðèòì íà âõîäå ðàçìåðà n ðàáîòàåò
ñëó÷àå âðåìÿ T (n),
åñëè íà ëþáîì âõîäå ðàçìåðà n îí ðàáîòàåò âðåìÿ 6 T (n), ïðè÷¼ì ðàâåíñòâî
äîñòèãàåòñÿ.
(2) Ãîâîðÿò, ÷òî àëãîðèòì íà âõîäå ðàçìåðà n ðàáîòàåò
âðåìÿ T (n), åñëè
ìàòåìàòè÷åñêîå îæèäàíèå âðåìåíè åãî ðàáîòû íà âõîäå ðàçìåðà n ðàâíÿåòñÿ
T (n).

â ñðåäíåì

Ðàññìîòðèì ñëåäóþùóþ çàäà÷ó. Íà âõîä ïîäà¼òñÿ ìàññèâ èç 2N áóêâ, ïðè÷¼ì ïîëîâèíó èç íèõ ñîñòàâëÿþò áóêâû a, à äðóãóþ ïîëîâèíó  áóêâû b. Òðåáóåòñÿ íàéòè íîìåð
ëþáîé ÿ÷åéêè, â êîòîðîé ëåæèò áóêâà a. Ðàññìîòðèì 2 èäåîëîãèè âåðîÿòíîñòíîãî ðåøåíèÿ òàêîé çàäà÷è.
Àëãîðèòìîì òèïà Ëàñ-Âåãàñ íàçûâàåòñÿ âåðîÿòíîñòíûé àëãîðèòì, êîòîðûé âñåãäà íà
âûõîäå äà¼ò êîððåêòíûé ðåçóëüòàò. Ðàññìîòðèì äëÿ ïðèìåðà ñëåäóþùèé àëãîðèòì.
Require: Ìàññèâ áóêâ A ðàçìåðà N
1:
2:
3:
4:

repeat

Ñëó÷àéíî ðàâíîâåðîÿòíî âûáðàòü èíäåêñ i ∈ {1, 2, . . . , N }

until A[i] 6= a
return i

Âðåìÿ ðàáîòû â õóäøåì ñëó÷àå ýòîãî àëãîðèòìà ðàâíî áåñêîíå÷íîñòè. Äåéñòâèòåëüíî,
åñòü íåíóëåâàÿ âåðîÿòíîñòü, ÷òî íà êàæäîì øàãå àëãîðèòì áóäåò âûáèðàòü ÿ÷åéêó, â
êîòîðîé ëåæèò áóêâà b, à çíà÷èò, ìû íå ìîæåì îãðàíè÷èòü êîëè÷åñòâî èòåðàöèé. Îäíàêî
àëãîðèòì îñòàíàâëèâàåòñÿ çà êîíå÷íîå ÷èñëî øàãîâ ñ âåðîÿòíîñòüþ 1. Áîëåå òîãî, ñðåäíåå
÷èñëî âûïîëíåííûõ èòåðàöèé ðàâíî
∞





P
P
P i
def P
i+1
1
1
i
=

=2
− 2 − 1 = 2 A − 21 − 1 = 2A − 2 ⇒ A = 2,
A =
2i
2i
2i
2i
i=1

i=1

òî åñòü àëãîðèòì

i=1

i=1

â ñðåäíåì äåëàåò 2 èòåðàöèè.
7

Ââåäåíèå

Àëãîðèòìîì òèïà Ìîíòå-Êàðëî

íàçûâàåòñÿ âåðîÿòíîñòíûé àëãîðèòì, êîòîðûé ìîæåò äàâàòü íà âûõîäå íåïðàâèëüíûé ðåçóëüòàò ñ íåêîòîðîé (êàê ïðàâèëî ìàëåíüêîé)
âåðîÿòíîñòüþ. Ðàññìîòðèì äëÿ ïðèìåðà ñëåäóþùèé àëãîðèòì.
Require: Ìàññèâ áóêâ A ðàçìåðà N ; íàòóðàëüíîå ÷èñëî k
1: i := 0
2:
3:
4:
5:

repeat

Ñëó÷àéíî ðàâíîâåðîÿòíî âûáðàòü èíäåêñ i ∈ {1, 2, . . . , N }

until k = i èëè A[i] 6= a
return i

Âðåìÿ ðàáîòû â õóäøåì ñëó÷àå ýòîãî àëãîðèòìà ðàâíî k. Âåðîÿòíîñòü ïîëó÷èòü ïðàâèëüíûé îòâåò ðàâíà 1 − 21k . Áîëåå òîãî, ñðåäíåå ÷èñëî âûïîëíåííûõ èòåðàöèé ðàâíî
 k

k
k
k

P
P
P i
def P
i+1
1
1
i
k
=

=2
− 2 − 2k − 1 = 2 B − 21 + 2k+1
− 1,
B =
k+1
2i
2i
2i
2i
i=1

ñëåäîâàòåëüíî,

i=1

i=1

i=1

B =2−

òî åñòü àëãîðèòì

k+1
,
2k+1

â ñðåäíåì äåëàåò ìåíüøå 2-õ èòåðàöèé.

Ïñåâäîñëó÷àéíûå ÷èñëà. Îòäåëüíîãî âíèìàíèÿ çàñëóæèâàåò âîïðîñ ýìóëÿöèè ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë íà ïðàêòèêå. Êîìïüþòåð  äåòåðìèíèðîâàííàÿ àðèôìåòè÷åñêàÿ ìàøèíà, è ëþáîé àëãîðèòì íà íåì äàñò íåêîòîðóþ îïðåäåëåííóþ, íå ñëó÷àéíóþ,
ïîñëåäîâàòåëüíîñòü ÷èñåë. Ëó÷øåå, ÷òî ìîæíî ñäåëàòü  ñãåíåðèðîâàòü ïîñëåäîâàòåëüíîñòü ÷èñåë, êîòîðàÿ âíåøíå ¾ïîõîæà¿ íà ñëó÷àéíóþ. Îòäåëüíàÿ ïðîáëåìà  äàòü ôîðìàëüíîå îïðåäåëåíèå ïñåâäîñëó÷àéíîé ÷èñëîâîé ïîñëåäîâàòåëüíîñòè: íóæíî îïðåäåëèòüñÿ ñ òåì, êàêîå ìåðèëî ñëó÷àéíîñòè ìû èñïîëüçóåì.
Îïðåäåëåíèå 1.1. Ïóñòü (xn )n∈N  ïîñëåäîâàòåëüíîñòü îñòàòêîâ ïî ìîäóëþ m. Áóäåì

-ðàñïðåäåëåíà

ãîâîðèòü, ÷òî (xn )n∈N k
, åñëè äëÿ ëþáîé ïîñëåäîâàòåëüíîñòè a0 , . . . ak−1 ∈
Z/mZ è äëÿ ëþáîãî n ∈ N âûïîëíåíî
1
P(xn = a0 , xn+1 = a1 . . . xn+k−1 = ak−1 ) = k
m
Ïîñëåäîâàòåëüíîñòü (xn )n∈N íàçûâàåòñÿ ∞
, åñëè îíà k-ðàñïðåäåëåíà äëÿ
ëþáîãî íàòóðàëüíîãî k.

-ðàñïðåäåëåííîé

Ýòî èíòóèòèâíîå ïîíÿòèå ïñåâäîñëó÷àéíîé ïîñëåäîâàòåëüíîñòè íå ñîâñåì òî÷íî, ïîäðîáíîñòè ìîæíî ïîñìîòðåòü â ñåêöèè 3.5 êíèãè [31].
Ïðîñòåéøèé ñïîñîá ãåíåðèðîâàòü ïñåâäîñëó÷àéíûå ÷èñëà  èñïîëüçîâàòü ëèíåéíûå
ðåêêóðåíòû, òî åñòü óñëîâèÿ âèäà
fn = a1 fn−1 + . . . + ak fn−k mod m

8

Ââåäåíèå
Ïðè íåêîòîðûõ çíà÷åíèÿõ a1 , . . . ak è m ïîëó÷åííûå fn äåéñòâèòåëüíî áóäóò ¾ñëó÷àéíûìè¿. Ôóíêöèÿ rand â Ñ  ðåàëèçàöèÿ èìåííî òàêîãî ãåíåðàòîðà ñëó÷àéíûõ ÷èñåë.

Ïðèìåð 1.2. Ðàññìîòðèì fn = Fn mod m  ÷èñëà Ôèáîíà÷÷è ïî ìîäóëþ íåêîòîðîãî

íàòóðàëüíîãî m. Íåòðóäíî çàìåòèòü, ÷òî ýòà ïîñëåäîâàòåëüíîñòü ïåðèîäè÷íà: ïîñêîëüêó
fn = (fn−1 + fn−2 ) mod m, òî ðàçëè÷íûõ fn íå áîëüøå, ÷åì âîçìîæíûõ ïàð îñòàòêîâ ïî
ìîäóëþ m, òî åñòü íå áîëåå, ÷åì m2 . Íà ñàìîì äåëå âåðíà áîëåå òî÷íàÿ îöåíêà
π(m)  ïåðèîäà ïîñëåäîâàòåëüíîñòè Fn mod m: ìîæíî óáåäèòüñÿ â òîì, ÷òî
π(n) 6 6n.
Äëÿ m = 2, íàïðèìåð, ïîñëåäîâàòåëüíîñòü (fn )n∈N åñòü ïðîñòî 0, 1, 1, 0, 1, 1, . . ., ïåðèîä èìååò äëèíó 3. Äëÿ m = 11 ïîëó÷èì

ïåðèîäà

Ïèçàíî

0, 1, 1, 2, 3, 5, 8, 2, 10, 1, 0, 1, 1, . . . ,

ïåðèîä èìååò äëèíó 10, à ïðè m = 10 ïîñëåäîâàòåëüíîñòü èìååò âèä
0, 1, 1, 2, 3, 5, 8, 3, 1, 4, 5, 9, 4, 3, 7, 0, 7, 7, 4, 1, 5, 6, 1, 7, 8, 5, 3, 8, 1, 9, 0, 9, 9, 8, 7, 5, 2, 7, 9, 6, 5, 1, 6,
7, 3, 0, 3, 3, 6, 9, 5, 4, 9, 3, 2, 5, 7, 2, 9, 1, 0, 1, . . .
òî åñòü ïåðèîä èìååò äëèíó 60.

Åùå îäíî âàæíîå òðåáîâàíèå ê ãåíåðàòîðó ïñåâäîñëó÷àéíûõ ÷èñåë  êðèïòîóñòîé÷èâîñòü, òî åñòü óñòîé÷èâîñòü ê ïðåäñêàçàíèþ ìåõàíèçìà ýòîãî ãåíåðàòîðà. Ãåíåðàòîð ïñåâäîñëó÷àéíûõ ÷èñåë, ãåíåðèðóþùèé ïîñëåäîâàòåëüíîñòü ïî ôîðìóëå fn = afn−1 +b mod m
äëÿ âçàèìíîïðîñòûõ a è m, íå ÿâëÿåòñÿ êðèïòîóñòîé÷èâûì: ïîñêîëüêó
fn+1 − fn = a(fn − fn−1 ) mod m,

fn+2 − fn+1 = a(fn+1 − fn ) mod m,

òî
m|(fn+1 − fn )2 − (fn − fn−1 )(fn+2 − fn+1 )

Äàëåå ìîæíî ïîñòðîèòü àëãîðèòì, óãàäûâàþùèé a, b è m. Ïî ôîðìóëå âûøå ìîæíî óãàäàòü m, à çàòåì ïîäîáðàòü íåêîòîðûì îáðàçîì a è b, à çàòåì äàëåå çàïóñòèòü ãåíåðàòîð.
Âïîëíå âîçìîæíî, ÷òî ñàìè a, b è m íå áóäóò óãàäàíû, íî ïîëó÷åííûé ãåíåðàòîð áóäåò
óãàäûâàòü òó æå ñàìóþ ïîñëåäîâàòåëüíîñòü. Áîÿð (ñì. [5]) ïîñòðîèëà ïîëèíîìèàëüíûé
àëãîðèòì, ïîçâîëÿþùèé òàêèì îáðàçîì âçëàìûâàòü ãåíåðàòîð.
 íàøè äíè íàèáîëåå ïîïóëÿðíûì ãåíåðàòîðîì ïñåâäîñëó÷àéíûõ ÷èñåë ÿâëÿåòñÿ
.
Êîðî÷å ãîâîðÿ, êàê ãîâîðèë Ðè÷àðä Êîâåéþ (Richard Coveyu): ¾Ãåíåðèðîâàíèå ïñåâäîñëó÷àéíûõ ÷èñåë ñëèøêîì âàæíàÿ âåùü, ÷òîáû ïðåäîñòàâèòü åå ñëó÷àþ¿. Ïîäðîáíåå î
ïñåâäîñëó÷àéíûõ ÷èñëàõ ìîæíî ïî÷èòàòü â [31] è [12].

òâèñòåð Ìåðñåííà

9

Ââåäåíèå

Àñèìïòîòè÷åñêèå îöåíêè. Ìåòîä Àêðà-Áàççè
Ïðè òåîðåòè÷åñêîì àíàëèçå ñëîæíîñòè àëãîðèòìà, êàê ïðàâèëî, íàñ íå èíòåðåñóþò
êîíêðåòíûå êîíñòàíòû â ôóíêöèÿõ, à òîëüêî èõ àñèìïòîòèêè ïðè äëèíå âõîäà |x| → ∞.

• Ôóíêöèÿ íàòóðàëüíîãî àðãóìåíòà g(n) = O f (n , åñëè ñóùåñòâóåò òàêàÿ êîíñòàíòà C > 0 è ÷èñëî n0 , ÷òî äëÿ âñåõ n ≥ n0 âûïîëíÿåòñÿ |g(n)| ≤ C|f (n)|.

• g(n) = o f (n) , åñëè limn→∞ fg(n)
= 0.
(n)


• g(n) = Ω f (n) , åñëè f (n) = O g(n) .


• g(n) = ω f (n) , åñëè f (n) = o g(n) .



• g(n) = Θ f (n) , åñëè g(n) = O f (n) è f (n) = O g(n) .


e f (n) , åñëè f (n) = O g(n) logk g(n) äëÿ íåêîòîðîãî k ∈ N.
• g(n) = O
 ïðèìåðå âûøå ìû ñòîëêíóëèñü ñ ðåêêóðåíòíûì íåðàâåñòâîì. Çàáåãàÿ ñëåãêà âïåðåä, îòìåòèì, ÷òî íàì è âïîñëåäñòâèè ïîïàäóòñÿ ðåêêóðåíòíûå óðàâíåíèÿ è íåðàâåíñòâà.
Êàê ïðàâèëî, ðåêêóðåíòíûå óðàâíåíèÿ áóäóò ïîÿâëÿòüñÿ ïðè îöåíêå ñëîæíîñòè ïðîöåäóð,
â õîäå êîòîðûõ îíè ñàìè âûçûâàþòñÿ ðåêêóðåíòíî (êàê, íàïðèìåð, ñòàíäàðòíàÿ ïðîöåäóðà âû÷èñëåíèÿ ôàêòîðèàëà). Ïîýòîìó ñåé÷àñ ìû ðàçáåðåì íåêîòîðûå ñïîñîáû ðåøåíèÿ
ðåêêóðåíòíûõ óðàâíåíèé, âêëþ÷àÿ òåîðåìó Àêðà-Áàççè.
Ñàìûé ïðîñòîé ñïîñîá  ïîñòðîèòü
. Ðàññìîòðèì äåðåâî, êàæäàÿ
âåðøèíà êîòîðîãî ñîîòâåòñòâóåò âûçîâó ýêçåìïëÿðà ôóíêöèè. Âíóòðåííèå âåðøèíû ïîìå÷åíû ÷èñëîì îïåðàöèé, êîòîðûå ïîòðåáîâàëèñü äëÿ îáðàáîòêè ðåçóëüòàòîâ ñëåäóþùèõ
ðåêóðñèâíî âûçâàííûõ ôóíêöèé (â íàøåì ñëó÷àå  äëÿ ñëèÿíèÿ äâóõ ìàññèâîâ), à ëèñòû  ÷èñëîì îïåðàöèé íà ìèíèìàëüíîé ïîäçàäà÷å, äëÿ êîòîðîé óæå íå èñïîëüçîâàëàñü
ðåêóðñèÿ. Êðîìå òîãî, êàæäîé âåðøèíå ñîîòâåòñòâóåò óðîâåíü, èëè ãëóáèíà, n  ðàçìåð
çàäà÷è, äëÿ êîòîðîé áûëà âûçâàíà ýòà ôóíêöèÿ. Î÷åâèäíî, âðåìÿ ðåøåíèÿ çàäà÷è (â
õóäøåì ñëó÷àå), çàâèñèò òîëüêî îò åå ðàçìåðà, ïîýòîìó âñå âåðøèíû íà îäíîì óðîâíå
ýêâèâàëåíòíû. Ñóììàðíîå âðåìÿ ðàáîòû ïðîãðàììû ñêëàäûâàåòñÿ èç âðåìåíè ðàáîòû â
êàæäîé âåðøèíå.

äåðåâî ðåêóðñèè

Ïðèìåð 1.3. Ðàññìîòðèì ðåêêóðåíòó
j n k

(1)

T (n) = T

(2)

T (1) = C.

2

+T

l n m
2

+ cn, n ≥ 2,

ÏÈÊ×À Áóäåì äëÿ óäîáñòâà ñ÷èòàòü, ÷òî n = 2k  êàê ìû óâèäèì ïîçæå, ýòî íå ïîìåøàåò ïðàâèëüíî îöåíèòü ñëîæíîñòü. Íàñ èíòåðåñóåò àñèìïòîòè÷åñêàÿ îöåíêà T (n). Ìîæíî
öèêëè÷åñêè ïîäñòàâëÿòü ðåêóððåíòíîå ñîîòíîøåíèå, ïîêà íå äîéäåì äî íèæíåãî óðîâíÿ
10

Ââåäåíèå
(n = 1):
(3)

T (n) = 2T

n
2

 n
n
n
+ cn = 2 2T
+c
+ cn = 4T
+ 2cn = . . .
2
4
 n 4
. . . = 2k T
+ kcn = 2k T (1) + cnk = Cn + cn log n = Θ(n log n).
2k

Ïîêàæåì, ÷òî ýòî âåðíî äëÿ ëþáûõ n, íå òîëüêî ñòåïåíåé äâîéêè: î÷åâèäíî, T (n) íåóáûâàþùàÿ ôóíêöèÿ, òàê ÷òî




(4)
T (n) = O 2dlog ne dlog ne = O 2log n+1 (log n + 1) = O(n log n),




(5)
T (n) = Ω 2blog nc blog nc = Ω 2log n−1 (log n − 1) = Ω(n log n).
Òàêèì îáðàçîì, T (n) = Θ(n log n) äëÿ âñåõ n.
Ïðè àíàëèçå ñëîæíîñòè àëãîðèòìîâ íàì áóäóò âñòðå÷àòüñÿ ðåêóððåíòû âèäà
T (n) =

k
X

ai T (bi n) + f (n).

i=1

Îêàçûâàåòñÿ, ñóùåñòâóåò îáùèé ìåòîä, ïîçâîëÿþùèé âî ìíîãèõ ñëó÷àÿõ íàéòè àíàëèòè÷åñêîå âûðàæåíèå äëÿ àñèìïòîòèêè T (n).

Òåîðåìà 1.4 (AkraBazzi).
(
T (x) =

ãäå x ∈ [1, +∞); a

i

,

Ïóñòü äàíî ñëåäóþùåå ðåêóððåíòíîå óðàâíåíèå:
Θ(1),
Pk


i=1 ai T bi x + hi (x) + g(x),

> 0 0 < bi < 1

1 ≤ x ≤ x0 ,
x > x0 ,

 êîíñòàíòû;

hi (x) = O

x
log2 x


;

 ôóíêöèÿ ïîëèíîìèàëüíîãî ðîñòà, ò.å. äëÿ ëþáîãî x ≥ 1, 1 ≤ i ≤ k è u ∈ [b x, x]
âûïîëíÿåòñÿ

g(·)

i

c1 g(x) ≤ g(u) ≤ c2 g(x),

ãäå c , c > 0  íåêîòîðûå êîíñòàíòû; x P íåêîòîðîå äîñòàòî÷íî áîëüøîå ÷èñëî.
Ïóñòü p ∈ Q  ðåøåíèå óðàâíåíèÿ
a b = 1. Òîãäà T (x) èìååò ñëåäóþùóþ
àñèìïòîòèêó:
 

Z
1

2

0

k
i=1

p
i i

x

T (x) = Θ xp 1 +

1

g(u)
du
up+1

.

11

Ââåäåíèå
Èäåÿ äîêàçàòåëüñòâà. Óãàäàâ àñèìïòîòèêó, ìîæíî åå ïðîâåðèòü ïî èíäóêöèè, èñïîëüçóÿ âñå óñëîâèÿ òåîðåìû. Íî êàê óãàäàòü âèä àñèìïòîòèêè? Äëÿ ýòîãî ðàññìîòðèì
óïðîùåííîå óðàâíåíèå:
k
X
T (x) =
ai T (bi x) + g(x), x ≥ 1.
i=1

Çàôèêñèðóåì x. Ñíà÷àëà îöåíèì ïëîòíîñòü ÷èñëà âåðøèí f (t) â äåðåâå ðåêóðñèè íà
x
x
óðîâíå ext (â ëîãàðèôìè÷åñêîì ìàñøòàáå), ò.å. ìåæäó óðîâíÿìè et+δ
è et−δ
íàõîäèòñÿ
f (t)
ïðèìåðíî 2δe
âåðøèí. Ïðåäïîëîæèì, ÷òî ýòà ôóíêöèÿ ãëàäêàÿ. Òîãäà äëÿ ëþáîãî
0 < t < ln x ïîëó÷àåì
!
k
k
k
X
X
 X

f 0 (t)
ai bi
.
ef (t) ≈
ai exp f (t + ln bi ) ≈
ai exp f (t) + f 0 (t) ln bi ) = ef (t)
i=1

i=1

i=1
f 0 (t)
i=1 ai bi
f (ln x)

Ñëåäîâàòåëüíî,
≡ 1, ïîýòîìó f (t) ≡ p è f (t) = pt.
Òàêèì îáðàçîì, e
= ep ln x = xp  ÷èñëî ìèíèìàëüíûõ ïîäçàäà÷. Âñïîìîãàòåëüíûå âû÷èñëåíèÿ çàíèìàþò ïðèìåðíî
Z ln x
Z x
Z x  p
x
g(u)
du
x
ef (t) g t dt =
g(u)
= xp
du.
p+1
e
u
u
0
1 u
1
Pk

0

 èòîãå ïîëó÷àåì òî, ÷òî íóæíî:
x


Z
T (x) = Θ xp + xp
1


g(u)
du
.
up+1


Äîáàâî÷íûå ÷ëåíû hi (·) â óñëîâèè òåîðåìû ïîçâîëÿþò ó÷èòûâàòü, íàïðèìåð, îêðóãëåíèå ÷èñåë, ïðèáàâëåíèå êîíñòàíòû è òàê äàëåå. Çàìåòèì, ÷òî åñëè P
çàìåíèòü âñå ðàâåíñòâà

íà îãðàíè÷åíèÿ
ñâåðõó,
òî
åñòü
ðàññìàòðèâàòü
ðåêóððåíòó
T (x) ≤ ki=1 ai T bi x + hi (x) +

O g(x) , òî
 

Z x
g(u)
T (x) = O xp 1 +
du
.
p+1
1 u

Ïðèìåð 1.5. Ïóñòü äàíî ðåêóððåíòíîå óðàâíåíèå
T (n) = 2T

j n k
5

+T

l n m
3

1
+ T
3



4n
5




+ Θ n log2 n .

âåðîÿòíîñòíûé àëãî-

(Îòêóäà ìîã âçÿòüñÿ ìíîæèòåëü 31 ? Íàïðèìåð, ìû ðàññìàòðèâàëè
ðèòì, è ñ âåðîÿòíîñòü 32 ñîîòâåòñòâóþùåé ïîäçàäà÷è íå âîçíèêàåò.) Ò.ê.
2

12

1
1
14
+ +
= 1,
5
3
35

Ââåäåíèå
òî p = 1. Òîãäà
n

u ln2 u
du =
u2

n


ln3 n
= Θ log3 n .
3
1
1


3
Ñëåäîâàòåëüíî, T (n) = Θ n + n log n = Θ n log3 n .
Z

Z

ln2 ud ln u =

Àìîðòèçàöèîííûé àíàëèç. Íàïîñëåäîê ðàññìîòðèì åùå îäíî ñðåäñòâî àíàëèçà
àëãîðèòìîâ, ïðîèçâîäÿùèõ ïîñëåäîâàòåëüíîñòü îäíîòèïíûõ îïåðàöèé 
. Ïðè àìîðòèçàöèîííîì àíàëèçå êàæäîé îïåðàöèè ïðèñâàèâàåòñÿ íåêîòîðàÿ
ó÷¼òíàÿ ñòîèìîñòü (amortized cost), êîòîðàÿ ìîæåò áûòü áîëüøå èëè ìåíüøå ðåàëüíîé
äëèòåëüíîñòè îïåðàöèè. Ïðè ýòîì äîëæíî âûïîëíÿòüñÿ ñëåäóþùåå óñëîâèå: äëÿ ëþáîé ïîñëåäîâàòåëüíîñòè îïåðàöèé ôàêòè÷åñêàÿ ñóììàðíàÿ äëèòåëüíîñòü âñåõ îïåðàöèé
(ïðåäïîëàãàåòñÿ, ÷òî äî âûïîëíåíèÿ îïåðàöèé ñòðóêòóðà äàííûõ íàõîäèòñÿ â íà÷àëüíîì
ñîñòîÿíèè  íàïðèìåð, ñòåê ïóñò) íå ïðåâîñõîäèò ñóììû èõ ó÷¼òíûõ ñòîèìîñòåé. Åñëè
ýòî óñëîâèå âûïîëíåíî, òî ãîâîðÿò, ÷òî ó÷¼òíûå ñòîèìîñòè ïðèñâîåíû êîððåêòíî. Îöåíêà,
äàâàåìàÿ àìîðòèçàöèîííûì àíàëèçîì, íå ÿâëÿåòñÿ âåðîÿòíîñòíîé: ýòî îöåíêà ñðåäíåãî
âðåìåíè âûïîëíåíèÿ îäíîé îïåðàöèè äëÿ õóäøåãî ñëó÷àÿ.
Ðàññìîòðèì ñëåäóþùèé ïðèìåð àìîðòèçàöèîííîãî àíàëèçà. Ðàññìàòðèâàåòñÿ ñòðóêòóðà äàííûõ, ñîñòîÿùàÿ èç

àìîðòèçàöèîí-

íûé àíàëèç

• ÷èñëà n ∈ N â äâîè÷íîé çàïèñè (dlog2 ne áèòîâ),
• îïåðàöèè Add : N → N, Add(n) = n + 1.

Ïðè èíèöèàëèçàöèè n = 1, âñÿêèé âûçîâ Add óâåëè÷èâàåò õðàíèìîå ÷èñëî íà 1. Òàê êàê
1
. . 1} +1 = 1 0
. . 0} ,
| .{z
| .{z

k

íóëåé

k

íóëåé

òî Add ñîâåðøàåò â õóäøåì ñëó÷àå Θ(log n) ïîáèòîâûõ îïåðàöèé.

Ðàññìîòðèì ïðîöåäóðó, ñîâåðøàþùóþ áîëüøîå ÷èñëî N çàïðîñîâ ê
ïðîöåäóðå Add. Ñóììàðíîå âðåìÿ ðàáîòû âñåõ âûïîëíåíèé ïðîöåäóðû îöåíèâàåòñÿ êàê
Θ(N ) (à íå Θ(N log N )).

Óòâåðæäåíèå 1.6.

Äîêàçàòåëüñòâî. Íóæíî ÷åñòíî ïðîñóììèðîâàòü ñëîæíîñòü âñåõ ïðèìåíåíèé Add
è îöåíèòü åå êàê Θ(N ). Äëÿ íà÷àëà çàìåòèì, ÷òî âñå ÷èñëà îò 1 äî N ìîæíî ðàçáèòü
â äèçúþíêòíîå îáúåäèíåíèå ìíîæåñòâ Ak ÷èñåë, îêàí÷èâàþùèõñÿ íà ðîâíî k åäèíèö
(âîçìîæíî, íîëü); èíûìè ñëîâàìè,

[1; N ] =

N
G
k=0

Ak ,

Ak = {1 . . . 0 1
. . 1} }.
| .{z
k

åäèíèö

13

Ââåäåíèå
Òåïåðü çàìåòèì, ÷òî äëÿ ëþáîãî x ∈ Ak ñëîæíîñòü îïåðàöèè Add ðàâíà k + 1 áèòîâûõ
îïåðàöèé:
1
. . 1} +1 = 1 0
. . 0} ,
| .{z
| .{z
k

íóëåé

k

íóëåé

òîãäà äëÿ ïîëó÷åíèÿ N íàäî çàìåíèòü ïîñëåäíèå k + 1 öèôðó íà ïðîòèâîïîëîæíóþ, 0
íà 1 è íàîîáîðîò. Îñòàëîñü òîëüêî ÷åñòíî ïðîñóììèðîâàòü ñëîæíîñòè êàæäîé îïåðàöèè
Add, ïðèìåíåííîé N ðàç, òî åñòü T (N ). Î÷åâèäíî, T (N ) 6 T (2dlog2 N e ), à T (2n ) ìîæíî
÷åñòíî âû÷èñëèòü. Çàìåòèì, ÷òî
(
2n−k−1 , k < n
|Ak | =
,
1,
k=n
âåäü ïðè k 6= 0 âñå ÷èñëà Ak ìîæíî ïðåäñòàâëÿòü êàê êîíêàòåíàöèþ ïîñëåäîâàòåëüíîñòè
0 è 1 äëèíû n−k è ñëîâà 01 . . . 1 [â ñòàðøèõ ðàçðÿäàõ ìîãóò ñòîÿòü íóëè  ó íàñ ïîëó÷èòñÿ
ïðîñòî ÷èñëî, ìåíüøå íåêîòîðîé ñòåïåíè], à ñëîâ, çàêàí÷èâàþùèõñÿ íà 0, ðîâíî ïîëîâèíà
ñðåäè ïîëîæèòåëüíûõ íå áîëüøèõ 2n ÷èñåë. Òîãäà
T (2n ) =
6n+2

n
X

(k + 1)|Ak | = n +

k=1

X
n−1
k=1

n−1
X

(k + 1)2n−k−1 = n + 2n−1

k=1

k+1
= n + 2n−1
2k



n−1
X
k=1

1
1−z

0

−1−z


1
z= 2

=n+

k+1
6
2k
5 n−1
·2
,
2

è, òàêèì îáðàçîì
T (N ) 6 T (2dlog2 N e ) 6 log2 (N ) + 3N.

Àíàëîãè÷íóþ îöåíêó ñíèçó ñäåëàòü ñîâñåì ïðîñòî: äîñòàòî÷íî ëèøü ñêàçàòü, ÷òî T (N ) >
T (2blog2 N c ) è îöåíèòü T (2blog2 N c ) ñíèçó êàê Θ(N ), ÷òî ñîâåðøåííî î÷åâèäíî. Òîãäà T (N ) =
Θ(N ).


àìîðòèçèðîâàííîå

 ïðîøëîé çàäà÷å ìû ìîãëè ñêàçàòü, ÷òî ñðåäíåå, èëè
âðåìÿ ðàáîòû îïåðàöèè Add åñòü Θ(1). Òåïåðü ðàññìîòðèì åùå îäíó çàäà÷ó, ðåøàþùóþñÿ ñ ïîìîùüþ
àìîðòèçàöèîííîãî àíàëèçà. Ìû ñîáèðàåìñÿ ïîëó÷èòü íèæíþþ îöåíêó íà ìèíèìàëüíîå
÷èñëî Tmin ïîïàðíûõ ñðàâíåíèé, êîòîðîå íåîáõîäèìî ñäåëàòü äëÿ íàõîæäåíèÿ ìèíèìàëüíîãî ýëåìåíòà n-ýëåìåíòíîãî ìàññèâà.

×èñëî øàãîâ ëþáîãî óñòîé÷èâîãî (íå çàâèñÿùåãî îò çíà÷åíèé ýëåìåíòîâ âõîäíîãî ìàññèâà) àëãîðèòìà íàõîæäåíèÿ ìèíèìàëüíîãî ýëåìåíòà A[1 . . n] íå
ìåíüøå n − 1.
Óòâåðæäåíèå 1.7.

Çàïèøåì øàãè àëãîðèòìà â ôîðìàòå êîíôèãóðàöèé (a, b, c), ãäå
• a ýëåìåíòîâ ïîêà íå ñðàâíèâàëèñü,

Äîêàçàòåëüñòâî.

14

Ââåäåíèå
• b ýëåìåíòîâ íèêîãäà íå áûëè áîëüøå â ñðàâíåíèÿõ,
• c ýëåìåíòîâ õîòÿ áû ðàç îêàçàëèñü áîëüøå.
Íà÷àëüíàÿ êîíôèãóðàöèÿ ñóòü Init = (n, 0, 0). Ââåäåì ¾ïîòåíöèàëüíóþ ôóíêöèþ¿ íà
êîíôèãóðàöèÿõ: f [(a, b, c)] = a + b. Ïîêàæåì, ÷òî ïðè ëþáîì ñðàâíåíèè ïîòåíöèàë f (·)
ìîæåò óìåíüøèòüñÿ íå áîëüøå, ÷åì íà åäèíèöó, îòñþäà âûòåêàåò, ÷òî ÷èñëî øàãîâ ëþáîãî òàêîãî àëãîðèòìà íå ìåíüøå n − 1. Àëãîðèòì íàõîäèò ìèíèìàëüíûé ýëåìåíò ìàññèâà,
áàçèðóÿñü íà ðåçóëüòàòàõ ïîïàðíûõ ñðàâíåíèé ýëåìåíòîâ. Ïðîäåìîíñòðèðóåì, êàê ìîãóò
ìåíÿòüñÿ ïàðàìåòðû a, b, c è çíà÷åíèå ôóíêöèè f . Ìû îöåíèì òðóäîåìêîñòü àëãîðèòìà,
ïðîñòî ïîäåëèâ ¾ðàçíîñòü ïîòåíöèàëîâ¿ ìåæäó íà÷àëüíîé è êîíå÷íîé êîíôèãóðàöèÿìè íà ìàêñèìàëüíîå èçìåíåíèÿ ïîòåíöèàëà çà îäèí øàã àëãîðèòìà. Äëÿ äîêàçàòåëüñòâà
óòâåðæäåíèÿ çàäà÷è íóæíî àêêóðàòíî ðàçîáðàòü øåñòü ñëó÷àåâ [â çàâèñèìîñòè îò òîãî,
êàê ñðàâíèâàåìûå íà äàííîì øàãå x è y ó÷àñòâîâàëè â ïðåäûäóùèõ ñðàâíåíèÿõ].
• Åñëè îáà ýëåìåíòà íå ó÷àñòâîâàëè â ñðàâíåíèè, òî ëèáî îäèí èç íèõ â ïðåäñòîÿùåì ñðàâíåíèè ñòàíåò áîëüøå, à äðóãîé  ìåíüøå, òîãäà çíà÷åíèå f óìåíüøèòñÿ
íà îäèí  a óìåíüøèëîñü íà äâà, à b óâåëè÷èëîñü íà îäèí, ëèáî îáà ýëåìåíòà
áóäóò ðàâíû, òî åñòü b óâåëè÷èëîñü íà äâà, à a óìåíüøèëîñü íà äâà, òîãäà f íå
èçìåíèëàñü;
• Åñëè x íå ó÷àñòâîâàë â ñðàâíåíèè, à y õîòÿ áû îäíàæäû îêàçàëñÿ áîëüøå, òî
ëèáî x îêàæåòñÿ ìåíüøå, ÷òî íå èçìåíèò ïîòåíöèàë f [a óìåíüèøëîñü íà 1, c
óâåëè÷èëîñü íà 1], ëèáî y , ÷òî óìåíüøèò ïîòåíöèàë íà 1 [a óìåíüèøëîñü íà 1, b
íå èçìåíèëîñü];
• Åñëè x íå ó÷àñòâîâàë â ñðàâíåíèè, à y âî âñåõ ñðàâíåíèÿõ áûë íå áîëüøå, òî
ëèáî x îêàæåòñÿ ìåíüøå, ÷òî óìåíüøèò çíà÷åíèå f íà îäèí [a óìåíüèøëîñü íà
1, c íå èçìåíèëîñü  âûêèíóëè y èç ìíîæåñòâà ¾âñåãäà ìåíüøèõ ýëåìåíòîâ¿ è
äîáàâèëè x], ëèáî y , ÷òî óìåíüøèò ïîòåíöèàë íà 1 [a óìåíüèøëîñü íà 1, b íå
èçìåíèëîñü];
• Åñëè x áûë âî âñåõ ïðåäûäóùèõ ñðàâíåíèÿõ íå áîëüøå, à y óæå ó÷àñòâîâàë â
ñðàâíåíèÿõ, òî x áóäåò ëèáî áîëüøå [è òîãäà b óìåíüøèòñÿ íà 1], ëèáî áóäåò
ìåíüøå èëè ðàâåí [òîãäà b íå èçìåíèòñÿ], çíà÷åíèå f óìåíüøàåòñÿ íå áîëåå ÷åì
íà îäèí;
• Åñëè îáà ýëåìåíòà áûëè áîëüøå õîòÿ áû â îäíîì ñðàâíåíèèè, òî íåçàâèñèìî îò
èòîãà ñðàâíåíèÿ a è b íå ïîìåíÿþòñÿ, âåäü â ñðàâíåíèè íå ó÷àñòâóþò ¾âñåãäà
ìåíüøèå¿ èëè íåèñïîëüçîâàííûå ýëåìåíòû è íîâûõ òàêèõ ïîÿâèòñÿ, çíà÷åíèå f
íå èçìåíèëîñü.
Âñå ñëó÷àè ðàçîáðàíû, îñòàëîñü òîëüêî âûâåñòè, ÷òî ñðàâíåíèé äîëæíî áûòü õîòÿ áû
n − 1. Ýòî òðèâèàëüíî: a + b óìåíüøàåòñÿ ñ êàæäûì ñðàâíåíèåì íå áîëåå ÷åì íà åäèíèöó, à àëãîðèòì ñìîæåò âûäàòü âåðíûé îòâåò, òîëüêî ëèøü ïðîñìîòðåâ âñå ýëåìåíòû [â
ïðîòèâíîì ñëó÷àå ìîæíî ïîñòðîèòü ïàðó ìàññèâîâ, íà êîòîðûõ àëãîðèòì äåëàåò ñðàâíåíèÿ òåõ æå (ïî íîìåðó) ïàð ýëåìåíòîâ è âûäàåò â îäíîì ñëó÷àå âåðíûé, à â äðóãîì

15

Ââåäåíèå
 íåâåðíûé îòâåò; ïîäðîáíåå îá ýòîì  â ïóíêòå (b) ýòîé æå çàäà÷è]. Òîãäà a äîëæíî
ñòàòü ðàâíûì 0, à b  íå áîëüøèì 1 [âñå ýëåìåíòû ìàññèâà ïðîñìîòðåíû, åäèíñòâåííûé
ìèíèìàëüíûé èç íèõ íàéäåí ëèáî íå ñóùåñòâóåò]. Íà ïîñëåäíåì øàãå f [(0, b, c)] 6 1, è
àëãîðèòì äîëæåí ïðîäåëàòü õîòÿ áû n − 1 ñðàâíåíèå.


Ëèíåéíûå ðåêóððåíòû
Îïðåäåëåíèå 1.8. Áóäåì ãîâîðèòü, ÷òî ïîñëåäîâàòåëüíîñòü (Xn )n∈N çàäàíà

ðåêóððåíòíûì óðàâíåíèåì

Xn = a1 Xn−1 + a2 Xn−2 + · · · + ak Xn−k ,

ëèíåéíûì

Õàðàêòåðèñòè÷åñêèì

åñëè äàíû X0 , . . . Xk−1 , à ôîðìóëà âûøå âåðíà äëÿ âñåõ n > k.
òàêîé ëèíåéíîé ðåêêóðåíòû áóäåì íàçûâàòü óðàâíåíèå

óðàâíåíèåì

λk − a1 λk−1 − · · · − ak = 0,

ãäå λ  ïåðåìåííàÿ.
Ïóñòü λ1 , . . . , λk  êîðíè õàðàêòåðèñòè÷åñêîãî óðàâíåíèÿ. Îêàçûâàåòñÿ, îíè òåñíî
ñâÿçàíû ñ ïðîñòðàíñòâîì ðåøåíèé ëèíåéíîé ðåêóððåíòû, à èìåííî: åñëè îíè âñå ðàçëè÷íû, òî îáùåå ðåøåíèå ðåêóððåíòû èìååò âèä
n
n
Xn = C1 λn
1 + C2 λ2 + · · · + Ck λk .

Êîíñòàíòû C1 , . . . , Cn íàõîäÿòñÿ èç íà÷àëüíûõ óñëîâèé X0 , . . . , Xk−1 .
Åñëè æå êàêîé-òî êîðåíü λj èìååò êðàòíîñòü sj > 1, òî â îáùåå ðåøåíèå âõîäèò
ñëàãàåìîå âèäà
n
sj −1 n
Cj,0 λn
λj .
j + Cj,1 nλj + · · · + Cj,sj −1 n
Íåñëîæíî ïðîâåðèòü (íàïðèìåð, ïî èíäóêöèè), ÷òî òàêèå ïîñëåäîâàòåëüíîñòè äåéñòâèòåëüíî óäîâëåòâîðÿþò äàííîìó ðåêóððåíòíîìó óðàâíåíèþ. Íàïðèìåð, ìîæíî ââåñòè
¾ïîâûøàþùèé îïåðàòîð¿ 2Xn := Xn+1 (îí äåéñòâóåò, âîîáùå ãîâîðÿ, íà âñþ ïîñëåäîâàòåëüíîñòü {Xn }n∈N ). Òîãäà ðåêóððåíòíîå óðàâíåíèå çàïèñûâàåòñÿ â âèäå
2k Xn − a1 2k−1 Xn − · · · − ak Xn =

k
Y

(2 − λi )Xn = 0.

i=1

Åñëè λj èìååò êðàòíîñòü sj , òî ïî èíäóêöèè óñòàíàâëèâàåòñÿ, ÷òî äëÿ 0 6 l 6 sj − 1
âûïîëíÿåòñÿ

(6) (2 − λj )l+1 nl λnj = (2 − λj )l (n + 1)l λn+1
− nl λn+1
=
j
j
= (2 − λj )l

l−1
X
i=0

16

Cli ni λn+1
= λj
j

l−1
X
i=0


Cli (2 − λj )l−i−1 (2 − λj )i+1 ni λn
j = 0.

Ââåäåíèå
Ïî÷åìó ëþáîå ðåøåíèå èìååò òàêîé âèä? Çàìåòèì, ÷òî ïðîñòðàíñòâî ðåøåíèé k-ìåðíîå:
îíè ïîëíîñòüþ îïðåäåëÿþòñÿ íà÷àëüíûìè óñëîâèÿìè, ò.å. k ÷èñëàìè X0 , . . . , Xk−1 . Ìîæíî ðàññìîòðåòü ïîñëåäîâàòåëüíîñòè Xnj , óäîâëåòâîðÿþùèå ðåêóððåíòíîìó óðàâíåíèþ è
Xij = δij , 0 6 i < k. Îíè îáðàçóþò áàçèñ â ïðîñòðàíñòâå ðåøåíèé. Ñ äðóãîé ñòîðîíû,
ðåøåíèÿ âèäà nl λnj ëèíåéíî íåçàâèñèìû, ò.ê. îíè èìåþò ðàçíûé ïîðÿäîê ðîñòà. Ñóììà
êðàòíîñòåé âñåõ êîðíåé ðàâíà k, ïîýòîìó ýòè ðåøåíèÿ òîæå îáðàçóþò áàçèñ, ò.å. ëþáîå
ðåøåíèå ìîæíî ïðåäñòàâèòü â âèäå
Xn =

j −1
X sX

j

Cj,l nl λn
j,

l=0

÷òî è òðåáîâàëîñü.

Ïðèìåð 1.9. Ðàññìîòðèì ÷èñëà Ôèáîíà÷÷è: F0 = 0, F1 = 1, Fn = Fn−1 + Fn−2 , n ≥ 2.
Õàðàêòåðèñòè÷åñêîå óðàâíåíèå äëÿ ýòîé ðåêóððåíòû:
λ2 − λ − 1 = 0.

Åãî êîðíè λ1 =


1− 5
,
2


1+ 5
.
2

Ñëåäîâàòåëüíî, îáùåå ðåøåíèå èìååò âèä
√ n
√ n


1+ 5
1− 5
+ C2
.
Fn = C1
2
2

λ2 =

Íàéäåì êîíñòàíòû C1 è C2 :
(7)

F0 = C1 + C2 = 0,


1− 5
1+ 5
F1 = C1
+ C2
= 1.
2
2

(8)
Ñëåäîâàòåëüíî, C2 = −C1 =

1

.
5

Òàêèì îáðàçîì, ÷èñëà Ôèáîíà÷÷è ðàâíû
√ n 
√ n 

1
1+ 5
1− 5

Fn =

.
2
2
5

Äî ýòîãî ìû ðàññìàòðèâàëè îäíîðîäíîå ëèíåéíîå ðåêóððåíòíîå óðàâíåíèå. Òåïåðü
ðàññìîòðèì
:

íåîäíîðîäíîå

Xn = a1 Xn−1 + a2 Xn−2 + · · · + ak Xn−k + f (n).

Åãî îáùåå ðåøåíèå èìååò âèä

Xn = Xnî.î. + Xn÷.í. ,

ãäå Xnî.î.  îáùåå ðåøåíèå ñîîòâåòñòâóþùåãî îäíîðîäíîãî óðàâíåíèÿ, à Xn÷.í.  íåêîòîðîå
÷àñòíîå ðåøåíèå íåîäíîðîäíîãî.
17

Ââåäåíèå

Ïðèìåð 1.10. Ðàññìîòðèì ÷èñëà Ôèáîíà÷÷è, íî ñ äîïîëíèòåëüíûì ñëàãàåìûì: F̃0 = 0,

F̃1 = 1, F̃n = F̃n−1 + F̃n−2 + n, n ≥ 2. Îáùåå ðåøåíèå îäíîðîäíîãî óðàâíåíèÿ, êàê ìû
çíàåì, èìååò âèä
√ n
√ n


1− 5
1+ 5
F n = C1
+ C2
.
2
2
×àñòíîå ðåøåíèå íåîäíîðîäíîãî ìîæíî óãàäàòü. Ò.ê. f (n) ëèíåéíà, òî ðåøåíèå áóäåì
èñêàòü òîæå ëèíåéíîå: Fn = an + b. Òîãäà
an + b = a(n − 1) + b + a(n − 2) + b + n = (2a + 1)n + 2b − 3a.

Ñëåäîâàòåëüíî, a = −1, b = 3a = −3, è ðåøåíèå èìååò âèä
√ n
√ n


1+ 5
1− 5
F̃n = C1
+ C2
− an − 3.
2
2
Êîíñòàíòû C1 è C2 íàõîäÿòñÿ èç ñèñòåìû óðàâíåíèé:
(9)
(10)

18

F̃0 = C1 + C2 − 3 = 0,


1− 5
1+ 5
F̃1 = C1
+ C2
− 4 = 1.
2
2

Ââåäåíèå

Âåðîÿòíîñòü: ââåäåíèå
Íà âñÿêèé ñëó÷àé çäåñü ïðèâåäåíî êðàòêîå íàïîìèíàíèå äèñêðåòíîé âåðñèè òåîðèè
âåðîÿòíîñòè. Äëÿ áîëåå ïîäðîáíîãî îçíàêîìëåíèÿ ñîâåòóåì êíèãè [38, 16, 22], à òàêæå
çàäà÷íèê [14].

Îïðåäåëåíèå 1.11.

Âåðîÿòíîñòíûì ïðîñòðàíñòâîì

íàçûâàåòñÿ ìíîæåñòâî Ω, ýëåìåíòû êîòîðîãî íàçûâàþòñÿ âîçìîæíûìè èëè ýëåìåíòàðíûìè èñõîäàìè ω ∈ Ω. Íà âåðîÿòíîñòíîì ïðîñòðàíñòâå çàäàíà ôóíêöèÿ P : Ω → P
[0, 1], íàçûâàåìàÿ
P(ω) = 1. ×èñëî P(ω) ïîíèìàåòñÿ êàê
, äëÿ êîòîðîé âûïîëíåíî ðàâåíñòâî

âåðîÿòíîñòíûì ðàñ-

ïðåäåëåíèåì
âåðîÿòíîñòü ω.

ω∈Ω

Îïðåäåëåíèå 1.12.

Ñîáûòèåì íàçûâàåòñÿ ïðîèçâîëüíîå ïîäìíîæåñòâî
Ω. ÑîîòâåòñòâåíP
def

íî, âåðîÿòíîñòü ñîáûòèÿ A ⊆ Ω îïðåäåëÿåòñÿ ôîðìóëîé P(A) =

ω∈A

P(ω).

 êà÷åñòâå ïðîñòåéøåãî ïðèìåðà ìîæíî ðàññìîòðåòü êëàññè÷åñêóþ, èëè íàèâíóþ,
òåîðèþ âåðîÿòíîñòè, êîãäà âñå èñõîäû ïîëàãàþòñÿ ðàâíîâåðîÿòíûìè: íàïðèìåð, ïðè áðîñàíèè ñèììåòðè÷íîé ìîíåòêè (òî åñòü âåðîÿòíîñòü ëþáîãî èñõîäà åñòü 21 ) èëè èãðàëüíîé
êîñòè (âûïàäàåò ÷èñëî îò 1 äî 6, âåðîÿòíîñòü êàæäîãî èñõîäà åñòü 16 ).

Îïðåäåëåíèå 1.13. Ñîáûòèÿ A è B íàçûâàþò íåçàâèñèìûìè, åñëè
P(A ∩ B) = P(A)P(B).

ïîïàðíî íåçàâèñèìûìè
íåçàâèñèìûìè â ñîâîêóïíîñòè

Ñîáûòèÿ A1 , . . . , An íàçûâàþòñÿ
, åñëè ëþáûå äâà èç íèõ ÿâëÿþòñÿ
íåçàâèñèìûìè. Ñîáûòèÿ A1 , . . . , An íàçûâàþòñÿ
, åñëè äëÿ
ëþáîãî íàáîðà èç ýòèõ ñîáûòèé Ai1 , . . . , Aik âûïîëíÿåòñÿ
P(Ai1 ∩ Ai2 ∩ · · · ∩ Aik ) = P(Ai1 )P(Ai2 ) . . . P(Aik ).

Îïðåäåëåíèå 1.14.
ëÿåòñÿ èç ôîðìóëû

Óñëîâíàÿ âåðîÿòíîñòü P(A | B) ñîáûòèÿ A ïðè óñëîâèè B îïðåäåP(A ∩ B) = P(A | B) · P(B).

 ÷àñòíîñòè, åñëè P(B) > 0, òî ñïðàâåäëèâî ðàâåíñòâî
P(A | B) =

Òåîðåìà 1.15 (Bayes).

P(A ∩ B)
.
P(B)

Åñëè P(A) > 0 è P(B) > 0, òî
P(A | B) = P(A) ·

P(B | A)
.
P(B)

19

Ââåäåíèå

Åñëè ñîáûòèÿ B , . . . , B îáðàçóþò ðàçáèåíèå âåðîÿòíîñòíîãî ïðîñòðàíñòâà Ω, òî åñòü Ω = B t · · · t B è ïåðåñå÷åíèÿ ïîïàðíî ïóñòû: B ∩ B = ∅, i 6= j , òî
äëÿ ëþáîãî ñîáûòèÿ A âûïîëíåíà ôîðìóëà ïîëíîé âåðîÿòíîñòè:

Ëåììà 1.16.

1

1

n

n

i

P(A) =

n
X

j

P(A | Bi ) · P(Bi ).

i=1

Îïðåäåëåíèå 1.17.

Cëó÷àéíàÿ âåëè÷èíà

Îïðåäåëåíèå 1.18.

Ìàòåìàòè÷åñêèì îæèäàíèåì ñëó÷àéíîé âåëè÷èíû ξ íàçûâàåòñÿ

ξ : Ω → R  ýòî ÷èñëîâàÿ ôóíêöèÿ íà âåðîÿòíîñòíîì ïðîñòðàíñòâå. Èíà÷å ãîâîðÿ, ñëó÷àéíàÿ âåëè÷èíà  ýòî îáû÷íàÿ ÷èñëîâàÿ
ôóíêöèÿ, ïðèíèìàþùàÿ íåêîòîðîå çíà÷åíèå ñ íåêîòîðîé âåðîÿòíîñòüþ.

åå ñðåäíåâçâåøåííîå çíà÷åíèå

def

Eξ =

X

ξ(ω) · P(ω).

ω∈Ω

Ìàòåìàòè÷åñêîå îæèäàíèå ëèíåéíîé êîìáèíàöèè ñëó÷àéíûõ âåëè÷èí ðàâíî ñîîòâåòñòâóþùåé ëèíåéíîé êîìáèíàöèè èõ ìàòîæèäàíèé:
E(aξ + bψ) = aE(ξ) + bE(ψ).

Ïðèìåð 1.19. Ðàññìîòðèì

ìîäåëü Ýðä¼øà-Ðåíüè

ñëó÷àéíîãî ãðàôà íà n âåðøèíàõ 
òî åñòü ñëó÷àéíûé ãðàô, â êîòîðîì ðåáðà ìåæäó êàæäîé ïàðîé âåðøèí íåçàâèñèìî ãåíåðèðóþòñÿ ñ âåðîÿòíîñòüþ p. Íàéäåì ìàòåìàòè÷åñêîå îæèäàíèå ÷èñëà ïðîñòûõ öèêëîâ
äëèíû r â ñëó÷àéíîì ãðàôå G = (V, E) íà n âåðøèíàõ. Âîñïîëüçóåìñÿ ëèíåéíîñòüþ ìàòîæèäàíèÿ. Ïóñòü S ⊂ V, |S| = r  ïîäìíîæåñòâî âåðøèí, îïðåäåëèì
(
1, ÷åðåç âåðøèíû S ïðîõîäèò ïðîñòîé öèêë
I(S, G) =
0, èíà÷å
Íà âåðîÿòíîñòíîì ïðîñòðàíñòâå ãðàôîâ íà n âåðøèíàõ ñëó÷àéíûå âåëè÷èíû I(S, G) íå
îáÿçàòåëüíî íåçàâèñèìû. Îäíàêî åñëè Nr (G)  ÷èñëî ïðîñòûõ öèêëîâ äëèíû r, òî
X
Nr (G) =
I(S, G);
S⊂V (G)

÷åðåç êàæäîå ìíîæåñòâî âåðøèí ìîùíîñòè r ïðîõîäèò íå áîëåå îäíîãî ïðîñòîãî öèêëà,
â ïðîòèâíîì ñëó÷àå îäèí èç öèêëîâ íå áóäåò ïðîñòûì. Äåéñòâèòåëüíî, ïóñòü â ïåðâîì
öèêëå âåðøèíû çàíóìåðîâàíû â íåêîòîðîì ïîðÿäêå (1, 2 . . . r), äðóãîé öèêë ñîäåðæèò
íåêîòîðîå ðåáðî (ij) äëÿ íåêîòîðîãî j 6= i + 1, òîãäà öèêë (i, j , j + 1, . . . , i − 1) èìååò
äëèíó íå áîëåå r − 1.
Òîãäà èç òîëüêî ÷òî äîêàçàííîé ôîðìóëû ñëåäóåò
!
X
n
EI(S, G) =
ECyc ,
ENr (G) =
r
S⊂V (G)

20

Ââåäåíèå
ãäå ECyc  ìàòîæèäàíèå îäíîãî ïðîñòîãî öèêëà äëèíû r (íåòðóäíî âèäåòü, ÷òî âñå ñëàãàåìûå EI(S, G) ðàâíû). Íåòðóäíî òàêæå âèäåòü, ÷òî ECyc åñòü ïðîñòî âåðîÿòíîñòü âîçíèêíîâåíèÿ ïðîñòîãî öèêëà äëèíû r. À èìåííî, äîëæíû âîçíèêíóòü r ðåáåð, r(r−3)
äèàãîíàëè
2
(r−1)!
(îíè äîëæíû áûòü èíäîëæíû îòñóòñòâîâàòü, à ñàìèõ ðàçëè÷íûõ öèêëîâ âñåãî
2
âàðèàíòû îòíîñèòåëüíî çàìåíû îðèåíòàöèè íà îáðàòíóþ è öèêëè÷åñêîãî ñäâèãà), òîãäà
ïîëó÷àåì îòâåò ECyc =

(r−1)! r
p (1
2

r(r−3)
2

− p)

ENr (G) =

è

r(r−3)
n!
pr (1 − p) 2
2r(n − r)!

Ïóñòü äëÿ ñëó÷àéíîé âåëè÷èíû ξ âûïîëíåíî Eξ =
, òîãäà ñóùåñòâóåò èñõîä ω, ÷òî ξ(ω) > A (ðàâíî êàê ñóùåñòâóåò èñõîä, ïðè êîòîðîì
âûïîëíåíî ïðîòèâîïîëîæíîå íåðàâåíñòâî).

Ëåììà 1.20 (Âåðîÿòíîñòíûé ìåòîä).
A

Äîêàçàòåëüñòâî.

Äîïóñòèì îáðàòíîå, òî åñòü ξ(ω) < A äëÿ âñåõ ω ∈ Ω, òîãäà
X
X
E[ξ] =
ξ(ω) · P(ω) < A
P(ω) = A.
ω∈Ω

ω∈Ω



Âåðîÿòíîñòíûé ìåòîä óäîáíî ïðèìåíÿòü â êîìáèíàòîðíûõ çàäà÷àõ.

Óòâåðæäåíèå 1.21. Äëÿ ëþáîãî ãðàôà G ñóùåñòâóåò òàêàÿ ðàñêðàñêà âåðøèí â ÷åðíûé
è áåëûé öâåò, ÷òî íå ìåíåå ïîëîâèíû ðåáåð îêàæóòñÿ ðàçíîöâåòíûìè.
Äîêàçàòåëüñòâî. Ïóñòü â äàííîì ãðàôå G = (V, E) âñåãî n âåðøèí. Çàäàäèì íà
ìíîæåñòâå Ω ðàñêðàñîê ãðàôà G â äâà öâåòà ðàâíîìåðíîå ðàñïðåäåëåíèå, òî åñòü âåðîÿòíîñòü ëþáîé ðàñêðàñêè ω ãðàôà G áóäåò îäèíàêîâîé è ðàâíîé 21n . Äëÿ êàæäîãî ðåáðà
(ij) çàäàäèì ñëó÷àéíóþ âåëè÷èíó
(
1, i è j ðàñêðàøåíû â ðàçíûå öâåòà
I(ij) (ω) =
0, èíà÷å

Òîãäà åñëè ξ(ω)  ÷èñëî ðàçíîöâåòíûõ ðåáåð â ðàñêðàñêå ω , òî
X
ξ(ω) =
I(ij) (ω).
(ij)∈E

Òåïåðü çàìåòèì, ÷òî åñëè çàôèêñèðîâàòü öâåòà äâóõ ñìåæíûõ âåðøèí, òî âñå îñòàëüíûå
âåðøèíû ìîæíî ðàñêðàñèòü 2n−2 ñïîñîáàìè. Òàêèì îáðàçîì ïîëó÷àåì, ÷òî
2n−2
2n−2
2n−2
2n−2
1
E[I(ij) ] = 0 · n + 0 · n + 0 · n + 0 · n = .
2
2
2
2
2
| {z } | {z } | {z } | {z }
××

Á×

×Á

ÁÁ

21

Powered by TCPDF (www.tcpdf.org)

Ââåäåíèå
Îòñþäà ïîëó÷àåì, ÷òî

E[ξ] = E 


X

X

I(ij)  =

(ij)∈E

E[I(ij) ] = |E| ·

(ij)∈E

1
.
2

Âîñïîëüçóåìñÿ âåðîÿòíîñòíûì ìåòîäîì è ïîëó÷èì, ÷òî ñóùåñòâóåò ðàñêðàñêà òàêàÿ, ÷òî
â íåé íå ìåíåå |E|
ðåáåð ðàçíîöâåòíûå, ÷òî è òðåáîâàëîñü äîêàçàòü.

2

íåçàâèñèìû

Îïðåäåëåíèå 1.22. Äâå ñëó÷àéíûå âåëè÷èíû ξ è ψ
, åñëè äëÿ ëþáûõ ÷èñåë
c è d ñîáûòèÿ ξ −1 (c) = {ω ∈ Ω : ξ(ω) = c} è ψ −1 (d) íåçàâèñèìû.

Ìàòåìàòè÷åñêîå îæèäàíèå ïðîèçâåäåíèÿ íåçàâèñèìûõ ñëó÷àéíûõ âåëè÷èí ðàâíî ïðîèçâåäåíèþ èõ ìàòåìàòè÷åñêèé îæèäàíèé:
Ëåììà 1.23.

E(ξ · ψ) = Eξ · Eψ.

Ïðèìåð 1.24. Ïðèâåäÿ ÿâíûé êîíòðïðèìåð, ïîêàæåì, ÷òî èç ïîïàðíîé íåçàâèñèìîñòè

ñëó÷àéíûõ âåëè÷èí íå ñëåäóåò èõ íåçàâèñèìîñòü â ñîâîêóïíîñòè. Ïóñòü ñèììåòðè÷íàÿ
ìîíåòà áðîñàåòñÿ 4 ðàçà ïîäðÿä, èñõîäû xi ∈ {0, 1} äëÿ i ∈ [1; 4]; ãîâîðèì, ÷òî xi = 0, åñëè
âûïàë îðåë, xi = 1, åñëè âûïàëà ðåøêà. Ïîñëåäîâàòåëüíîñòü èñõîäîâ áóäåì îáîçíà÷àòü
ñîîòâåòñòâóþùèì ñëîâîì èç íóëåé è åäèíèö. Ðàññìîòðèì ñîáûòèÿ
A={

4
X

.
xi .. 2},

i=1

B = {x1 = 1 ∧ x2 = 1},
C = {x3 = 1 ∧ x4 = 1}.

Çàìåòèì, ÷òî
P(A) =

4
0



+

4
2
24

P(B) = P(C) =



+

4
4


=

1
,
2

22
1
= .
24
4

Äàëåå,
1 1
1
= · = P(B)P(C),
16
4 4
2
1 1
P(A ∩ B) = P({1100, 1111}) =
= · = P(A)P(B),
16
2 4
è àíàëîãè÷íî ïîëó÷èì, ÷òî A è C íåçàâèñèìû. Îäíàêî æå
P(B ∩ C) = P({1111}) =

P(A ∩ B ∩ C) = P({1111}) =

22

1
1
6=
= P(A)P(B)P(C)
16
32

Ââåäåíèå

Äèñïåðñèåé

Îïðåäåëåíèå 1.25.
D ñëó÷àéíîé âåëè÷èíû íàçûâàåòñÿ ñðåäíèé êâàäðàò åå
îòêëîíåíèÿ îò ìàòåìàòè÷åñêîãî îæèäàíèÿ:
Dξ = E(ξ − Eξ)2 .

Òåîðåìà 1.26 (Markov).

Äëÿ íåîòðèöàòåëüíîé ñëó÷àéíîé âåëè÷èíû ξ èìååò ìåñòî
P(ξ > a) 6

Òåîðåìà 1.27 (Chebyshe).


.
a

Äëÿ íåîòðèöàòåëüíîé ñëó÷àéíîé âåëè÷èíû ξ èìååò ìåñòî
P(| ξ − Eξ |> a) 6


.
a2

Òåîðåìà 1.28 (Cherno). Îáîçíà÷èì ÷åðåç ξ ñëó÷àéíóþ âåëè÷èíó, ðàâíóþ êîëè÷åñòâó
âûïàâøèõ îðëîâ ïîñëå n ïîäáðàñûâàíèé ñèììåòðè÷íîé ìîíåòû, à ÷åðåç x =  ÷àñòîòó âûïàâøèõ îðëîâ. Ïðè áîëüøèõ n ÷àñòîòà ñ î÷åíü áîëüøîé âåðîÿòíîñòüþ îêàçûâàåòñÿ áëèçêîé ê . Èìååò ìåñòî ñëåäóþùàÿ îöåíêà:
n

n

ξn
n

1
2



P | ξn −


1
n
|> n = P(| xn − |> ) < 2 exp(−22 n).
2
2

Èìåþò ìåñòî åùå íåñêîëüêî íåðàâåíñòâ ïîäîáíîãî ðîäà, åñëè ìîíåòêà íåñèììåòðè÷íàÿ. Ïóñòü îðåë âûïàäàåò â âåðîÿòíîñòüþ
p. Òîãäà


δ2 p
P(xn < (1 − δ)p) < exp −
,
2
 2 
δ p
P(xn > (1 + δ)p) < exp −
,
3


δp
P(xn > (1 + δ)p) < exp −
,
3

0 6 δ 6 1,
0 6 δ 6 1,
δ > 1.

23

×àñòü 2

Ñîðòèðîâêè è ìåäèàíû

Ñîðòèðîâêè
Ïåðåä òåì, êàê ðàññìàòðèâàòü êîíêðåòíûå ïðèìåðû àëãîðèòìîâ ñîðòèðîâêè è îöåíèâàòü èõ âðåìÿ ðàáîòû, çàôèêñèðóåì ïîñòàíîâêó çàäà÷è ñîðòèðîâêè, à òàêæå äîãîâîðèìñÿ
î òîì, êàê ìû áóäåì îöåíèâàòü âðåìÿ ðàáîòû àëãîðèòìà ñîðòèðîâêè.
Çàäà÷à ñîðòèðîâêè ôîðìóëèðóåòñÿ ñëåäóþùèì îáðàçîì. Íà âõîä ïîäà¼òñÿ N ýëåìåíòîâ a1 , a2 , . . . , aN (íàïðèìåð, ýòî ìîæåò áûòü ìàññèâ ÷èñåë, êàðòèíîê, èì¼í è òàê äàëåå).
Êàæäûé ýëåìåíò ai ñîñòîèò èç äâóõ ÷àñòåé: íåêîòîðîé èíôîðìàöèè è êëþ÷à ki (íàïðèìåð, â ñëó÷àå ìàññèâà ÷èñåë êëþ÷ ïðîñòî ñîâïàäàåò ñ ki ; â ñëó÷àå ìàññèâà êàðòèíîê
èíôîðìàöèåé ìîæåò áûòü ñàìà êàðòèíêà, à êëþ÷îì  íåêîòîðûé id ýòîé êàðòèíêè èëè
èìÿ ôàéëà; êîãäà ìû èìååì äåëî ñî ñïèñêîì èì¼í, êëþ÷àìè îïÿòü-òàêè ìîãóò áûòü ñàìè
èìåíà). Íà ìíîæåñòâå êëþ÷åé ââåäåíî îòíîøåíèå ïîðÿäêà ¾ y , ëèáî x = y ;
(2) çàêîí òðàíçèòèâíîñòè: åñëè x < y è y < z , òî x < z .
Ãðóáî ãîâîðÿ, ìû ìîæåì ñðàâíèâàòü ýëåìåíòû ìàññèâà ïðè ïîìîùè ñðàâíåíèÿ êëþ÷åé.
Çàäà÷à ñîðòèðîâêè ñîñòîèò â òîì, ÷òîáû íà âûõîäå ïîëó÷èòü ìàñèèâ ai1 , ai2 , . . . , aiN ,
ó êîòîðîãî ki1 6 ki2 6 . . . 6 kiN . Ïðè ýòîì â àáñòðàêòíîé çàäà÷å ñîðòèðîâêè ñàìè êëþ÷è
ìîãóò áûòü ëþáîé ïðèðîäû. Åäèíñòâåííîå, íà ÷òî ìû ìîæåì ðàññ÷èòûâàòü, òàê ýòî íà
òî, ÷òî ìû ìîæåì ñðàâíèâàòü êëþ÷è. Ïîýòîìó ïðèíÿòî îöåíèâàòü âðåìåííóþ ñëîæíîñòü
àëãîðèòìà ñîðòèðîâêè ÷èñëîì ïîïàðíûõ ñðàâíåíèé (ñ÷èòàåòñÿ, ÷òî âðåìÿ ðàáîòû â òàêîì
ñëó÷àå ïðîïîðöèîíàëüíî ÷èñëó ñðàâíåíèé).

Ñîðòèðîâêà ñëèÿíèåì. Íåôîðìàëüíîå îïèñàíèå ñëåäóþùåå: äåëèì ìàññèâ íà äâå
ïî÷òè ðàâíûå ÷àñòè, êàæäóþ èç íèõ ñîðòèðóåì, âûçûâàÿ ïðîöåäóðó ðåêóðñèâíî äëÿ êàæäîé èç ÷àñòåé, è ñîåäèíÿåì îòñîðòèðîâàííûå ÷àñòè çà ëèíåéíîå âðåìÿ ïðè ïîìîùè ïðîöåäóðû Merge, êîòîðóþ ìû îïèøåì äàëåå. Äàííàÿ èäåÿ çàïèñûâàåòñÿ ôîðìàëüíî â âèäå
ñëåäóþùåé ïðîöåäóðû, êîòîðàÿ ïðèíèìàåò íà âõîä ÷àñòü ìàññèâà A[p . . r] è ñîðòèðóåò
åãî.
1: procedure Merge(A, p, q, r )
2:
i←0
3:
j←0
4:
while p + i < q è q + j < r do
5:
if A[p + i] < A[q + j] then
6:
B[i + j] ← A[p + i]
7:
i←i+1
8:
9:
10:
11:

else

B[i + j] ← A[q + j]
j ←j+1

end if

Ñîðòèðîâêè è ìåäèàíû
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:

end while
while p + i < q do
B[i + j] ← A[p + i]
i←i+1

end while
while q + j < r do

B[i + j] ← A[q + j]
j ←j+1

end while
for k ← 0 to i + j do
A[p + k] ← B[k]

end for
end procedure

Íà êàæäîì øàãå ýòîé ïðîöåäóðû èç êàæäîãî èç äâóõ ìàññèâîâ A[p . . q] è A[q . . r]
áåðåòñÿ ìèíèìàëüíûé íåâñòàâëåííûé ýëåìåíò, x è y ñîîòâåòñòâåííî, â ðåçóëüòèðóþùèé
ìàññèâ âñòàâëÿåòñÿ ìèíèìàëüíûé èç ýëåìåíòîâ x è y . Íåòðóäíî âèäåòü, ÷òî åñëè A[p . . q]
è A[q . . r] óïîðÿäî÷åíû, òî è A[p . . r] òàêæå óïîðÿäî÷åí.
Òåïåðü îïèøåì ñàì àëãîðèòì.
1: procedure Mergesort(A, p, r )
2:
if p < r then
 p+r 
3:
Mergesort(A, p,
)
 p+r 2
4:
Mergesort(A,
+
1, r)
 p+r 2
,
r
)
5:
Merge(A, p,
2
6:
7:

end if
end procedure

Êîððåêòíîñòü ñîðòèðîâêè ñëèÿíèåì ëåãêî óñòàíîâèòü èíäóêöèåé ïî äëèíå ìàññèâà. Áàçà
î÷åâèäíî âåðíà  ñîðòèðîâêà ìàññèâà äëèíû 1 åãî æå è âîçâðàùàåò. Åñëè Mergesort
êîððåêòíî ñîðòèðóåò âñå ìàññèâû äëèíû
 p+rìåíüøå

 n, òî
 ðàáîòàÿ íà ìàññèâå äëèíû n
Mergesort êîððåêòíî ñîðòèðóåò A[p . .
] è A[ p+r
+ 1 . . r] è êîððåêòíî èõ ñëèâàåò.
2
2
Íåòðóäíî ïîêàçàòü, ÷òî ïðîöåäóðà Merge ðàáîòàåò çà âðåìÿ Θ(n) äëÿ ìàññèâà ðàçìåðà n. Åñëè îáîçíà÷èòü ÷åðåç T (n) âðåìåííóþ ñëîæíîñòü ðàáîòû àëãîðèòìà Mergesort
íà ìàññèâå äëèíû n, òî ìîæíî ïîëó÷èòü ñëåäóþùåå ðåêóððåíòíîå ñîîòíîøåíèå:
j n k
l n m
T (n) = T
+T
+ O(n).
2
2
Ïî òåîðåìå Àêêðà-Áàççè a1 = a2 = 1, b1 = b2 = 21 , ñëåäîâàòåëüíî, p = 1.
Z n
u
du = ln n.
2
u
1
Ñëåäîâàòåëüíî, T (n) = Θ(n + n log n) = Θ(n log n).
27

Ñîðòèðîâêè è ìåäèàíû

Áûñòðàÿ ñîðòèðîâêà: äåòåðìèíèðîâàííàÿ è âåðîÿòíîñòíàÿ âåðñèè. Ðàññìîòðèì òåïåðü âåðîÿòíîñòíûé àëãîðèòì ñîðòèðîâêè ìàññèâà ïîä íàçâàíèåì
(Quicksort). Êàê ìû óâèäèì äàëåå, ýòîò àëãîðèòì â õóäøåì ñëó÷àå ðàáîòàåò êàê
ñîðòèðîâêà ïóçûðüêîì òî åñòü Θ(n2 ), îäíàêî ìàòåìàòè÷åñêîå îæèäàíèå âðåìåíè ðàáîòû ýòîãî àëãîðèòìà ðàâíÿåòñÿ Θ(n log n), ïðè÷¼ì ìíîæèòåëü ïðè n log n äîñòàòî÷íî ìàë.
Êðîìå òîãî, áûñòðàÿ ñîðòèðîâêà òðåáóåò òîëüêî O(1) äîïîëíèòåëüíîé ïàìÿòè. Ïîýòîìó
ýòîò àëãîðèòì ëþáÿò èñïîëüçîâàòü íà ïðàêòèêå.
Îäíàêî íà÷í¼ì ìû äëÿ ïðîñòîòû ñ äåòåðìèíèðîâàííîãî àíàëîãà ïðîöåäóðû Quicksort
(è èìåííî åãî áóäåì íàçûâàòü Quicksort; âåðîÿòíîñòíûé àíàëîã ìû áóäåì íàçûâàòü
Randomized-Quicksort). Áûñòðàÿ ñîðòèðîâêà îñíîâàíà íà ìåòîäå ¾ðàçäåëÿé è âëàñòâóé¿, à èìåííî, ñîðòèðîâêà ó÷àñòêà A[p . . r] ïðîèñõîäèò ñëåäóþùèì îáðàçîì.

áûñòðàÿ ñîðòè-

ðîâêà

(1) Ýëåìåíòû ìàññèâà A ïåðåñòàâëÿþòñÿ òàê, ÷òîáû ëþáîé èç ýëåìåíòîâ ó÷àñòêà
A[p . . q] áûë íå áîëüøå ëþáîãî èç ýëåìåíòîâ ó÷àñòêà A[q + 1 . . r], ãäå p 6 q < r.
Ýòó îïåðàöèþ ìû áóäåì íàçûâàòü Partition. Ìû ñ íåé óæå ñòàëêèâàëèñü, êîãäà
èçó÷àëè ïîèñê ìåäèàíû çà ëèíåéíîå âðåìÿ íà ïåðâîì ñåìèíàðå.
(2) Ïðîöåäóðà ñîðòèðîâêè âûçûâàåòñÿ ðåêóðñèâíî äëÿ ìàññèâîâ A[p . . q] è A[q +
1 . . r].
 ðåçóëüòàòå òàêîé ïðîöåäóðû ìàññèâ A[p . . r] áóäåò îòñîðòèðîâàí.
1: procedure Quicksort(A, p, r )
2:
if p < r then
3:
q ← Partition(A, p, r)
4:
Quicksort(A, p, q )
5:
Quicksort(A, q + 1, r )
6:
7:

end if
end procedure

×òîáû îòñîðòèðîâàòü âåñü ìàññèâ íåîáõîäèìî âûïîëíèòü ïðîöåäóðó Quicksort(A, 1, |A|).
Îñíîâíîé øàã äàííîãî àëãîðèòìà ñîñòîèò â ðàçáèåíèè ìàññèâà íà äâå ÷àñòè. Ðàññìîòðèì ñëåäóþùóþ ïðîöåäóðó.
1: procedure Partition(A, p, r )
2:
x ← A[p]
3:
i←p−1
4:
j ←r+1
5:
6:
7:
8:
9:
10:

28

while True do
repeat j ← j − 1
until A[j] 6 x
repeat i ← i + 1
until A[i] > x
if i < j then

Ñîðòèðîâêè è ìåäèàíû
11:
12:
13:
14:
15:
16:

A[i] ↔ A[j]

else
return j
end if
end while
end procedure

 êà÷åñòâå ãðàíè÷íîãî ýëåìåíòà áåð¼òñÿ x = A[p]. Äàëååìàññèâ ïðîõîäèòñÿ ñ äâóõ êîíöîâ
íà âñòðå÷ó äðóã äðóãó. Åñëè ïðè ïðîõîäå ñëåâà íàïðàâî âñòðå÷àåòñÿ ýëåìåíò íå ìåíüøèé
x, òî ìû îñòàíàâëèâàåìñÿ íà í¼ì. Àíàëîãè÷íî, åñëè ïðè ïðîõîäå ñïðàâà íàëåâî âñòðå÷àåòñÿ ýëåìåíò íå áîëüøèé x, òî ìû îñòàíàâëèâàåìñÿ íà í¼ì. Åñëè i < j , òî, ýëåìåíòû
A[i] è A[j] íóæíî ïîìåíÿòü ìåñòàìè (óñòðàíèòü êîëëèçèþ). Êîãäà âñå ýëåìåíòû áóäóò
îáðàáîòàíû, òî èíäåêñ j áóäåò ãðàíèöåé ëåâîé ÷àñòè ìàññèâà. Òàê êàê êàæäûé ýëåìåíò
ìû ñðàâíèâàåì ñ x íå áîëåå äâóõ ðàç è ñðàâíèâàåì ÷èñëà i è j òîæå íå áîëåå n ðàç, òî
âðåìÿ ðàáîòû ïðîöåäóðû Partition ðàâíÿåòñÿ Θ(n).
Âðåìÿ ðàáîòû ïðîöåäóðû Quicksort çàâèñèò îò òîãî, íàñêîëüêî õîðîøî ìû ðàçäåëÿåì ìàññèâ íà äâå ÷àñòè. Íåòðóäíî ïîêàçàòü, ÷òî åñëè ðàçäåëåíèå ïðîèñõîäèò ïðèìåðíî íà
ðàâíûå ÷àñòè, òî ðåêóððåíòíîå ñîîòíîøåíèå íà âðåìÿ ðàáîòû áûñòðîé ñîðòèðîâêè áóäåò
èìåòü âèä
n
+ Θ(n),
T (n) = 2T
2
èç êîòîðîãî ñëåäóåò, ÷òî T (n) = O(n log n). Ýòî ñîîòâåòñòâóåò íàèëó÷øåìó ðàçáèåíèþ.
Íàèõóäøèé ñëó÷àé íàñòóïàåò ïðè óñëîâèè, ÷òî ïðè êàæäîì âûçîâå ïðîöåäóðû Partition
ìàññèâ äåëèòñÿ íà äâå ÷àñòè ðàçìåðîâ 1 è n − 1 ñîîòâåòñòâåííî.  òàêîì ñëó÷àå ðåêóððåíòíîå ñîîòíîøåíèå ïîëó÷àåòñÿ ñëåäóþùèì:
T (n) = T (n − 1) + Θ(n),

îòêóäà
T (n) =

n
X
k=1

Θ(k) = Θ

n
X

!
k

= Θ(n2 ).

k=1

Áîëåå òîãî, çàìåòèì, ÷òî åñëè íà êàæäîì øàãå ìàññèâ äåëèòñÿ íà ÷àñòè ðàçìåðà αn
è (1 − α)n, ãäå α ∈ (0, 1), òî ðåêóððåíòíîå ñîîòíîøåíèå áóäåò ñëåäóþùèì:
T (n) = T (αn) + T ((1 − α)n) + Θ(n),

îòêóäà ïîëó÷àåì, ÷òî T (n) = Θ(n log n) (ýòó îöåíêó ìîæíî ïîêàçàòü, íàïðèìåð, ïî èíäóêöèè).
Ìû âèäèì, ÷òî ïðîöåäóðà Partition íà íåêîòîðûõ âõîäàõ áóäåò ðàáîòàòü äîëãî, à
íà íåêîòîðûõ  áûñòðî. Åñëè æå ìû õîòèì, ÷òîáû âðåìÿ ðàáîòû ïðîöåäóðû íå çàâèñåëî
îò òîãî, êàê ðàñïîëîæåíû ýëåìåíòû âî âõîäå, ìîæíî ðàññìîòðåòü âåðîÿòíîñòíûé àíàëîã
ýòîé ïðîöåäóðû. Íàïðèìåð, ìîæíî äåëàòü ñëåäóþùåå: âûáèðàòü êàæäûé ðàç áàðüåðíûé
29

Ñîðòèðîâêè è ìåäèàíû
ýëåìåíò ñëó÷àéíûì îáðàçîì ïðè ïîìîùè íåêîòîðîé ôóíêöèè Random. Íà ñàìîì äåëå
ýòî ýêâèâàëåíòíî òîìó, ÷òî ïðîñòî ñãåíåðèðîâàòü íåêîòîðóþ ñëó÷àéíóþ ïåðåñòàíîâêó
èíäåêñîâ (ýòî ìîæíî ñäåëàòü çà Θ(n)), à çàòåì èñïîëüçîâàòü å¼ â ïðîöåññå ðàáîòû. Â
ðåçóëüòàòå ïîëó÷èì ñëåäóþùèå ïðîöåäóðû.
1: procedure Randomized-Partition(A, p, r )
2:
i ← Random(p, r)
3:
A[p] ↔ A[i]
4:
return Partition(A, p, r)
5:
6:
7:
8:
9:
10:
11:
12:

end procedure
procedure Randomized-Quicksort(A, p, r)
if p < r then
q←

Randomized-Partition(A, p, r )

Randomized-Quicksort(A, p, q )
Randomized-Quicksort(A, q

end if
end procedure

+ 1, r)

 õóäøåì ñëó÷àå ýòà ïðîöåäóðà ïî ïðåæíåìó ðàáîòàåò Θ(n2 ). Èíòóèòèâíî ïîíÿòíî,
÷òî ñ íåíóëåâîé âåðîÿòíîñòüþ ìû íà êàæäîé èòåðàöèè áóäåì äåëèòü ìàññèâ íàèáîëåå
íåñáàëàíñèðîâàííî. Íà ñàìîì äåëå ýòî ìîæíî äàæå ñòðîãî îáîñíîâàòü (ïîñìîòðåòü, êàê
ýòî äåëàåòñÿ ìîæíî â êíèãå Êîðìåíà).
Àíàëèç ñðåäíåãî âðåìåíè ðàáîòû ìû ïðîâåä¼ì â ñëó÷àå, êîãäà âñå ýëåìåíòû ìàññèâà
ðàçëè÷íû. Òîãäà çàìåòèì, ÷òî çíà÷åíèå q , êîòîðîå âåðí¼ò ïðîöåäóðà Partition çàâèñèò
òîëüêî îò òîãî, ñêîëüêî â ìàññèâå ýëåìåíòîâ íå áîëüøèõ x = A[p] (÷èñëî òàêèõ ýëåìåíòîâ áóäåì íàçûâàòü ðàíãîì è îáîçíà÷àòü ÷åðåç rank(x)). Åñëè ðàíã áîëüøå åäèíèöû, òî
ëåâàÿ ÷àñòü ðàçáèåíèÿ áóäåò ñîäåðæàòü rank(x) − 1 ýëåìåíòîâ. Åñëè æå rank(x) = 1,
òî ëåâàÿ ÷àñòü áóäåò ñîäåðæàòü îäèí ýëåìåíò. Òàê êàê â êà÷åñòâå áàðüåðíîãî ìîæåò
áûòü âûáðàí ëþáîé ýëåìåíò ìàññèâà, òî çíà÷åíèå rank(x) ïðèíèìàåò êàæäîå èç çíà÷åíèé
1, 2, . . . , n ñ îäèíàêîâîé âåðîÿòíîñòüþ n1 . Îòñþäà ñëåäóåò, ÷òî ëåâàÿ ÷àñòü áóäåò ñîäåðæàòü 2, 3, . . . , n − 1 ýëåìåíòîâ ñ âåðîÿòíîñòüþ n1 , à ñ âåðîÿòíîñòüþ n2  îäèí ýëåìåíò.
Ïóñòü T (n)  ýòî ìàòåìàòè÷åñêîå îæèäàíèå âðåìåíè ðàáîòû ïðîöåäóðû RandomizedQuicksort, òî åñòü T (n) = E[T (A)], ãäå T (A)  âðåìÿ ðàáîòû Randomized-Quicksort
íà ìàññèâå A (ýòî ñëó÷àéíàÿ âåëè÷èíà). Åñëè ðàñïèñàòü T (n) ïî ôîðìóëå ïîëíîãî ìàòåìàòè÷åñêîãî îæèäàíèÿ, òî ìû ïîëó÷èì

T (n) =

30

1
n

2T (1) + 2T (n − 1) +

n−1
X
q=2

!
(T (q) + T (n − q))

+ Θ(n).

Ñîðòèðîâêè è ìåäèàíû
Ïîñêîëüêó T (1) = Θ(1) è T (n − 1) = O(n2 ), òî

1
1
(T (1) + T (n − 1)) =
Θ(1) + O(n2 ) = O(n),
n
n
ïîýòîìó ìîæíî çàïèñàòü ðåêóððåíòíîå ñîîòíîøåíèå â ñëåäóþùåì âèäå:
T (n) =

n−1
1X
(T (q) + T (n − q)) + Θ(n).
n q=1

Òàê êàê êàæäîå ñëàãàåìîå â ñêîáêå âñòðå÷àåòñÿ ðîâíî äâà ðàçà, òî
n−1
2X
T (k) + Θ(n).
n

T (n) =

k=1

Ïîêàæåì èíäóêöèåé ïî n, ÷òî T (n) 6 an log n+b, ãäå a > 0 è b > 0  íåêîòîðûå êîíñòàíòû,
êîòîðûå áóäóò ïîäîáðàíû äàëåå. Ïðè n = 1 óòâåðæäåíèå âåðíî, åñëè âçÿòü äîñòàòî÷íî
áîëüøîå b. Òåïåðü äîêàæåì øàã èíäóêöèè. Ïðè n > 1 èìååì
T (n)

=
6
=

Íèæå ìû ïîêàæåì, ÷òî

n−1
P
k=1

T (n)

2
n
2
n

n−1
P
k=1
n−1
P

T (k) + Θ(n)
(ak log k + b) + Θ(n)

k=1
n−1
P
2a
k
n
k=1

log k +

2b
(n
n

− 1) + Θ(n).

k log k 6 21 n2 log n − 81 n2 . Èñïîëüçóÿ ýòî, ïîëó÷àåì


1 2
6 2a
n log n − 18 n2 + 2b
(n − 1) + Θ(n)
n
2
n
a
6 an log n − 4 n + 2b + Θ(n)

= an log n + b + Θ(n) + b − a4 n 6 an log n + b,

ãäå ïîñëåäíåå íåðàâåíñòâî âåðíî, åñëè âçÿòü a äîñòàòî÷íî áîëüøèì. Îòñþäà ïîëó÷àåì,
÷òî T (n) = O(n log n).
n−1
 
P
Îñòàëîñü ïîêàçàòü, ÷òî
k log k 6 12 n2 log n − 18 n2 . Òàê êàê ïðè k < n2 èìååì
log k 6 log n − 1. Ïîýòîìó
n−1
P
k=1

k log k

k=1

6 (log n − 1)

d n2P
e−1

k + log n

k=1

6 21 n(n − 1) log n −
6 12 n2 log n − 18 n2 .

1
2

n
2



n−1
P

k=d n
 2e
1 n2

k = log n

n−1
P
k=1

k−

d n2P
e−1

k

k=1

31

Ñîðòèðîâêè è ìåäèàíû

Ñîðòèðîâêà ïóçûðüêîì. Ðàññìîòðèì àëãîðèòì ñîðòèðîâêè ïóçûðüêîì (Bubblesort)
è ïðîâåäåì åãî àíàëèç. Ñðàçó äîãîâîðèìñÿ, ÷òî ìàññèâ ýëåìåíòîâ è ìàññèâ êëþ÷åé ìû
ðàçëè÷àòü íå áóäåì, è ïîä ñðàâíåíèåì ýëåìåíòîâ ìû áóäåì ïîíèìàòü ñðàâíåíèå ñîîòâåòñòâóþùèõ êëþ÷åé. Èòàê, ïóñòü íàì äàí ìàññèâ A[1 . . N ], êîòîðûé ìû õîòèì îòñîðòèðîâàòü. Îïèøåì ïðîöåäóðó ñîðòèðîâêè ïóçûðüêîì.
1: procedure Bubblesort(A)
2:
for i ← 1 N − 1 do
3:
for j ← N i + 1 do
4:
if A[j] < A[j − 1] then
5:
A[j] ↔ A[j − 1]

to

6:
7:
8:
9:

to

end if
end for
end for
end procedure

Íà êàæäîé èòåðàöèè âíóòðåííåãî öèêëà (ñòðîêè 4-5) ïðîèñõîäèò ðîâíî îäíî ñðàâíåíèå.
Èòîãîâîå ÷èñëî ñðàâíåíèé ðàâíÿåòñÿ (N − 1) + (N − 2) + . . . 1 = N (N2−1) = O(N 2 ). Òàêèì
îáðàçîì, âðåìåííàÿ ñëîæíîñòü ñîðòèðîâêè ïóçûðüêîì åñòü O(N 2 ). Îòìåòèì, ÷òî ìîæíî
íåìíîãî âèäîèçìåíèòü ïðîöåäóðó, à èìåííî, çàâåñòè íåêîòîðóþ ïåðåìåííóþ, êîòîðàÿ áóäåò îáíóëÿòüñÿ ïåðåä âûïîëíåíèåì âíóòðåííåãî öèêëà è åé áóäåò ïðèñâàèâàòüñÿ çíà÷åíèå
1, åñëè õîòÿ áû îäíî ñðàâíåíèå â ñòðîêå 4 áûëî âåðíî (òàêàÿ ïåðåìåííàÿ íàçûâàåòñÿ ôëàãîì). Êðîìå òîãî, íóæíî ïåðåä î÷åðåäíûì âûïîëíåíèåì âíóòðåííåãî öèêëà ïðîâåðÿòü,
ðàâåí ëè ôëàã åäèíèöå. Åñëè âäðóã îí íå ðàâåí åäèíèöå, òî ýòî îçíà÷àåò, ÷òî ìàññèâ óæå
ïîëíîñòüþ îòñîðòèðîâàí è ìîæíî çàâåðøèòü ïðîöåäóðó. Åñëè ðàññìàòðèâàòü âèäîèçìåí¼ííóþ ïðîöåäóðó ñîðòèðîâêè ïóçûðüêîì, òî å¼ âðåìÿ ðàáîòû â õóäøåì ñëó÷àå áóäåò
ðàâíî O(N 2 ), à âðåìÿ ðàáîòû â ëó÷øåì ñëó÷àå áóäåò ðàâíî O(N ) (â òîì ñëó÷àå, êîãäà
èñõîäíûé ìàññèâ óæå îòñîðòèðîâàí â íóæíî ïîðÿäêå).
Êðîìå òîãî, îòìåòèì, ÷òî àëãîðèòì ñîðòèðîâêè ïóçûðüêîì òðåáóåò äîïîëíèòåëüíîé
ïàìÿòè ðàçìåðà O(1) (ðàçìåð îäíîãî ýëåìåíòà).

Ñîðòèðîâêà ñ ïîìîùüþ êó÷è. Èòàê, ìû óáåäèëèñü, ÷òî ñîðòèðîâêà ïóçûðüêîì
ðàáîòàåò çà âðåìÿ O(n2 ), íî ïðè ýòîì èñïîëüçóåò âñåãî ëèøü O(1) äîïîëíèòåëüíîé ïàìÿòè.
Ñîðòèðîâêà ñëèÿíèåì ðàáîòàåò ïî÷òè íà ïîðÿäîê áûñòðåå, à èìåííî çà âðåìÿ O(n log n),
îäíàêî èñïîëüçóåò O(n) äîïîëíèòåëüíîé ïàìÿòè, ÷òî íà ïîðÿäîê áîëüøå, ÷åì ó ñîðòèðîâêè ïóçûðüêîì.
Îêàçûâàåòñÿ, ÷òî ìîæíî ïðåäëîæèòü àëãîðèòì ñîðòèðîâêè, êîòîðûé èñïîëüçóåò ñòðóêòóðó äàííûõ, íàçûâàåìóþ
, è êîòîðûé ðàáîòàåò çà âðåìÿ O(n log n) (êàê
ñîðòèðîâêà ñëèÿíèåì), èñïîëüçóÿ ïðè ýòîì O(1) äîïîëíèòåëüíîé ïàìÿòè (êàê ñîðòèðîâêà
ïóçûðüêîì). Ýòîò ñïîñîá íàçûâàåòñÿ
(Heapsort).

äâîè÷íîé êó÷åé
ñîðòèðîâêîé ñ ïîìîùüþ êó÷è

32

Ñîðòèðîâêè è ìåäèàíû
Äâîè÷íàÿ êó÷à  ýòî ìàññèâ ñ îïðåäåë¼ííûìè ñâîéñòâàìè óïîðÿäî÷åííîñòè, êîòîðûå
ìû îïèøåì äàëåå. ×òîáû îïèñàòü ýòè ñâîéñòâà íàì áóäåò óäîáíî ïðåäñòàâëÿòü ìàññèâ â
âèäå äâîè÷íîãî äåðåâà (òî åñòü äåðåâà, ó êàæäîé âåðøèíû êîòîðîãî ñóùåñòâóåò íå áîëåå
äâóõ ïîòîìêîâ). Âî-ïåðâûõ, êàæäàÿ âåðøèíà äåðåâà ñîîòâåòñòâóåò ýëåìåíòó
ìàññèâà. Âî
âòîðûõ, åñëè âåðøèíà èìååò èíäåêñ i, òî å¼ ðîäèòåëü èìååò èíäåêñ 2i , åñëè îí îïðåäåë¼í
(îòñþäà, íàïðèìåð, ñëåäóåò, ÷òî âåðøèíà ñ èíäåêñîì 1 ÿâëÿåòñÿ êîðíåì), à å¼ äåòè 
èíäåêñû 2i è 2i + 1 (÷òî ñëåäóåò èç ïåðâîé ÷àñòè óòâåðæäåíèÿ).  äàëüíåéøåì íàì áóäåò
óäîáíî ñ÷èòàòü, ÷òî ðàçìåð êó÷è ìîæåò áûòü ìåíüøå äëèíû ìàññèâà, ïîýòîìó âìåñòå ñ
ìàññèâîì A ìû áóäåì õðàíèòü åãî äëèíó len[A] è ðàçìåð êó÷è heapsize[A]. Äâèæåíèå ïî
äåðåâó îñóùåñòâëÿåòñÿ ñëåäóþùèìè ïðîöåäóðàìè.
1: procedureParent
( i)

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

return 2i
end procedure
procedure Left(i)
return 2i
end procedure
procedure Right(i)
return 2i + 1
end procedure

Íàêîíåö, äîëæíî âûïîëíÿòüñÿ
êîðíåâîé,

îñíîâíîå ñâîéñòâî êó÷è : äëÿ êàæäîé âåðøèíû i, êðîìå
A[Parent(i)] > A[i].

16
14

10

8
2

7
4

9

3

1

Äâîè÷íàÿ êó÷à [16, 14, 10, 8, 7, 9, 3, 2, 4, 1], ïðåäñòàâëåííàÿ â
âèäå äåðåâà.

Ðèñ. 1.

Âûñîòîé

âåðøèíû äåðåâà áóäåì íàçûâàòü âûñîòó ïîääåðåâà, êîðíåì êîòîðîãî ÿâëÿåòñÿ ýòà âåðøèíà (òî åñòü ÷èñëî ð¼áåð â ñàìîì äëèííîì ïóòè ñ íà÷àëîì â ýòîé âåðøèíå
33

Ñîðòèðîâêè è ìåäèàíû
âíèç ïî äåðåâó ê ëèñòó). Çàìåòèì, ÷òî âñå óðîâíè äåðåâà, ñîñòàâëÿþùåãî êó÷ó, çàïîëíåíû ïîëíîñòüþ, êðîìå, áûòü ìîæåò, ïîñëåäíåãî óðîâíÿ. Ïîýòîìó âûñîòà ýòîãî äåðåâà
ðàâíà Θ(log n), ãäå n  ÷èñëî ýëåìåíòîâ â êó÷å. Êàê óâèäèì äàëåå, âðåìÿ ðàáîòû îñíîâíûõ îïåðàöèé íàä êó÷åé ïðîïîðöèîíàëüíî âûñîòå äåðåâà è, ñëåäîâàòåëüíî, ñîñòàâëÿåò
O(log n).
Îäíîé èç òàêèõ îïåðàöèé ÿâëÿåòñÿ ïðîöåäóðà Heapify. Îíà ïîçâîëÿåò ñîõðàíÿòü
îñíîâíîå ñâîéñòâî êó÷è. Íà âõîä ýòà ïðîöåäóðà ïîëó÷àåò ìàññèâ A è èíäåêñ i. Ïðåäïîëàãàåòñÿ, ÷òî ïîääåðåâüÿ ñ êîðíÿìè Left(i) è Right(i) îáëàäàþò îñíîâíûì ñâîéñòâîì
êó÷è. Èäåÿ ïðîñòà: åñëè îñíîâíîå ñâîéñòâî íå âûïîëíåíî äëÿ âåðøèíû i, òî å¼ ñëåäóåò
ïîìåíÿòü ñ íàèáîëüøèì èç å¼ äåòåé è òàê äàëåå, ïîêà ýëåìåíò A[i] íå ¾ïîãðóçèòñÿ¿ äî
íóæíîãî ìåñòà.
1: procedure Heapify(A, i)
2:
l ← Left(i)
3:
r ← Right(i)
4:
if l 6 heapsize[A] è A[l] > A[i] then
5:
largest ← l
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:

else

largest ← i

end if
if r 6 heapsize[A] è A[r] > A[largest] then
largest ← r

end if
if largest 6= i then

A[i] ↔ A[largest]
Heapify(A, largest)

end if
end procedure

 ñòðîêàõ 4-10 â ïåðåìåííóþ largest ïîìåùàåòñÿ èíäåêñ íàèáîëüøåãî èç ýëåìåíòîâ
A[i], A[Left(i)] è A[Right(i)]. Åñëè largest = i, òî ýëåìåíò óæå ¾ïîãðóçèëñÿ¿ äî íóæíîãî
ìåñòà è ðàáîòà ïðîöåäóðû çàêîí÷åíà. Èíà÷å ïðîöåäóðà ìåíÿåò ìåñòàìè A[i] è A[largest],
÷òî îáåñïå÷èâàåò âûïîëíåíèå îñíîâíîãî ñâîéñòâà êó÷è â âåðøèíå i, íî, âîçìîæíî, îñíîâíîå ñâîéñòâî ìîãëî íàðóøèòñÿ â âåðøèíå largest, ïîýòîìó íóæíî âûçâàòü ïðîöåäóðó
Heapify(A, largest), ÷òîáû âîññòàíîâèòü îñíîâíîå ñâîéñòâî êó÷è â ýòîé âåðøèíå.
Îöåíèì âðåìÿ ðàáîòû ïðîöåäóðû Heapify. Íà êàæäîì øàãå òðåáóåòñÿ ñîâåðøèòü
Θ(1) ñðàâíåíèé. Êðîìå òîãî ïðîèçâîäèòñÿ ðåêóðñèâíûé âûçîâ. Åñëè ïîääåðåâî ñ êîðíåì
ýëåìåíòîâ
i ñîäåðæèò n ýëåìåíòîâ, òî ïîääåðåâüÿ Left(i) è Right(i) ñîäåðæàò íå áîëåå 2n
3
(â ñèëó òîãî, ÷òî âñå óðîâíè êó÷è, êðîìå, áûòü ìîæåò, ïîñëåäíåãî, çàïîëíåíû ïîëíîñòüþ,
ìû ïîëó÷àåì, ÷òî íàèõóäøèé ñëó÷àé  êîãäà ïîñëåäíèé óðîâåíü äëÿ äàííîãî ïîääåðåâà
çàïîëíåí íàïîëîâèíó). Ïóñòü T (n)  âðåìÿ ðàáîòû ïðîöåäóðû Heapify íà ïîääåðåâå
34

Ñîðòèðîâêè è ìåäèàíû
16

16

4

10

14
2

7
8

14

9

3

10

4

1

7

2

8

9

3

1

16
14

10

8
2
Ðèñ. 2.

7
4

9

3

1

Ðàáîòà ïðîöåäóðû

Heapify(A, 2)

ïðè heapsize[A] = 10.

ðàçìåðà n. Òîãäà

T (n) 6 T

2n
3


+ Θ(1).

Îòñþäà ïîëó÷àåì, ÷òî T (n) = O(log n). Íî ýòî ìîæíî ïîíÿòü è èç áîëåå ïðîñòûõ ñîîáðàæåíèé: íà êàæäîé èòåðàöèè ìû ñïóñêàåìñÿ ïî äåðåâî íà óðîâåíü âíèç (ëèáî çàâåðøàåì ðàáîòó). Ïîýòîìó èòåðàöèé áóäåò ñîâåðøåíî íå áîëåå log n, òî åñòü ñðàâíåíèé áóäåò
O(log n).
Òåïåðü ïîêàæåì, ÷òî èç ìàññèâà A[1 . . n] ìîæíî çà âðåìÿ O(log n) ñäåëàòü äâîè÷íóþ
êó÷ó. Ýòó çàäà÷ó ðåøàåò ïðîöåäóðà Build-Heap. Îñíîâíàÿ èäåÿ ýòîé ïðîöåäóðû
 âû 
çûâàòü ïðîöåäóðó Heapify â ïðàâèëüíîì ïîðÿäêå. Ïîñêîëüêó âåðøèíû n2 + 1, . . . , n
ÿâëÿþòñÿ ëèñòüÿìè, òî ïîääåðåâüÿ â ýòèõ âåðøèíàõ ïî î÷åâèäíûì ïðè÷èíàì óäîâëåòâîðÿþò îñíîâíîìó ñâîéñòâó êó÷è. Òåïåðü äëÿ êàæäîé èç îñòàâøèõñÿ âåðøèí â ïîðÿäêå
óáûâàíèÿ èíäåêñîâ ìû áóäåì ïðèìåíÿòü ïðîöåäóðó Heapify. Ïîðÿäîê îáðàáîòêè âåðøèí
ãàðàíòèðóåò, ÷òî êàæäûé ðàç óñëîâèÿ âûçîâà ïðîöåäóðû Heapify áóäóò âûïîëíåíû.
1: procedure Build-Heap(A)
2:
heapsize[A]
j ← klength[A]
3:
for i ← len[A]
1 do
2

downto

35

Ñîðòèðîâêè è ìåäèàíû
4

4

1

3
16, ∗

2
14

8

9

1
2, ∗

10

7

3

14

16
8

4
3, ∗

1

2

16
8

9

1, ∗
10

7

10

14
2

16
8

2

8

10

1

3

16

16
7

9

7

4, ∗

14

10

7

4

14

9

9

14
3

10

8
2

7
4

9

3

1

3. Ðàáîòà
ïðîöåäóðû
Build-Heap(A)
äëÿ
A
=
[4, 1, 3, 2, 16, 9, 10, 14, 8, 7]. Íà ðèñóíêå ïîêàçàíî ñîñòîÿíèå äàííûõ ïåðåä êàæäûì âûçîâîì ïðîöåäóðû Heapify â ñòðîêå 3. Çíàêîì ∗
ïîìå÷àëàñü òà âåðøèíà, äëÿ êîòîðîé âûçûâàëàñü ïðîöåäóðà Heapify.
Ïîñëåäíÿÿ êàðòèíêà  ðåçóëüòàò ðàáîòû ïðîöåäóðû Build-Heap.

Ðèñ.

4:
5:
6:

Heapify(A, i)

end for
end procedure

Îöåíèì âðåìåííóþ ñëîæíîñòü ðàáîòû ïðîöåäóðû Build-Heap. Âî-ïåðâûõ, ìîæíî áûëî
áû ñêàçàòü, ÷òî âðåìÿ ðàáîòû ðàâíî O(n log n), ïîñêîëüêó âðåìÿ ðàáîòû Heapify ðàâíî
36

Ñîðòèðîâêè è ìåäèàíû
O(log n) è îíà âûçûâàåòñÿ íå áîëåå n ðàç. Íî òàêàÿ îöåíêà ÿâëÿåòñÿ íà çàâûøåííîé,
ìíîæèòåëü log n ìîæíî óáðàòü.
Êàê ìû îòìåòèëè ðàíåå, ðàáîòà ïðîöåäóðû Heapify ïðîïîðöèîíàëüíà âûñîòå äåðåâà,
äëÿ êîòîðîãî îíà âûçûâàåòñÿ.
 Êðîìå
 òîãî, ÷èñëî âåðøèí âûñîòû h â äâîè÷íîé êó÷å èç
n
n ýëåìåíòîâ íå ïðåâîñõîäèò 2h+1
, à âûñîòà âñåé êó÷è íå ïðåâîñõîäèò blog nc. Ïîýòîìó
âðåìÿ ðàáîòû ïðîöåäóðû Build-Heap íå ïðåâûøàåò


blog nc
blog nc l
X h
X
n m
 = O(n),
O(h) = O n
2h+1
2h
h=0
h=0

ãäå ïîñëåäíÿÿ ôîðìóëà ñëåäóåò èç
blog nc

X
h=0

Ðàâåíñòâî


P
h=0

h
2h


X
h
h
<
= 2.
2h
2h
h=0

= 2 áûëî äîêàçàíî íà âòîðîì ñåìèíàðå (ñì. ïðèìåð âåðîÿòíîñòíîãî

àëãîðèòìà òèïà ¾Ìîíòå-Êàðëî¿).
Òåïåðü ìû ìîæåì îïèñàòü ñîðòèðîâêó ïðè ïîìîùè êó÷è (Heapsort). Îíà ñîñòîèò
èç äâóõ ÷àñòåé. Ñíà÷àëà âûçûâàåòñÿ ïðîöåäóðà Build-Heap, ÷òîáû ñäåëàòü èç ìàññèâà
êó÷ó.  òàêîì ñëó÷àå ìàêñèìàëüíûé ýëåìåíò ìàññèâà áóäåò íàõîäèòñÿ â êîðíå äåðåâà (òî
åñòü ïåðâûì). Ñîîòâåòñòâåííî, àëãîðèòì ìåíÿåò ìåñòàìè ýëåìåíòû A[1] è A[n], óìåíüøàåò ðàçìåð êó÷è íà åäèíèöó è âîññòàíàâëèâàåò îñíîâíîå ñâîéñòâî êó÷è â êîðíåâîé âåðøèíå
(òàê êàê ïîääåðåâüÿ ñ êîðíÿìè Left(i) è Right(i) íå óòðàòèëè îñíîâíîãî ñâîéñòâà êó÷è,
òî ýòî ìîæíî ñäåëàòü ñ ïîìîùüþ ïðîöåäóðû Heapify). Ïîñëå ýòîãî â êîðíå áóäåò íàõîäèòüñÿ ìàêñèìàëüíûé èç îñòàâøèõñÿ ýëåìåíòîâ. Òàê äåëàåòñÿ äî òåõ ïîð, ïîêà â êó÷å íå
îñòàíåòñÿ îäèí ýëåìåíò.
1: procedure Heapsort(A)
2:
Build-Heap(A)
3:
for i ← len[A]
2 do
4:
A[1] ↔ A[i]
5:
heapsize[A] ← heapsize[A] − 1
6:
Heapify(A, 1)

downto

7:
8:

end for
end procedure

Âðåìÿ ðàáîòû ïðîöåäóðû Heapsort ðàâíÿåòñÿ O(n log n): íà âûïîëíåíèå ïðîöåäóðû Buildòðåáóåòñÿ âðåìÿ O(n), êàæäàÿ èòåðàöèÿ öèêëà òðåáóåò âðåìåíè O(log n), à èòåðàöèé
âñåãî n − 1. Ïðè ýòîì àëãîðèòì òðåáóåò ëèøü O(1) äîïîëíèòåëüíîé ïàìÿòè.

Heap

37

Ñîðòèðîâêè è ìåäèàíû
14

16
14

2

7
4

8

10

8

9

10

4

3
2

1

7
1

3
1

2

4

2

1

4

3
8

9

1

2

4

8

9

10 14 16
2

2
9

3

3

3

2

1
7

10 14 16

10 14 16

7
14 16

3

4

7

4
2

7

10 14 16

1

3

9

8

8
7

9

8

16

9

4

10

1
7

8

1
9

10 14 16

4

3
7

8

9

10 14 16
1

2
4

3
7

8

9

10 14 16
4. Ðàáîòà
ïðîöåäóðû
Heapsort(A)
äëÿ
A
=
[16, 14, 10, 8, 7, 9, 3, 2, 4, 1]. Íà ðèñóíêå ïîêàçàíî ñîñòîÿíèå äàííûõ
ïåðåä êàæäûì âûçîâîì ïðîöåäóðû Heapify â ñòðîêå 6.

Ðèñ.

Íèæíèå îöåíêè äëÿ ñîðòèðîâêè. Èòàê, ìû äî ýòîãî ðàññìîòðåëè 3 àëãîðèòìà
ñîðòèðîâêè ñ âðåìåííîé ñëîæíîñòüþ O(n log n) è îäèí àëãîðèòì ñ âðåìåííîé ñëîæíîñòüþ
Θ(n2 ). Íà ôîíå âðåìåíè O(n2 ) âðåìÿ O(n log n) âûãëÿäèò äîñòàòî÷íî ñèìïàòè÷íî. Íî
îïòèìàëüíîå ëè (àñèìïòîòè÷åñêè) ýòî âðåìÿ äëÿ ñîðòèðîâêè, îñíîâàííîé íà ñðàâíåíèÿõ?
Îêàçûâàåòñÿ, ÷òî äà è äîêàçàòü ýòî ìîæíî ñ ïîìîùüþ òàê íàçûâàåìûõ
.
Ëþáîé äåòåðìèíèðîâàííûé àëãîðèòì ñîðòèðîâêè ïîïàðíûìè ñðàâíåíèÿìè ìîæíî
ïðåäñòàâèòü â âèäå äâîè÷íîãî äåðåâà. Äåéñòâèòåëüíî, ïóñòü ìû ñîðòèðóåì n ýëåìåíòîâ
a1 , a2 , . . . , an . Êàæäàÿ âíóòðåííÿÿ âåðøèíà (òî åñòü íå ëèñòîâàÿ âåðøèíà) ñîîòâåòñòâóåò
îïåðàöèè ñðàâíåíèÿ äâóõ ýëåìåíòîâ ai è aj è ñíàáæåíà ïîìåòêîé ai ?aj . Êàæäûé ëèñò

äåðåâüåâ

38

ðàçðåøàþùèõ

Ñîðòèðîâêè è ìåäèàíû
ðàçðåøàþùåãî äåðåâà ñíàáæ¼í ïîìåòêîé (π(1), π(2), . . . , π(n)), ãäå π  ïåðåñòàíîâêà n
ýëåìåíòîâ. мáðà äåðåâà ñíàáæåíû ïîìåòêàìè ¾6¿ è ¾>¿.
Êàæäîìó àëãîðèòìó ñîðòèðîâêè ñîîòâåòñòâóåò ñâî¼ ðàçðåøàþùåå äåðåâî (è íàîáîðîò). ×òîáû ïî äåðåâó ïîëó÷èòü àëãîðèòì ñîðòèðîâêè, íóæíî èäòè ïî äåðåâó îò êîðíÿ ê
ëèñòüÿì è ñðàâíèâàòü ýëåìåíòû, ñîîòâåòñòâóþùèå òåêóùåé âåðøèíå: åñëè â òåêóùåé âåðøèíå íàïèñàíî ai ?aj , òî íóæíî ñðàâíèòü ai è aj , è åñëè ai 6 aj , òî íóæíî ïîéòè íàëåâî,
à â ïðîòèâíîì ñëó÷àå  íàïðàâî. Åñëè ïðèøëè â ëèñò, â êîòîðîì çàïèñàíà ïåðåñòàíîâêà
π , òî íóæíî âåðíóòü ðåçóëüòàò aπ(1) , aπ(2) , . . . , aπ(n) . Âðåìÿ ðàáîòû àëãîðèòìà ñîðòèðîâêè
ðàâíî äëèíå ñîîòâåòñòâóþùåãî ïóòè â ðàçðåøàþùåì äåðåâå.

Óñòîé÷èâûé àëãîðèòì ñîðòèðîâêè ìàññèâà äëèíû n òðåáóåò Ω(n log n)
ñðàâíåíèé ýëåìåíòîâ âõîäíîãî ìàññèâà.
Òåîðåìà 2.1.

Äîêàçàòåëüñòâî. Êàæäàÿ èç n! ïåðåñòàíîâîê äîëæíà ïîÿâèòüñÿ õîòÿ áû â îäíîì
ëèñòå äåðåâà (ïðàâèëüíûé àëãîðèòì ñîðòèðîâêè
äîëæåí ïðåäóñìàòðèâàòü âñå âîçìîæíûå
n
ïîðÿäêè). Íåòðóäíî âèäåòü, ÷òî n! > ne . Äâîè÷íîå äåðåâî âûñîòû h èìååò íå áîëåå 2h
ëèñòüåâ, ïîýòîìó âûñîòà ðàçðåøàþùåãî äåðåâà ñîðòèðîâêè äîëæíà áûòü íå ìåíüøå

log2 (n!) > n log2 n − n log2 e = Ω(n log n).


Ïîèñê k-îé ñòàòèñòèêè
Òåïåðü ïåðåéäåì ê äðóãîé çàäà÷å. Ïóñòü, îïÿòü æå, äàí íàáîð ÷èñåë a[0], . . . , a[n − 1].
Ðàññìîòðèì çàäà÷ó ïîèñêà k
, ò.å. òàêîãî ýëåìåíòà a(k) , êîòîðûé â îòñîðòèðîâàííîì ìàññèâå ñòîèò íà k-ì ìåñòå. Íàïðèìåð, a(n/2) , ò.å. ñðåäíèé
ýëåìåíò,  ýòî
ìàññèâà. Ïðåäëîæèì ëèíåéíûé àëãîðèòì ïîèñêà ìåäèàíû. Äîïóñòèì, ÷òî ìû âûáðàëè íåêîòîðûé ýëåìåíò x â êà÷åñòâå îïîðíîãî, è ðàçáèëè ìàññèâ íà
äâå ÷àñòè b è c òàê, ÷òî b[i] < x, c[j] > x. Åñëè len(b) < k, òî x ≤ a(k) , è k-ÿ ïîðÿäêîâàÿ ñòàòèñòèêà íå ìîæåò íàõîäèòñÿ â ìàññèâå b. Àíàëîãè÷íî, åñëè len(c) ≤ n − k, òî
îíà íå ìîæåò íàõîäèòñÿ â ìàññèâå c.  ïðèíöèïå, âîçìîæíû è îáà ñëó÷àÿ, êîãäà èñêîìîé
âåëè÷èíîé îêàçûâàåòñÿ x. Åñëè ìû ìîæåì âûáðàòü x òàê, ÷òîáû ðàçìåð ìàññèâà b è c
áûë íå ñëèøêîì áîëüøèì, ñêàæåì, ìåíüøå ÷åì αn, α < 1, òî àëãîðèòì áóäåò ðàáîòàòü
áûñòðî. Îäèí èç ñïîñîáîâ ýòî ñäåëàòü ñëåäóþùèé: ðàçîáüåì èñõîäíûé ìàññèâ íà ïÿòåðêè,
è â êàæäîé èç íèõ íàéäåì ìåäèàíó  ýòî çàéìåò O(n) âðåìåíè; â ïîëó÷åííîì ìàññèâå èç
ìåäèàí m ðàçìåðà n5 ðåêóðñèâíî íàéäåì ìåäèàíó x, è èñïîëüçóåì åå â êà÷åñòâå îïîðíîãî
ýëåìåíòà  ðàçáèåíèå èñõîäíîãî ìàññèâà a íà b è c òàêæå çàíèìàåò O(n) âðåìåíè. Êàê
7
n (ñ òî÷íîñòüþ äî êîíñòàíòû). Çàòåì
íåñëîæíî âèäåòü, â ýòîì ñëó÷àå len(b), len(c) ≤ 10
âûáèðàåì ìàññèâ b èëè c, â êîòîðîì íàõîäèòñÿ èñêîìàÿ ïîðÿäêîâàÿ ñòàòèñòèêà (íàïðèìåð,
åñëè len(b) < k, òî îíà òî÷íî íå ìîæåò íàõîäèòüñÿ â ìàññèâå b), è ðåêóðñèâíî çàïóñêàåì
ïîèñê (åñëè ýòî ìàññèâ c, òî íóæíî ñîîòâåòñòâåííî èçìåíèòü íîìåð k).

-é ïîðÿäêîâîé ñòàòèñòèêè

ìåäèàíà

39

Ñîðòèðîâêè è ìåäèàíû

Ðèñ. 5.

Ðàçáèåíèå ìàññèâà

Òàêèì îáðàçîì, ïîëó÷àåì ñëåäóþùåå ðåêóððåíòíîå ñîîòíîøåíèå:



n
7n
+A +T
+ A + O(n).
T (n) = T
5
10
Âîñïîëüçóåìñÿ òåîðåìîé Àêêðà-Áàççè; çäåñü a1 = a2 = 1, b1 =
Ïîýòîìó
Z n

1 − n1−p
u
du
=
= Θ n1−p .
p+1
u
p

1
1
Îòñþäà T (n) = Θ (np + n) = Θ(n).

40

1
,
5

b2 =

7
,
10

p ≈ 0.84 < 1.

×àñòü 3

Àëãåáðà è òåîðèÿ ÷èñåë

 ýòîì ðàçäåëå ìû áóäåì èçó÷àòü àëãîðèòìû â àëãåáðå è òåîðèè ÷èñåë. Ñíà÷àëà
íàïîìíèì íåîáõîäèìûå íàì îïðåäåëåíèÿ è òåîðåìû.

Îïðåäåëåíèå 3.1.

Ãðóïïà  ïàðà (G, ·), ãäå

• M  ìíîæåñòâî,
• ·  îïåðàöèÿ óìíîæåíèÿ, óäîâëåòâîðÿþùàÿ ñëåäóþùèì àêñèîìàì:
 ∀a, b, c ∈ M (a · b) · c = a · (b · c) (àññîöèàòèâíîñòü);
 ∃e ∈ M e · a = a · e = a (íàëè÷èå íåéòðàëüíîãî ýëåìåíòà);
 ∀a ∈ M ∃b ∈ M òàêîé, ÷òî ab = ba = e.

×àñòî â îáîçíà÷åíèè ìîíîèäà ìû áóäåì îïóñêàòü îïåðàöèþ óìíîæåíèÿ è ïèñàòü G
âìåñòî (G, ·). Òàêæå ìû áóäåì îïóñêàòü ·, çàïèñûâàÿ ïðîèçâåäåíèå ýëåìåíòîâ: ïîä ab
áóäåì ïîíèìàòü a · b.

Îïðåäåëåíèå 3.2. Ãðóïïû Z/nZ è (Z/nZ)× . Áóäåì îáîçíà÷àòü ÷åðåç (Z/nZ, +n )  àä-

äèòèâíóþ (ïî ñëîæåíèþ) ãðóïïó âû÷åòîâ ïî ìîäóëþ n, à ÷åðåç ((Z/nZ)× , ·n )  ìóëüòèïëèêàòèâíóþ (ïî óìíîæåíèþ) ãðóïïó âû÷åòîâ ïî ìîäóëþ n (äàëëå áóäåì îïóñêàòü èíäåêñ
n ïðè îáîçíà÷åíèè ãðóïïîâîé îïåðàöèè, à ñàìè ãðóïïû îáîçíà÷àòü Z/nZ è (Z/nZ)× ñîîòâåòñòâåííî).

Îòìåòèì, ÷òî àääèòèâíàÿ ãðóïïà âû÷åòîâ ñîäåðæèò âû÷åòû [0]n , [1]n , . . . , [n − 1]n
(òî åñòü âñå âû÷åòû), à ìóëüòèïëèêàòèâíàÿ ãðóïïà ñîñòîèò òîëüêî èç âû÷åòîâ, âçàèìíî
ïðîñòûõ ñ n. Êîëè÷åñòâî ýëåìåíòîâ â ãðóïïå ((Z/nZ)× , ·n ) îïðåäåëÿåòñÿ
,
êîòîðàÿ îáîçíà÷àåòñÿ ÷åðåç ϕ(n) (òî åñòü ϕ(n)  ýòî êîëè÷åñòâî ÷èñåë, êîòîðûå ìåíüøå
n è âçàèìíî ïðîñòû ñ n). Ìîæíî äîêàçàòü, ÷òî




1
1
ϕ(n) = n 1 −
· ... · 1 −
,
p1
ps

ôóíêöèåé Ýéëåðà

ãäå p1 , p2 , . . . , ps  ñïèñîê âñåõ (ðàçëè÷íûõ) ïðîñòûõ äåëèòåëåé ÷èñëà n. Ýòî äåëàåòñÿ â
òðè øàãà:
1) ïîêàçàòü, ÷òî äëÿ ïðîñòûõ n âûïîëíÿåòñÿ ϕ(n) = n − 1;
2) ïîêàçàòü, ÷òî äëÿ âñåõ n âèäà n = pk , ãäå p  ïðîñòîå ÷èñëî, âûïîëíÿåòñÿ
ϕ(n) = pk − pk−1 ;
3) ïîêàçàòü, ÷òî äëÿ âçàèìíî ïðîñòûõ ÷èñåë m è n âûïîëíÿåòñÿ ϕ(mn) = ϕ(m)ϕ(n).

òàáëèöû óìíîæåíèÿ, òî åñòü íàïðÿ-

Ãðóïïó G ìîæíî çàäàâàòü ñ ïîìîùüþ òàáëèöû
ìóþ çàäàâ ïðîèçâåäåíèå íà âñåõ ïàðàõ ýëåìåíòîâ x, y ∈ G.

Îáðàçóþùèå (ïîðîæäàþùèå)

Îïðåäåëåíèå 3.3.
ýëåìåíòû ãðóïïû G  ïîäìíîæåñòâî
X ⊂ G ýëåìåíòîâ ìîíîèäà òàêîå, ÷òî ëþáîé ýëåìåíò m ∈ G ìîæåò áûòü ïðåäñòàâëåí êàê
ïðîèçâåäåíèå ýëåìåíòîâ X , òî åñòü m = x1 . . . xk äëÿ íåêîòîðûõ x1 , . . . xk ∈ X .

Àëãåáðà è òåîðèÿ ÷èñåë

ñîîòíîøå-

Ãðóïïó G ìîæíî çàäàòü ñ ïîìîùüþ ìíîæåñòâà îáðàçóþùèõ X ⊂ M è
1 . . . xm , y1 . . . yn ), ãäå x1 , . . . xm , y1 , . . . yn ∈ X è
x1 . . . xm = y1 . . . yn . Íàïðèìåð, Z/nZ ïîðîæäàåòñÿ îäíèì ýëåìåíòîì 1 ñ ñîîòíîøåíèåì
1 + . . . + 1 = 0.
| {z }

íèé, òî åñòü ìíîæåñòâà ïàð ýëåìåíòîâ (x
n

Îïðåäåëåíèå 3.4. Ãðóïïû, ïîðîæä¼ííûå îäíèì ýëåìåíòîì, íàçûâàþò öèêëè÷åñêèìè.
Ïóñòü x ∈ G, ãäå G  êîíå÷íàÿ ãðóïïà. Áóäåì ïðèìåíÿòü ãðóïïîâóþ îïåðàöèþ · ê
ýëåìåíòàì e è x, çàòåì ê x è x, ïîòîì ê x · x è x è òàê äàëåå.  ðåçóëüòàòå ìû ïîëó÷èì
ïîñëåäîâàòåëüíîñòü
e, x, x · x, x · x · x, . . . .
−1
k
= xk
. Êðîìå
Äëÿ k ∈ N ââåä¼ì îáîçíà÷åíèÿ: xk = |x · x ·{z. . . · x} è x(−k) = x−1
k

øòóê

òîãî, áóäåì ñ÷èòàòü, ÷òî x0 = e. Òîãäà óêàçàííàÿ âûøå ïîñëåäîâàòåëüíîñòü ìîæåò áûòü
çàïèñàíà ñëåäóþùèì îáðàçîì:
x0 , x1 , x2 , x3 , . . . .
Òàê êàê ãðóïïà G êîíå÷íà, òî íàéäóòñÿ òàêèå i è j , ÷òî xi = xj , ÷òî ýêâèâàëåíòíî òîìó, ÷òî íàéä¼òñÿ òàêîå öåëîå íåîòðèöàòåëüíîå ÷èñëî m, ÷òî xm = x0 = e. Ïîíÿòíî, ÷òî
åñëè xm = e, òî è x2m = e, x3m = e è òàê äàëåå. Íàñ æå áóäåò èíòåðåñîâàòü íàèìåíüøåå
öåëîå íåîòðèöàòåëüíîå ÷èñëî m, ÷òî x(m) = e. Ýòî ÷èñëî íàçûâàþò
ýëåìåíòà
x è îáîçíà÷àþò m = ordx. Áîëåå òîãî, ýëåìåíòû x0 , x1 , x2 , x3 . . . , xm−1 îáðàçóþò ïîäãðóïïó ãðóïïû G. Òàêóþ ïîäãðóïïó íàçûâàþò
x
è îáîçíà÷àþò hxi. Ýëåìåíò x íàçûâàþò
ïîäãðóïïû hxi. Èç âñåãî íàïèñàíî
ðàíåå ñëåäóþò òðè ïðîñòûõ ôàêòà.

ïîðÿäêîì
ïîäãðóïïîé, ïîðîæä¼ííîé ýëåìåíòîì
îáðàçóþùèì

Ïóñòü (G, ·)  êîíå÷íàÿ ãðóïïà. Åñëè x ∈ G, òî |hxi| = ordx.
Óòâåðæäåíèå 3.6. Äëÿ ëþáîãî x ∈ G, ãäå G  êîíå÷íàÿ ãðóïïà, ïîñëåäîâàòåëüíîñòü
x , x , x , . . . èìååò ïåðèîä m = ordx, òî åñòü x = x
òîãäà è òîëüêî òîãäà,
êîãäà i ≡ j (mod m).
Òåîðåìà 3.5.
(0)

(1)

(2)

(i)

(j)

Ñëåäóþùèé ôàêò ïîëó÷àåòñÿ èç òåîðåìû Ëàãðàíæà è òåîðåìû 3.5.

Óòâåðæäåíèå 3.7.

.

x(|G|) = e

Ïóñòü G  êîíå÷íàÿ ãðóïïà. Òîãäà äëÿ ëþáîãî x ∈ G âûïîëíÿåòñÿ

Îïðåäåëåíèå 3.8. Îòîáðàæåíèå ìîíîèäîâ h : M1 → M2 íàçûâàåòñÿ
äëÿ ëþáûõ x, y ∈ M âåðíî

(11)

ìîðôèçìîì, åñëè

h(xy) = h(x)h(y).

43

Àëãåáðà è òåîðèÿ ÷èñåë

Îïðåäåëåíèå 3.9. Ïóñòü G  ãðóïïà. Ìíîæåñòâî G0 ⊂ G áóäåì ïîäãðóïïîé G, åñëè äëÿ
ëþáûõ x, y ∈ G0 âåðíî xy ∈ G0 . Ïîäãðóïïà G0 ãðóïïû G íàçûâàåòñÿ ñîáñòâåííîé, åñëè îíà
íå ñîâïàäàåò ñî âñåé ãðóïïîé G.

Îïðåäåëåíèå 3.10.

Ïîðÿäîê êîíå÷íîé ãðóïïû G  êîëè÷åñòâî ýëåìåíòîâ â ãðóïïå G.

Îáîçíà÷àåòñÿ ÷åðåç |G|.

Òåîðåìà 3.11 (òåîðåìà Ëàãðàíæà).
0

|G |

ÿâëÿåòñÿ äåëèòåëåì ÷èñëà |G|.

Äîêàçàòåëüñòâî.

Åñëè (G , ·) ÿâëÿåòñÿ ïîäãðóïïîé ãðóïïû (G, ·), òî
0

Ñì. [20].



Îòìåòèì âàæíîå ñëåäñòâèå òåîðåìû Ëàãðàíæà.

Óòâåðæäåíèå 3.12.
0

|G | <

|G|
2

.

Åñëè G ÿâëÿåòñÿ ñîáñòâåííîé ïîäãðóïïîé êîíå÷íîé ãðóïïû G, òî
0

Îêàçûâàåòñÿ, ÷òî åñëè ïðèìåíèòü ñëåäñòâèå 3.7 äëÿ ãðóïïû (Z/nZ)× , òî ïîëó÷èì
ñëåäóþùèé ôàêò, èçâåñòíûé ìíîãèì ñî øêîëüíûõ îëèìïèàä.

Åñëè n > 1  öåëîå ÷èñëî, òî äëÿ ëþáîãî öåëîãî ÷èñëà
, âçàèìíî ïðîñòîãî ñ n, âûïîëíåíî

Òåîðåìà 3.13 (òåîðåìà Ýéëåðà).
x

xϕ(n) ≡ 1

(mod n).

Åñëè n  ïðîñòî ÷èñëî, òî ïîëó÷àåì åù¼ îäèí èçâåñòíûé ìíîãèì ñî øêîëû ôàêò.

Åñëè p > 1  ïðîñòîå ÷èñëî, òî äëÿ ëþáîãî
öåëîãî ÷èñëà x, âçàèìíî ïðîñòîãî ñ n, âûïîëíåíî

Òåîðåìà 3.14 (ìàëàÿ òåîðåìà Ôåðìà).

xp−1 ≡ 1

(mod p).

Òåïåðü ïðåäïîëîæèì, ÷òî â ãðóïïå (Z/nZ)× ñóùåñòâóåò íåêîòîðûé ýëåìåíò g , òàêîé
÷òî ordg = |(Z/nZ)× | = ϕ(n). Ýòî îçíà÷àåò, ÷òî âñþ ãðóïïó (Z/nZ)× ìîæíî ïîëó÷èòü,
âîçâîäÿ ýëåìåíò g â ñòåïåíè 0, 1, 2, . . . , ϕ(n) − 1, òî åñòü âñå ýëåìåíòû (Z/nZ)× ÿâëÿþòñÿ
ñòåïåíÿìè g . Åñëè òàêîé ýëåìåíò g ñóùåñòâóåò, òî åãî íàçûâàþò
n. Ïåðâîîáðàçíûé êîðåíü ñóùåñòâóåò íå âñåãäà

ïåðîîáðàçíûì êîðíåì ïî

ìîäóëþ

 ãðóïïå (Z/nZ) ñóùåñòâóåò ïåðâîîáðàçíûé êîðåíü òîãäà è òîëüêî
òîãäà, êîãäà n ðàâíî 2, 4, èìååò âèä p èëè 2p , ãäå p > 2  ïðîñòîå ÷èñëî, à k 
íàòóðàëüíîå ÷èñëî.
Òåîðåìà 3.15.

×

k

k

Åñëè g  ïåðâîîáðàçíûé êîðåíü â ãðóïïå (Z/nZ)× , òî äëÿ âñÿêîãî a ∈ (Z/nZ)×
ñóùåñâòóåò x, äëÿ êîòîðîãî g x ≡ a (mod n). Òàêîå x íàçûâàþò
èëè
ýëåìåíòà a ∈ (Z/nZ)× ïî îñíîâàíèþ g . Èç òåîðåìû 3.5 âûòåêàåò ñëåäóþùèé
ôàêò.

èíäåêñîì

44

äèñêðåòíûì ëîãàðèôìîì

Àëãåáðà è òåîðèÿ ÷èñåë

Ïóñòü g  ïåðâîîáðàçíûé êîðåíü ïî ìîäóëþ n. Òîãäà ñðàâíåíèå g
ðàâíîñèëüíî ñðàâíåíèþ x ≡ y (mod ϕ(n)).

Òåîðåìà 3.16.
(mod n)

x

≡ gy

Èç ýòîé òåîðåìû âèäíî, ÷òî ïîíÿòèå èíäåêñà îïðåäåëåíî ñ òî÷íîñòüþ äî ñëàãàåìîãî,
êðàòíîãî ϕ(n).

Îïðåäåëåíèå 3.17.

Êîëüöîì

íàçûâàþò òàêîå ìíîæåñòâî R, íà êîòîðîì çàäàíû äâå áèíàðíûå îïåðàöèè: + (ñëîæåíèå) è × (óìíîæåíèå), äëÿ êîòîðûõ âûïîëíÿþòñÿ ñëåäóþùèå
ñâîéñòâà äëÿ ëþáûõ a, b, c ∈ R:
1) ìíîæåñòâî R ñ îïåðàöèåé + îáðàçóåò
(òî åñòü ∀a, b ∈ R ,→
a + b = b + a) ãðóïïó;
2) àññîöèàòèâíîñòü óìíîæåíèÿ: (a × b) × c = a × (b × c);
3) äèñòðèáóòèâíîñòü: a × (b + c) = a × b + a × c è (b + c) × a = b × a + c × a.
Êîëüöî ñ åäèíèöåé  ýòî êîëüöî, â êîòîðîì åñòü íåéòðàëüíûé ýëåìåíò ïî óìíîæåíèþ,
îáîçíà÷àåìûé îáû÷íî ÷åðåç 1: ∀a ∈ R ←- 1 × a = a × 1 = a. Êîììóòàòèâíîå êîëüöî  ýòî
êîëüöî, ó êîòîðîãî îïåðàöèÿ óìíîæåíèÿ ÿâëÿåòñÿ êîììóòàòèâíîé: ∀a, b ∈ R ,→ a × b =
b × a.

êîììóòàòèâíóþ

Îïðåäåëåíèå 3.18. Ìíîæåñòâî Z/nZ, îïåðàöèÿ ñëîæåíèÿ + è îïåðàöèÿ óìíîæåíèÿ ·

îáðàçóþò êîììóòàòèâíîå êîëüöî ñ åäèíèöåé. Ãðóáî ãîâîðÿ, ïðè ðàáîòå ñ âû÷åòàìè ïî
íåêîòîðîìó ìîäóëþ n ìîæíî èõ ñêëàäûâàòü è ïåðåìíîæàòü êàê îáû÷íûå ÷èñëà, ïðè÷¼ì
ïðîìåæóòî÷íûå ðåçóëüòàòû ìîæíî çàìåíÿòü íà îñòàòêè ïî ìîäóëþ n.

Îïðåäåëåíèå 3.19. Ïóñòü R  êîëüöî. Ýëåìåíò êîëüöà a ∈ R íàçûâàåòñÿ

íóëÿ, åñëè ab = 0 äëÿ íåêîòîðîãî b ∈ R.

äåëèòåëåì

Íàïðèìåð, 2  äåëèòåëü íóëÿ â Z/6Z, òàê êàê 2 · 3 = 0 â Z/6Z.

Îïðåäåëåíèå 3.20.

Èäåàë

I êîììóòàòèâíîãî êîëüöà R  ïîäìíîæåñòâî I ⊂ R, ÿâëÿþùååñÿ àáåëåâîé ãðóïïîé ïî ñëîæåíèþ, äëÿ êîòîðîãî âåðíî
∀i ∈ I, r ∈ R

ir ∈ I

Ïðèìåð 3.21. Âñå ýëåìåíòû, äåëÿùèåñÿ íà 2, îáðàçóþò èäåàë â Z.
 äàëüíåéøåì ïîä (f1 , . . . fk ) ⊂ R áóäåì ïîíèìàòü èäåàë, ïîðîæäåííûé ýëåìåíòàìè
f1 , . . . f k ∈ R :
(f1 , . . . fk ) = {f1 r1 + . . . fk rk | r1 , . . . rk ∈ R}.

Íàïðèìåð, (2) ⊂ Z  èäåàë, ïîðîæäåííûé 2.

Îïðåäåëåíèå 3.22.

Ïîëåì

íàçûâàþò êîììóòàòèâíîå êîëüöî R, â êîòîðîì îïðåäåëåíî
äåëåíèå a/b = ab−1 è îòñóòñòâóþò äåëèòåëè íóëÿ.
45

Powered by TCPDF (www.tcpdf.org)

Àëãåáðà è òåîðèÿ ÷èñåë

Òåîðåìà 3.23. Ëþáîå êîíå÷íîå ïîëå èìååò ìîùíîñòü p , ãäå k > 1, à p  ïðîñòîå.
Âñÿêîå êîíå÷íîå ïîëå ìîùíîñòè p åäèíñòâåííî ñ òî÷íîñòüþ äî èçîìîðôèçìà.
k

k

Äîêàçàòåëüñòâî.

Ñì. [20].



Ïîëå ìîùíîñòè pk ìû áóäåì îáîçíà÷àòü Fpk . Íåòðóäíî çàìåòèòü, ÷òî åñëè p(x) 
íåïðèâîäèìûé íàä Fp ìíîãî÷ëåí ñòåïåíè k, òî F[x]/(p(x)) ÿâëÿåòñÿ ïîëåì, èçîìîðôíûì
Fpk .

Äåëåíèå

Ðåøåíèå ëèíåéíûõ äèîôàíòîâûõ óðàâíåíèé.
ïî ìîäóëþ n  ýòî ðåøåíèå ëèíåéíîãî ñðàâíåíèÿ ax ≡ b (mod n) îòíîñèòåëüíî x. Òàêèå ñðàâíåíèÿ åù¼ íàçûâàþò
. Îêàçûâàåòñÿ, ÷òî òàêèå ñðàâíåíèÿ ìîæíî
ðåøàòü ïðè ïîìîùè ðàñøèðåííîãî àëãîðèòìà Åâêëèäà, î êîòîðîì ìû ãîâîðèëè ðàíåå.
Äëÿ íà÷àëà äîêàæåì íåñêîëüêî âñïîìîãàòåëüíûõ óòâåðæäåíèé.

ëèíåéíûìè äèîôàíòîâûìè óðàâíåíèÿìè

Äëÿ ëþáûõ ïîëîæèòåëüíûõ öåëûõ ÷èñåë ÷èñåë
, âûïîëíÿåòñÿ

Òåîðåìà 3.24.
d = (a, n)

a, n

è d, òàêèõ ÷òî

 o
n
n
−1 d
hai = hdi = 0, d, 2d, . . . ,
d

è

|hai| =

n
.
d

 àëãîðèòì Extended-Euclid(a, n) âåðí¼ò òðîéêó (d, x0 , y 0 ), äëÿ êîòîðîé d = (a, n) è ax + ny 0 = d. Òîãäà ax0 ≡ d (mod n) è ïîýòîìó d ∈ hai. Ñ äðóãîé ñòîðî
íû, d  ýòî äåëèòåëü a, à çíà÷èò, a ∈ hdi. Ñëåäîâàòåëüíî, hai = hdi = 0, d, 2d, . . . , nd − 1 d
n
è |hai| = d .

Äîêàçàòåëüñòâî.
0

Óòâåðæäåíèå 3.25. Óðàâíåíèå ax ≡ b (mod n) ðàçðåøèìî îòíîñèòåëüíî x òîãäà è
òîëüêî òîãäà (a, n) ÿâëÿåòñÿ äåëèòåëåì ÷èñëà b.
Äîêàçàòåëüñòâî.

êîãäà b ∈ hai = hdi =
d = (a, n).

Ñðàâíåíèå axn≡ b (mod n) èìååò ðåøåíèå òîãäà è òîëüêî òîãäà,
0, d, 2d, . . . , d − 1 d
⇐⇒ d ÿâëÿåòñÿ äåëèòåëåì ÷èñëà b, ãäå


Èíûìè ñëîâàìè, ¾äåëèòü ÷èñëî b íà ÷èñëî a ïî ìîäóëþ n¿ ìîæíî òîãäà è òîëüêî
òîãäà, êîãäà (a, n)  ýòî äåëèòåëü ÷èñëà b.  ÷àñòíîñòè, åñëè (a, n) = 1, òî äåëèòü íà a
ìîæíî âñåãäà. Íî ýòî è ïîíÿòíî: åñëè (a, n) = 1, òî a ∈ (Z/nZ)× =⇒ ∃a−1 mod n. Òåì íå
ìåíåå ¾ðàçäåëèòü¿ íà a ìîæíî äàæå è â ñëó÷àå, êîãäà a è n íå âçàèìíî ïðîñòû. Íàïðèìåð,
ñðàâíåíèå 2x ≡ 4 (mod 6) èìååò ðåøåíèÿ x = 2 è x = 5. Çàìåòèì, ÷òî â ïåðâîì ñëó÷àå
ðåøåíèå (â Z/nZ) åäèíñòâåííî, à âî âòîðîì  ðåøåíèé äâà. Ñëåäóþùèé ôàêò äà¼ò îòâåò
íà âîïðîñ î ÷èñëå ðåøåíèé â îáùåì ñëó÷àå.
46

Àëãåáðà è òåîðèÿ ÷èñåë

Óðàâíåíèå ax ≡ b (mod n) èìååò d = (a, n) ðàçëè÷íûõ ðåøåíèé â
èëè íå èìååò èõ âîâñå.

Óòâåðæäåíèå 3.26.
Z/nZ

Äîêàçàòåëüñòâî. Çäåñü ïîëåçíî ñìîòðåòü íà Z/nZ êàê íà ãðóïïó. Âñïîìíèì, êàê
ìû îïðåäåëÿëè hai: ìû ðàññìàòðèâàëè ïîñëåäîâàòåëüíîñòü 0, a, 2a, 3a, . . .. Ìû äîêàçàëè,
÷òî ýòà ïîñëåäîâàòåëüíîñòü èìååò ïåðèîä |hai| = nd . Òàê êàê b ∈ hai, òî âû÷åò b âñòðåòèòñÿ
ðîâíî îäèí ðàç ñðåäè ïåðâûõ nd ÷ëåíîâ ïîñëåäîâàòåëüíîñòè 0, a, 2a, 3a, . . ..  ñèëó ïåðèîäè÷íîñòè ïîñëåäîâàòåëüíîñòè, ýëåìåíò b âñòðåòèòñÿ åù¼ ðîâíî îäèí ðàç ñðåäè âòîðûõ nd
ýëåìåíòîâ óêàçàííîé ïîñëåäîâàòåëüíîñòè è òàê äàëåå. Òîãäà âñåãî îí âñòðåòèòñÿ d ðàç.
Êàæäîìó âõîæäåíèþ b â ïîñëåäîâàòåëüíîñòü 0, a, 2a, 3a, . . . , (n − 1)a ñîîòâåòñòâóåò ñâîé
âû÷åò x, à çíà÷èò, âñåãî òàêèõ çíà÷åíèé x ðîâíî d øòóê.


Ñëåäóþùèå äâå òåîðåìû ïðîëèâàþò ñâåò íà òî, êàê íàõîäèòü ðåøåíèå ëèíåéíîãî
äèîôàíòîâîãî óðàâíåíèÿ ïðè ïîìîùè ðàñøèðåííîãî àëãîðèòìà Åâêëèäà.

Ïóñòü d = (a, n) = ax + by , ãäå x è y  öåëûå ÷èñëà (íàïðèìåð, îíè
ìîãóò áûòü ïîëó÷åíû ïðîöåäóðîé Extended-Euclid(a, n)). Åñëè d | b (d äåëèò b), òî ÷èñëî
x =x ·
mod n ÿâëÿåòñÿ ðåøåíèåì óðàâíåíèÿ ax ≡ b (mod n).

Òåîðåìà 3.27.
0

0

0

0

0

0

b
d

Èç d = ax0 + by 0 ñëåäóåò, ÷òî ax0 ≡ d (mod n), ïîýòîìó ax0 ≡
≡ b (mod n).


Äîêàçàòåëüñòâî.

ax0 ·

b
d

≡d·

b
d

Ïóñòü óðàâíåíèå ax ≡ b (mod n) ðàçðåøèìî è x ÿâëÿåòñÿ åãî ðåøåíèåì. Òîãäà óðàâíåíèå èìååò d = (a, n) ðåøåíèé â Z/nZ, çàäàâàåìûõ ôîðìóëîé x = x + ,
ãäå i = 0, 1, 2, . . . , d − 1.
Òåîðåìà 3.28.

0

i

0

i·n
d

Äîêàçàòåëüñòâî. Èç äîêàçàòåëüñòâà ñëåäñòâèÿ 3.26 ìû çíàåì, ÷òî ðåøåíèÿ ñðàâíåíèÿ ax ≡ b (mod n) ñîîòâåòñòâóþò d ÷èñëàì èç ïîñëåäîâàòåëüíîñòè 0, a, 2a, . . . , (n − 1)a,
ïðè÷¼ì ýòè ÷èñëà ðàñïîëîæåíû ñ ïåðèîäîì nd . Íî ýòî êàê ðàç è îçíà÷àåò, ÷òî âñå ÷èñëà
âèäà x0 + i · nd , ãäå i = 0, 1, . . . , d − 1, ÿâëÿþòñÿ ðåøåíèÿìè ñðàâíåíèÿ ax ≡ b (mod n).
Êðîìå òîãî, èõ ðîâíî d øòóê, ïðè÷¼ì îíè ïîïàðíî ðàçëè÷íû ïî ìîäóëþ n â ñèëó òîãî,
÷òî x0 + (d − 1) · nd − x0 = (d − 1) · nd < n. Çíà÷èò, ýòî â òî÷íîñòè âñå ðåøåíèÿ ñðàâíåíèÿ. 

Ñëåäóþùàÿ ïðîöåäóðà ïî öåëûì ÷èñëàì a, b è n > 0 äà¼ò âñå ðåøåíèÿ óðàâíåíèÿ
ax ≡ b (mod n).
1: procedure Modular-Linear-Equation-Solver(a, b, n)
2:
(d, x0 , y 0 ) ← Extended-Euclid(a, n)
3:
if d | b then
4:
x0 ← x0 · db mod n
5:
for i ← 0 to d − 1 do
6:
print (x0 + i · nd ) mod n
7:

end for

47

Àëãåáðà è òåîðèÿ ÷èñåë
8:
9:
10:
11:

else

print ¾íåò ðåøåíèé¿

end if
end procedure

Ïðîöåäóðà Modular-Linear-Equation-Solver(a, b, n) âûïîëíèò O(log n) àðèôìåòè÷åñêèõ îïåðàöèé â ñòðîêå 2 è O((a, n)) îïåðàöèé â îñòàëüíûõ ñòðîêàõ, òî åñòü âñåãî O(log n + (a, n)).
Íî åñëè íàì äîñòàòî÷íî íàéòè âñå ðåøåíèÿ, à íå ïå÷àòàòü èõ íà ýêðàí, òî ÷èñëî àðèôìåòè÷åñêèõ îïåðàöèé áóäåò O(log n), à áèòîâûõ îïåðàöèé áóäåò O(log3 n), ò.ê. ïðîöåäóðà
Extended-Euclid(a, n) äåëàåò O(log n) äåëåíèé öåëûõ ÷èñåë äëèíû O(log n) ñ îñòàòêîì, ÷òî
äåëàåòñÿ çà O(log2 n).
Îòìåòèì åù¼ äâà âàæíûõ ñëåäñòâèÿ.

Ïóñòü n > 1. Åñëè (a, n) = 1, òî óðàâíåíèå ax ≡ b (mod n) èìååò
åäèíñòâåííîå ðåøåíèå â Z/nZ.  ÷àñòíîñòè, åñëè b = 1 è (a, n) = 1, òî óðàâíåíèå ax ≡ 1
(mod n) èìååò åäèíñòâåííîå ðåøåíèå â Z/nZ. Ïðè (a, n) > 1 óðàâíåíèå ax ≡ 1 (mod n)
ðåøåíèÿ íå èìååò.

Óòâåðæäåíèå 3.29.

Ðåøåíèå ñèñòåì ëèíåéíûõ ñðàâíåíèé. Êèòàéñêàÿ òåîðåìà îá îñòàòêàõ. Ðàçâèâàÿ òåìó ïðåäûäóùåãî ðàçäåëà è íàìåðåíî îòõîäÿ íåìíîãî â ñòîðîíó îò ìîäóëÿðíîé
àðèôìåòèêè, ðàññìîòðèì ñèñòåìó ëèíåéíûõ ñðàâíåíèé âèäà:
x
x
x

≡ a1
≡ a2
...
≡ ak

(mod n1 )
(mod n2 )
(mod nk ),

ãäå n1 , n2 , . . . , nk  ïîïàðíî âçàèìíî ïðîñòûå ÷èñëà. Íàøà öåëü  íàéòè òàêîé âû÷åò a ïî
ìîäóëþ n = n1 n2 · . . . · nk , ÷òî a  ýòî ðåøåíèå óêàçàííîé ëèíåéíîé ñèñòåìû ñðàâíåíèé, òî
åñòü x ≡ a (mod n). Êèòàéñêàÿ òåîðåìà îá îñòàòêàõ óòâåðæäàåò, ÷òî Z/nZ óñòðîåíî êàê
ïðîèçâåäåíèå êîëåö âû÷åòîâ Z/n1 Z×Z/n2 Z×. . .×Z/nk Z (ñ ïîêîìïîíåíòíûì ñëîæåíèåì è
óìíîæåíèåì). Ýòî ñîîòâåòñòâèå ïîëåçíî ñ àëãîðèòìè÷åñêîé òî÷êè çðåíèÿ, òàê êàê áûâàåò
ïðîùå âûïîëíèòü îïåðàöèè âî âñåõ ìíîæåñòâàõ Z/ni Z, ÷åì â êîëüöå Z/nZ.

Ïóñòü n = n n · . . . · n , ïðè÷¼ì ÷èñëà
ïîïàðíî âçàèìíî ïðîñòû. Ðàññìîòðèì ñîîòâåòñòâèå

Òåîðåìà 3.30 (Êèòàéñêàÿ òåîðåìà îá îñòàòêàõ).
n1 , n2 , . . . , nk

1

2

k

a ↔ (a1 , a2 , . . . , ak ),

ãäå a ∈ Z/nZ, a ∈ Z/n Z è a ≡ a (mod n ) ïðè i = 1, 2, . . . , k. Òîãäà äàííîå ñîîòâåòñòâèå
ÿâëÿòñÿ âçàèìíî îäíîçíà÷íûì ìåæäó Z/nZ è Z/n Z × Z/n Z × . . . × Z/n Z. Ïðè ýòîì
îïåðàöèÿì ñëîæåíèÿ, âû÷èòàíèÿ è óìíîæåíèÿ â Z/nZ ñîîòâåòñòâóþò ïîêîìïîíåíòíûå îïåðàöèè íàä k-ýëåìåíòíûìè êîðòåæàìè: åñëè
i

i

i

i

1

a ↔ (a1 , a2 , . . . , ak )

48

2

k

Àëãåáðà è òåîðèÿ ÷èñåë

è
òî

b ↔ (b1 , b2 , . . . , bk ),
(a + b)
(ab)

↔ ((a1 + b1 ) mod n1 , . . . , (ak + bk ) mod nk ) ,
↔ ((a1 b1 ) mod n1 , . . . , (ak bk ) mod nk ) .

mod n
mod n

Äîêàçàòåëüñòâî. Íà÷í¼ì ñ òîãî, ÷òî îòìåòèì, ÷òî îòîáðàæåíèå èç Z/nZ â äåêàðòîâî ïðîèçâåäåíèå çàäàíî êîððåêòíî: åñëè äâà ÷èñëà ñðàâíèìû ïî ìóäëþ n, òî èõ ðàçíîñòü
êðàòíà n, è ïîòîìó ýòè ÷èñëà äàþò îäèíàêîâûå îñòàòêè ïðè äåëåíèè íà ëþáîå èç ni , òàê
êàê ni  äåëèòåëü ÷èñëà n.
Ïîñòðîèì îáðàòíîå îòîáðàæåíèå. Ïîëîæèì mi = nni äëÿ âñåõ ni . Îòñþäà ñëåäóåò, ÷òî
mi ≡ 0 (mod nj ) ïðè i 6= j . Ïîëîæèì

ci = mi m−1
mod ni
i

äëÿ âñåõ i = 1, 2, . . . , k. Òîãäà ci ≡ 1 (mod ni ) è ci ≡ 0 (mod nj ) ïðè j 6= i, è ÷èñëó ci
ïîýòîìó ñîîòâåòñòâóåò íàáîð ñ îäíîé åäèíèöåé íà i-ì ìåñòå:
ci ↔ (0, 0, . . . , 0, 1, 0, . . . , 0).
i

Òåì ñàìûì, ïîëîæèâ
a ≡ (a1 c1 + a2 c2 + . . . + ak ck )

(mod n),

ìû ïîëó÷èì ÷èñëî ñîîòâåòñòâóþùåå íàáîðó (a1 , a2 , . . . , ak ). Ñëåäîâàòåëüíî, äëÿ êàæäîãî
íàáîðà ìîæíî íàéòè ñîîòâåòñòâóþùèé ýëåìåíò. Äàëåå çàìåòèì, ÷òî åñëè a è a0 äàþò
îäèíàêîâûå îñòàòêè ïðè äåëåíèè íà âñå ni , òî a − a0 äåëèòñÿ íà âñå ni , à çíà÷èò, è íà n â
ñèëó âçàèìíîé ïðîñòîòû ÷èñåë ni . Ñëåäîâàòåëüíî, îòîáðàæåíèå âçàèìíî îäíîçíà÷íî. 

Óòâåðæäåíèå 3.31.

ñèñòåìà ñðàâíåíèé

Åñëè n , n , . . . , n ïîïàðíî âçàèìíî ïðîñòû è n = n n
1

2

1

k

x ≡ ai

2

. . . nk

, òî

(mod ni )

îòíîñèòåëüíî x (ãäå i = 1, . . . , k) èìååò åäèíñòâåííîå ðåøåíèå ïî ìîäóëþ n.
Óòâåðæäåíèå 3.32. Åñëè n , n , . . . , n ïîïàðíî âçàèìíî ïðîñòû, n = n n . . . n è x è
a  öåëûå ÷èñëà, òî ñâîéñòâî
1

2

ðàâíîñèëüíî âûïîëíåíèþ ñðàâíåíèé
ïðè âñåõ i = 1, . . . , k.

1

k

x≡a

(mod n)

x≡a

(mod ni )

2

k

49

Àëãåáðà è òåîðèÿ ÷èñåë

Ïðèìåð 3.33. Ðàññìîòðèì ñèñòåìó ñðàâíåíèé
≡2
≡3

a
a

(mod 5)
(mod 13).

Çäåñü a1 = 2, a2 = 3, n1 = m2 = 5, n2 = m1 = 13, n = 65, åñëè ñîõðàíÿòü îáîçíà÷åíèÿ êèòïàéñêîé òåîðåìû îá îñòàòêàõ. ×òîáû âîññòàíîâèòü a ïî ìîäóëþ n = 65, íàì íóæíî íàéòè
÷èñëà ci . Òàê êàê 13−1 ≡ 2 (mod 5) è 5−1 ≡ 8 (mod 13) (êàê ìû âûÿñíèëè â ïðåäûäóùåì
ðàçäåëå, ïðè ïîìîùè ðàñøèðåííîãî àëãîðèòìà Åâêëèäà ìû ìîæåì íàõîäèòü îáðàòíûé
ýëåìåíò (åñëè îí ñóùåñòâóåò) çà O(log3 n) áèòîâûõ îïåðàöèé), ìû ïîëó÷àåì
c1
c2

= 13 · (2 mod 5) = 26
= 5 · (8 mod 13) = 40,

îòêóäà
a

≡ 2 · 26 + 3 · 40 (mod 65)
≡ 52 + 120 (mod 65)
≡ 42 (mod 65).

Õîðîøèì ââåäåíèåì â òåîðèþ ÷èñåë ñ÷èòàåòñÿ ó÷åáíèê [24], òàêæå ðåêîìåíäóåì ÷èòàòü [9].
Òåïåðü ðàññìîòðèì òåîðåòèêî-÷èñëîâûå àëãîðèòìû. Íà÷íåì ñ òåñòîâ íàòóðàëüíîãî
÷èñëà íà ïðîñòîòó. Íåòðóäíî âèäåòü, ÷òî àëãîðèòì, ïðîâåðÿþùèé √
ïðîñòîòó n ïåðåáîðîì
âñåâîçìîæíûõ êàíäèäàòîâ â äåëèòåëè ñðåäè ýëåìåíòîâ îòðåçêà [1; n], íå ïîëèíîìèàëåí.
Ìû ñïåðâà ïðîâåðèì, ÷òî ÿçûê ïðîñòûõ ÷èñåë ëåæèò êàê â êëàññå co − NP, êàê è â
êëàññå NP. Çàòåì ìû ðàññìîòðèì âåðîÿòíîñòíûå àëãîðèòìû ïðîâåðêè ïðîñòîòû, ïîñëå
÷åãî äîêàæåì, ÷òî ñóùåñòâóåò ïîëèíîìèàëüíûé àëãîðèòì, ïðîâåðÿþùèé ïðîñòîòó ÷èñëà.

Ïóñòü π(n) 
ýòî êîëè÷åñòâî ïðîñòûõ
÷èñåë,
íå
ïðåâîñõîäÿùèõ
n. Òîãäà äëÿ n > 20 èìååì




Òåîðåìà 3.34 (àñèìïòîòè÷åñêèé çàêîí ðàñïðåäåëåíèÿ ïðîñòûõ ÷èñåë).
n log n + log log n −

 ÷àñòíîñòè,

3
2

< pn < n log n + log log n −

lim π(n) ·

n→∞

1
2

.

ln n
= 1,
n

òî åñòü ïðîñòûõ ÷èñåë íà îòðåçêå [1, n] àñèìïòîòè÷åñêè ñòîëüêî:

n
ln n

.

Ýòî óòâåðæäåíèå ìû îñòàâèì áåç äîêàçàòåëüñòâà, åãî ìîæíî ïðî÷èòàòü â êíèãå [23].

Ïîëèíîìèàëüíûå àðèôìåòè÷åñêèå àëãîðèòìû
Äîãîâîðèìñÿ, ÷òî â äàííîì ðàçäåëå ìû áóäåì èñïîëüçîâàòü áèòîâóþ ñëîæíîñòü (òî
åñòü ðàçìåð âõîäà äëÿ íàñ  êîëè÷åñòâî áèòîâ, èñïîëüçîâàííûõ äëÿ çàïèñè ÷èñåë, ÷èñëî îïåðàöèé òåîðåòèêî-÷èñëîâîãî àëãîðèòìà ìû áóäåì èçìåðèòü â áèòîâûõ îïåðàöèÿõ).
50

Àëãåáðà è òåîðèÿ ÷èñåë
×èñëî ïî óìîë÷àíèþ ïðåäñòàâëåíî â äâîè÷íîé ñèñòåìå, äëèíà ÷èñëà n ðàâíà blog2 nc + 1.
Ïîëèíîìèàëüíûé àëãîðèòì íà ÷èñëàõ äîëæåí ðàáîòàòü çà O(logd n) äëÿ íåêîòîðîãî d ∈ N;
â ÷àñòíîñòè, ïåðåáîðíûé àëãîðèòì√ ïðîâåðêè ÷èñëà n íà ïðîñòîòó (ïðîâåðÿþùèé äåëèìîñòü n íà ÷èñëà èç èíòåðâàëà [1; n]) íå ïîëèíîìèàëåí.
Ñëîæåíèå è óìíîæåíèå ìîæíî ðåàëèçîâàòü â ñòîëáèê. Ïðîâåðèì, ÷òî ýòè ðåàëèçàöèè ïîëèíîìèàëüíû. Ñëîæåíèå â ñòîëáèê äâóõ ÷èñåë, íå ïðåâûøàþùèõ n, èñïîëüçóåò íå
áîëåå 2(log2 n + 1) îïåðàöèé ñëîæåíèÿ  íå áîëåå 2 â êàæäîì ðàçðÿäå. Óìíîæåíèå æå
â ñòîëáèê äâóõ ÷èñåë, íå ïðåâûøàþùèõ n, åñòü ñëîæåíèå íå áîëåå log2 n + 1 äâîè÷íûõ
÷èñåë, êàæäîå èç êîòîðûõ íå äëèíåå log2 n2 + 1 = 2 log2 n + 1, òî åñòü èìååò ñëîæíîñòü
O(log2 n). Ñðàâíåíèå äâóõ äâîè÷íûõ ÷èñåë ìîæåò áûòü ïðîäåëàíî çà O(log n) ïîáèòîâûõ
ñðàâíåíèé.
Äåëåíèå ñ îñòàòêîì äâóõ öåëûõ ÷èñåë, ðåàëèçîâàííîå â ñòîëáèê, òàêæå ïîëèíîìèàëüíî. Åñëè a = bq + r, ãäå |r| < |b|, òî äëèíà q íå ïðåâûøàåò log a − log b, ñëåäîâàòåëüíî,
ïðè äåëåíèè a íà b ñ îñòàòêîì áóäåò ïðîèçâåäåíî íå áîëåå log a − log b âû÷èòàíèé (âîçìîæíî, ÷òî ïðèäåòñÿ äîáàâèòü öèôðó â êîíåö, à íå ïðîäåëàòü âû÷èòàíèå) ÷èñåë äëèíû
log b, òî åñòü â èòîãå ñëîæíîñòü äåëåíèÿ ñ îñòàòêîì åñòü O(log a log b)  ñëàãàåìîå log2 b
íå ïðåâûøàåò log a log b.
 äàëüíåéøåì ïðè ðàññìîòðåíèè ÷èñëîâûõ àëãîðèòìîâ áóäåì ïî óìîë÷àíèþ ñ÷èòàòü,
÷òî äëèíû âõîäíûõ ÷èñåë íå îãðàíè÷åíû.

Ïîëèíîìèàëüíîñòü àëãîðèòìà Åâêëèäà
Òåïåðü ïðîâåðèì ïîëèíîìèàëüíîñòü àëãîðèòìà Åâêëèäà.

1:
2:
3:
4:
5:
6:
7:

procedure Euclid(a, b)
if b = 0 then
return a
else
return Euclid(b, a mod b)
end if
end procedure

Íàì äîñòàòî÷íî ïîêàçàòü, ÷òî àëãîðèòì Åâêëèäà ñîâåðøàåòñÿ çà ïîëèíîìèàëüíîå
÷èñëî àðèôìåòè÷åñêèõ îïåðàöèé íàä a è b. Ïîñêîëüêó âñå óìíîæåíèÿ è äåëåíèÿ ñ îñòàòêîì äåëàþòñÿ çà íå áîëåå ÷åì O(log a log b), à âñå ñëîæåíèÿ è âû÷èòàíèÿ äåëàþòñÿ çà
íå áîëåå ÷åì O(log a), òî èç ïîëèíîìèàëüíîñòè ÷èñëà àðèôìåòè÷åñêèõ îïåðàöèé ñëåäóåò
ïîëèíîìèàëüíîñòü ñàìîãî àëãîðèòìà.

Àëãîðèòì Åâêëèäà âû÷èñëÿåò íàèáîëüøèé îáùèé äåëèòåëü a è b çà
àðèôìåòè÷åñêèõ îïåðàöèé.

Òåîðåìà 3.35.
O(log a + log b)

51

Àëãåáðà è òåîðèÿ ÷èñåë
Äîêàçàòåëüñòâî. Î÷åâèäíî, ÷òî àëãîðèòì Åâêëèäà îñòàíîâèòñÿ íà ëþáîì âõîäå.
Ïîñëå êàæäîãî äåëåíèÿ ñ îñòàòêîì ïàðà (x, y) çàìåíÿåòñÿ íà ïàðó (y, x mod y), ïðè ýòîì

x = yq + (x

mod y) > y + (x

mod y) > 2(x

mod y)

Êàê ñëåäñòâèå, xy > 2y(x mod y), òî åñòü ïðîèçâåäåíèå ýëåìåíòîâ ïàðû êàæäûé ðàç
óìåíüøàåòñÿ õîòÿ áû âäâîå. Êàê ñëåäñòâèå, òðåáóåòñÿ O(log ab) = O(log a + log b) àðèôìåòè÷åñêèõ îïåðàöèé.

Ïóñòü Fk  k-å ÷èñëî Ôèáîíà÷÷è. Òîãäà ñïðàâåäëèâà ñëåäóþùàÿ ëåììà.

Ïóñòü a > b > 0. Åñëè ïðîöåäóðà Euclid(a, b) âî âðåìÿ ðàáîòû âûçûâàåò
ñåáÿ k ðàç (k > 1), òî a > F è b > F .

Ëåììà 3.36.

k+2

k+1

Äîêàçàòåëüñòâî. Äîêàçàòåëüñòâî ïðîâåä¼ì èíäóêöèåé ïî k . Ðàññìîòðèì k = 1.
Åñëè ïðîèñõîäèò õîòÿ áû îäèí ðåêóðñèâíûé âûçîâ, òî b > 0, à çíà÷èò, b > 1 = F2 =⇒
a > 2 = F3 , òåì ñàìûì äîêàçàíà áàçà èíäóêöèè. Ïóñòü óòâåðæäåíèå âûïîëíåíî äëÿ
k − 1 âûçîâîâ, ïîêàæåì, ÷òî òàêèì îáðàçîì óòâåðæäåíèå âåðíî äëÿ k âûçîâîâ. Íà ïåðâîì øàãå ïðîöåäóðà Euclid(a, b) âûçûâàåò ïðîöåäóðó Euclid(b, a mod b), âíóòðè êîòîðîé
ïðîèñõîäèò k − 1 ðåêóðñèâíûé âûçîâ. Ïðèìåíèì ïðåäïîëîæåíèå èíäóêöèè äëÿ Euclid
 (b, a
mod b): b > Fk+1 è (a mod b) > Fk . Èç íåðàâåíñòâà a > b > 0 ñëåäóåò, ÷òî ab > 1 è
  
b + (a mod b) = b a − ab · b 6 a, òàê ÷òî a > b + (a mod b) > Fk+1 + Fk = Fk+2 , ÷òî è
òðåáîâàëîñü äîêàçàòü.


Èç äîêàçàííîé ëåììû ïîëó÷àåì ñëåäóþùóþ òåîðåìó.

Ïóñòü k  öåëîå ïîëîæèòåëüíîå ÷èñëî. Åñëè a > b > 0 è b <
, òî ïðîöåäóðà Euclid(a, b) âûïîëíÿåò ìåíåå k ðåêóðñèâíûõ âûçîâîâ.

Òåîðåìà 3.37 (Ëàìå).
Fk+1

k



ϕ
Ïîñêîëüêó Fk ïðèìåðíî ðàâíî √
, ãäå ϕ = 1+2 5  ¾çîëîòîå ñå÷åíèå¿, òî ÷èñëî ðåêóð5
ñèâíûõ âûçîâîâ äëÿ ïðîöåäóðû Euclid(a, b) ñîñòàâëÿåò O(log b) ïðè a > b > 0. Åñëè ïðîöåäóðà Euclid ïðèìåíÿåòñÿ ê äâóì m-áèòîâûì ÷èñëàì, òî åé ïðèõîäèòñÿ âûïîëíÿòü O(m)
àðèôìåòè÷åñêèõ îïåðàöèé, à çíà÷èò, O(m3 ) áèòîâûõ îïåðàöèé. Íà ñàìîì äåëå ýòà îöåíêà
äîñòàòî÷íî ãðóáàÿ. Ìîæíî ïîêàçàòü, ÷òî ÷èñëî áèòîâûõ îïåðàöèé ðàâíÿåòñÿ O(m2 ).

Åñëè d äåëèò îáà ÷èñëà a è b, à òàêæå d = ax + by äëÿ íåêîòîðûõ öåëûõ
÷èñåë x è y, òî d = gcd ab
Ëåììà 3.38.

Äîêàçàòåëüñòâî. Òàê êàê d  îáùèé äåëèòåëü ÷èñåë a è b, òî îí íå ïðåâîñõîäèò
íàèáîëüøåãî îáùåãî äåëèòåëÿ ïî îïðåäåëåíèþ: d 6 gcd ab. Ñ äðóãîé ñòîðîíû, gcd ab äåëèò
a è b, à çíà÷èò, äåëèò è ax + by = d, òî åñòü gcd ab 6 d. Èç ýòèõ äâóõ íåðàâåíñòâ ïîëó÷àåì,
÷òî d = gcd ab.


Îêàçûâàåòñÿ, ÷òî ìîæíî íåìíîãî âèäîèçìåíèòü ïðîöåäóðó Euclid(a, b) òàê, ÷òîáû îíà
âîçâðàùàëà è êîýôôèöèåíòû x è y óêàçàííîé ëèíåéíîé êîìáèíàöèè.
52

Àëãåáðà è òåîðèÿ ÷èñåë
1:
2:
3:
4:
5:
6:
7:

procedure Extended-Euclid(a, b)
if b = 0 then
return (1, 0, a)
end if

(x0 , y 0 , d) ← Extended-Euclid
(b, a mod b)
 
return (y 0 , x0 − ab y 0 , d)

end procedure

Äëÿ ïðîèçâîëüíûõ íåîòðèöàòåëüíûõ ÷èñåë a è b (a > b) ðàñøèðåííûé
àëãîðèòì Åâêëèäà âîçâðàùàåò öåëûå ÷èñëà x, y, d, äëÿ êîòîðûõ gcd ab = d = ax + by.

Ëåììà 3.39.

Äîêàçàòåëüñòâî. Âî-ïåðâûõ, åñëè âûêèíóòü èç àëãîðèòìà x è y , òî ïîëó÷èì îáû÷íûé àëãîðèòì Åâêëèäà, ïîýòîìó îí äåéñòâèòåëüíî âû÷èñëÿåò d = gcd ab. Îñòàâøååñÿ
óòâåðæäåíèå äîêàæåì èíóêöèåé ïî b. Áàçà äëÿ b = 0 î÷åâèäíà. Äîêàçûâàÿ øàã èíäóêöèè,
âîñïîëüçóåìñÿ ïðåäïîëîæåíèåì èíäóêöèè äëÿ ðåêóðñèâíîãî âûçîâà Extended-Euclid(b, a
mod b) (ýòî êîððåêòíî, âåäü a mod b < b):

gcd ba mod b = bx0 + (a
  
Ïåðåïèøåì (a mod b) êàê a − ab · b è ïîëó÷èì:

modb)y 0 .

0
0
= gcd ab = gcd
 ba
 mod b = bx + (a mod
 b)y
= bx0 + a − ab · b y 0 = ay 0 + b x0 − ab · y 0 .
 
Èòàê, d = ax + by ïðè x = x0 è y = x0 − ab · y 0 , ÷òî è òðåáîâàëîñü äîêàçàòü.

d



Ïðè ïîìîùè ðàñøèðåííîãî àëãîðèòìà Åâêëèäà ìîæíî ðåøàòü ëèíåéíûå äèîôàíòîâû óðàâíåíèÿ. Ñëåäóþùàÿ ïðîöåäóðà ïî öåëûì ÷èñëàì a, b è n > 0 äà¼ò âñå ðåøåíèÿ
óðàâíåíèÿ ax ≡ b (mod n).
1: procedure Modular-Linear-Equation-Solver(a, b, n)
2:
(d, x0 , y 0 ) ← Extended-Euclid(a, n)
3:
if d | b then
4:
x0 ← x0 · db mod n
5:
for i ← 0 to d − 1 do
6:
print (x0 + i · nd ) mod n
7:
8:
9:
10:
11:

end for
else

print ¾íåò ðåøåíèé¿

end if
end procedure

Ïðîöåäóðà Modular-Linear-Equation-Solver(a, b, n) âûïîëíèò O(log n) àðèôìåòè÷åñêèõ îïåðàöèé â ñòðîêå 2 è O(gcd an) îïåðàöèé â îñòàëüíûõ ñòðîêàõ, òî åñòü âñåãî O(log n+
gcd an). Íî åñëè íàì äîñòàòî÷íî íàéòè âñå ðåøåíèÿ, à íå ïå÷àòàòü èõ íà ýêðàí, òî ÷èñëî
53

Àëãåáðà è òåîðèÿ ÷èñåë
àðèôìåòè÷åñêèõ îïåðàöèé áóäåò O(log n), à áèòîâûõ îïåðàöèé áóäåò O(log3 n), ò.ê. ïðîöåäóðà Extended-Euclid(a, n) äåëàåò O(log n) äåëåíèé öåëûõ ÷èñåë äëèíû O(log n) ñ
îñòàòêîì, ÷òî äåëàåòñÿ çà O(log2 n).
Îòìåòèì åù¼ äâà âàæíûõ ñëåäñòâèÿ.

Âûâîä 3.40. Ïóñòü n > 1. Åñëè gcd an = 1, òî óðàâíåíèå ax ≡ b (mod n) èìååò åäèí-

ñòâåííîå ðåøåíèå â Zn .  ÷àñòíîñòè, åñëè b = 1 è gcd an = 1, òî óðàâíåíèå ax ≡ 1 (mod n)
èìååò åäèíñòâåííîå ðåøåíèå â Zn . Ïðè gcd an > 1 óðàâíåíèå ax ≡ 1 (mod n) ðåøåíèÿ íå
èìååò.
Èòàê, äåëåíèå ïî ìîäóëþ n è âû÷èñëåíèå îáðàòíîãî ïî ìîäóëþ n èìåþò ñëîæíîñòü
O(log3 n).
Íàïîñëåäîê ðàññìîòðèì
. Èäåÿ åãî â ñëåäóþùåì: ïîèñê
íàèáîëüøåãî îáùåãî äåëèòåëÿ x è y ìîæíî ñâåñòè ê ïîèñêó ÍÎÄà èõ ìàêñèìàëüíûõ
íå÷åòíûõ äåëèòåëåé x
e è ye, âûíåñÿ îáùóþ ñòåïåíü äâîéêè, à x
e è ye ìîæíî çàìåíèòü íà
min(e
x, ye) è |e
x − ye|; äàëüøå ñ ïîëó÷åííîé ïàðîé ïðîäåëûâàþòñÿ òå æå îïåðàöèè, ïîêà íå
ïîëó÷èòñÿ ïàðà âèäà (x, 0) èëè (0, y).
Èìïëåìåíòàöèÿ ñëåäóþùàÿ:
1: procedure Binary-Euclid(x, y )
.
2:
dx = max{d ∈ N|x .. 2d }
.
3:
dy = max{d ∈ N|y .. 2d }
−dy
−dx
, b = y2
4:
a = x2
5:
if b < a then
6:
ïîìåíÿòü ìåñòàìè a è b

áèíàðíûé àëãîðèòì Åâêëèäà

7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

54

end if
while b > 1 do

a=a−b
b = min(a, b)
.
while a .. 2 do
a/ = 2

end while
.

while b .. 2 do
b/ = 2

end while
end while
return a2min(dx ,dy )
end procedure

Àëãåáðà è òåîðèÿ ÷èñåë
Ïðîäåìîíñòðèóåì ðàáîòó ýòîãî àëãîðèòìà íà îäíîì ïðèìåðå. Ïóñòü x = 36, y = 90;
òîãäà dx = 2, dy = 1, è ìû ïåðåõîäèì ê ïàðå (a, b) = (9, 45). Çàòåì ìû çàìåíÿåì äâà
÷èñëà íà èõ ðàçíîñòü è ìèíèìàëüíîå, òî åñòü ïîñëå ýòîãî øàãà (a, b) = (9, 36). Íî ýòî
åùå íå âñå: 9 íå ÿâëÿåòñÿ ÷åòíûì, à 36  ÿâëÿåòñÿ, ïîýòîìó ìû äåëèì åãî íà 2, ïîêà
íå ïîëó÷èì íå÷åòíîå ÷èñëî. Èòîãî ìû ïîëó÷èëè (a, b) = (9, 9). Ñëåäóþùèì æå øàãîì
ìû ïîëó÷èì (a, b) = (9, 0); ôèíàëüíûé ðåçóëüòàò åñòü 9 · 2min(2,1) = 18. Êîíå÷íî æå,
gcd(36, 90) = 18 gcd(2, 5) = 18.
Äîêàæåì êîððåêòíîñòü ýòîãî àëãîðèòìà. z äåëèòñÿ íà ìàêñèìàëüíî âîçìîæíóþ ñòåïåíü äâîéêè, äåëÿùóþ è x, è y . Òàêèì îáðàçîì, ó ÷èñåë a è b ÍÎÄ íå÷åòåí è, ñëåäîâàòåëüíî, gcd(a, b) = gcd( a2 , b) [åñëè a ÷åòíûé] ëèáî gcd(a, b) = gcd(a, 2b ) [åñëè b ÷åòíûé].
.
.
.
Çàìåíà a, b íà min(a, b), |a − b| ñîõðàíÿåò ÍÎÄ: åñëè a, b .. d, òî min(a, b) .. d è |a − b| .. d,
îáðàòíîå òàêæå âåðíî [ïî àíàëîãè÷íûì ïðè÷èíàì]. Ïîñëåäíÿÿ ïîëó÷åííàÿ ïàðà åñòü ïàðà
âèäà (a, 0), åå ÍÎÄ ðàâåí a, òàêèì îáðàçîì, a2min(dx ,dy ) = gcd(x, y).
Îñíîâíîé ïàôîñ ïîäîáíîé ìîäèôèêàöèè àëãîðèòìà Åâêëèäà â òîì, ÷òî äåëèòü íà äâà
ìîæíî èñêëþ÷èòåëüíî áûñòðî: íàäî ëèøü óáðàòü îäèí íîëü â êîíöå äâîè÷íîé çàïèñè ÷èñëà. Ïóñòü n  ìàêñèìàëüíàÿ äëèíà îäíîãî èç äâóõ ÷èñåë, òîãäà íà êàæäîì øàãó õîòÿ áû
îäíî èç ÷èñåë óìåíüøàåòñÿ õîòÿ áû íà 1, íàì ïðèäåòñÿ ñäåëàòü O(n) èòåðàöèé áîëüøîãî
öèêëà â àëãîðèòìå. Êàæäàÿ èòåðàöèÿ åñòü âû÷èñëåíèå a − b, ìèíèìóìà èç äâóõ ÷èñåë a
è b è âîçìîæíîå äåëåíèå íà ñòåïåíü äâîéêè; âû÷èòàíèå â ñòîëáèê èìååò ñëîæíîñòü O(n)
áèòîâûõ îïåðàöèé, âû÷èñëåíèå ìèíèìóìà òðåáóåò ñðàâíåíèÿ äâóõ ÷èñåë äëèíû íå äëèííåå n, êîòîðîå íå ñëîæíåå O(n), à äåëåíèå íà ñòåïåíü äâîéêè ìîæíî îñóùåñòâèòü, íàéäÿ
ïîñëåäíèé áèò, íå ðàâíûé 0, ÷òî òîæå ìîæíî îñóùåñòâèòü çà O(n) áèòîâûõ îïåðàöèé. Â
êîíöå íóæíî áóäåò äîïèñàòü ñîêðàùåííîå â íà÷àëå ðàáîòû àëãîðèòìà êîëè÷åñòâî íóëåé,
èõ æå íå áîëåå n, âåäü 2min(dx ,dy ) 6 max(x, y). Èòîãî ñëîæíîñòü áèíàðíîãî àëãîðèòìà
Åâêëèäà ìîæíî îãðàíè÷èòü O(max(log x, log y)2 ).

Áûñòðîå óìíîæåíèå ÷èñåë è ìàòðèö
Ïóñòü äàíû äâà áîëüøèõ ÷èñëà x, y â áèíàðíîé çàïèñè,
äëèíû n. Íàèâíûé ìåòîä

óìíîæåíèÿ, ¾â ñòîëáèê¿, òðåáóåò, êàê ìû âèäåëè Θ n2 îïåðàöèé. Îäíàêî ñóùåñòâóþò
è áîëåå áûñòðûå àëãîðèòìû ïåðåìíîæåíèÿ äâóõ ÷èñåë, íàïðèìåð, îïèñàííûé íèæå
. Ïðåäñòàâèì x è y â âèäå x = a2k + b, y = c2k + d, ãäå b, d < 2k . Ïî ñóòè,
ìû ðàçáèëè áèíàðíóþ çàïèñü êàæäîãî ÷èñëà íà äâå ÷àñòè: äëèíû k è n − k. Òîãäà

xy = (a2k + b)(c2k + d) = ac22k + (ad + bc)2k + bd = ac22k + (a + b)(c + d) − ac − bd 2k + bd.

ðèòì Êàðàöóáû

àëãî-

Òàê êàê ñëîæåíèå è âû÷èòàíèå ÷èñåë îñóùåñòâëÿåòñÿ çà ëèíåéíîå ïî äëèíå âðåìÿ, à
óìíîæåíèå íà ñòåïåíü äâîéêè â áèíàðíîé çàïèñè çàêëþ÷àåòñÿ ïðîñòî â äîïèñûâàíèè
íóæíîãî ÷èñëà íóëåé, òî îñíîâíàÿ çàäà÷à ñâîäèòñÿ ê óìíîæåíèþ òðåõ ïàð ÷èñåë: ac, bd,
(a + b)(c + d). Âçÿâ k = b n2 c, äëÿ ñëîæíîñòè àëãîðèòìà ïîëó÷àåì ñëåäóþùåå ðåêóððåíòíîå
55

Àëãåáðà è òåîðèÿ ÷èñåë
óðàâíåíèå:
j n k

(12)

T (n) = T

(13)

T (1) = C.

2

+T

l n m
2

+T

l n m
2


+ 1 + O(n), n ≥ 2,



Ïî òåîðåìå ÀêðàÁàççè T (n) = Θ nlog2 3 + nlog2 3 Θ(1) = Θ nlog2 3 . Ïîýòîìó ýòîò
àëãîðèòì äåéñòâèòåëüíî àñèìïòîòè÷åñêè áûñòðåå, ÷åì íàèâíîå óìíîæåíèå.
Îêàçûâàåòñÿ, ïîäîáíûå èäåè ìîæíî èñïîëüçîâàòü è äëÿ áûñòðîãî óìíîæåíèÿ ìàòðèö.
Ðàññìîòðèì äâå ìàòðèöû A, B ðàçìåðà n × n, è C := AB . Òàê êàê
n
X
ci,j =
ai,k bk,j ,
k=1

òî îáû÷íîå óìíîæåíèå òðåáóåò Θ n îïåðàöèé (óìíîæåíèé è ñëîæåíèé). Áûñòðîå óìíîæåíèå ìàòðèö ñ ïîìîùüþ
çàêëþ÷àåòñÿ â ñëåäóþùåì. Ïóñòü n =
2s . Ïðåäñòàâèì ìàòðèöû â áëî÷íîì âèäå:






A1,1 A1,2
B1,1 B1,2
C1,1 C1,2
A=
, B=
, C=
,
A2,1 A2,2
B2,1 B2,2
C2,1 C2,2
3



àëãîðèòìà Øòðàññåíà

ãäå Ai,j , Bi,j , Ci,j ∈ Qn/2×n/2 . Òîãäà Ci,j = Ai,1 B1,j + Ai,2 B2,j . Îïðåäåëèì ìàòðèöû
P1 := (A1,1 + A2,2 )(B1,1 + B2,2 ),
P2 := (A2,1 + A2,2 )B1,1 ,
P3 := A1,1 (B1,2 − B2,2 ),
P4 := A2,2 (B2,1 − B1,1 ),
P5 := (A1,1 + A1,2 )B2,2 ,
P6 := (A2,1 − A1,1 )(B1,1 + B1,2 ),
P7 := (A1,2 − A2,2 )(B2,1 + B2,2 ).

Íåïîñðåäñòâåííî ìîæíî ïðîâåðèòü, ÷òî
C1,1 = P1 + P4 − P5 + P7 ,
C1,2 = P3 + P5 ,
C2,1 = P2 + P4 ,
C2,2 = P1 − P2 + P3 + P6 .

Òàêèì îáðàçîì, äëÿ ïåðåìíîæåíèÿ äâóõ ìàòðèö ðàçìåðà n × n òðåáóåòñÿ
7 óìíîæåíèé è

18 ñëîæåíèé ìàòðèö ðàçìåðà n2 × n2 . Ñëîæåíèå âûïîëíÿåòñÿ çà O n2 , ïîýòîìó ïîëó÷àåòñÿ
ñëåäóþùàÿ ðåêóððåíòà:
n

T (n) = 7T
+ O n2 .
2
56

Àëãåáðà è òåîðèÿ ÷èñåë

Åå ðåøåíèå: T (n) = Θ nlog2 7 . log2 7 ≈ 2.807 < 3, ïîýòîìó àëãîðèòì Øòðàññåíà àñèìïòîòè÷åñêè áûñòðåå îáû÷íîãî óìíîæåíèÿ.

Áûñòðîå âîçâåäåíèå â ñòåïåíü
Ïóñòü íóæíî âû÷èñëèòü ak . Ìîæíî ïðîñòî n ðàç ïåðåìíîæèòü a, íî ìîæíî ñäåëàòü
ýòî è áûñòðåå. Ðàññìîòðèì n â äâîè÷íîì ïðåäñòàâëåíèè:
n=

k
X


xi 2i = x0 + 2 x1 + 2(. . . ) ,

i=0

ãäå k = blog nc. Òàê êàê (a ) = a2s , òî åñòåñòâåííûì îáðàçîì âîçíèêàåò èäåÿ ñëåäóþùåãî
àëãîðèòìà: ïóñòü b0 = axk = a, bj = axk−j (bj−1 )2 , 1 ≤ j ≤ k. Ïî èíäóêöèè íåñëîæíî
ïîêàçàòü, ÷òî
s 2

Pk

bj = a

i=k−j

xi 2i+j−k

.

Ñëåäîâàòåëüíî, bk = an , è äëÿ åãî âû÷èñëåíèÿ òðåáóåòñÿ íå áîëüøå 2blog nc óìíîæåíèé
(ñþäà âõîäÿò è âîçâåäåíèÿ â êâàäðàò).
 ðàáîòå òåîðåòèêî-÷èñëîâûõ àëãîðèòìîâ ÷àñòî íóæíî óìåòü âîçâîäèòü íåêîòîðîå
÷èñëî â ñòåïåíü ïî íåêîòîðîìó ìîäóëþ n. Ïðè÷¼ì õî÷åòñÿ äåëàòü ýòî çà ïîëèíîìèàëüíîå
âðåìÿ. Íà ïåðâîì ñåìèíàðå ìû êàñàëèñü àëãîðèòìà áûñòðîãî âîçâåäåíèÿ â ñòåïåíü. Íàïîìíþ îñíîâíûå ìîìåíòû. Ïóñòü ìû õîòèì âû÷èñëèòü am . Äëÿ ýòîãî ïðåäñòàâèì ÷èñëî m
â äâîè÷íîé ñèñòåìå ñ÷èñëåíèÿ: m = (mk mk−1 . . . m0 )2 = mk ·2k +mk−1 ·2k−1 +. . .+m1 ·2+m0 ,
ãäå mi ∈ {0, 1}. Òîãäà
am = a((...((mk ·2+mk−1 )·2+mk−2 )·2...)·2+m1 )·2+m0 = ((. . . (((amk )2 · amk−1 )2 . . .)2 · am1 )2 · am0 .

Òîãäà ïîñëåäîâàòåëüíîñòü äåéñòâèé ñëåäóþùàÿ: èçíà÷àëüíî ó íàñ òåêóùåå ÷èñëî ðàâíî a
(÷òî ñîîòâåòñòâóåò ÷èñëó amk = a) è i = k; çàòåì ìû âîçâîäèì òåêóùåå ÷èñëî â êâàäðàò
è åñëè mi−1 = 1, òî äîìíîæàåì ðåçóëüòàò íà a, à åñëè mi = 0, òî îñòàâëÿåì êàê åñòü;
óìåíüùàåì ñ÷¼ò÷èê: i := i − 1. Ïðè òàêîì ïîäõîäå ïðîèñõîäèò blog2 mc + η(m) − 1 óìíîæåíèé ïðè âû÷èñëåíèè am , ãäå η(m)  êîëè÷åñòâî åäèíèö â äâîè÷íîé çàïèñè m. Ïîñêîëüêó
η(m) 6 log2 m + 1, òî ñëîæíîñòü áûñòðîãî âîçâåäåíèÿ åñòü O(log m).
Áûñòðîå âîçâåäåíèå â ñòåïåíü ïî ìîäóëþ n îñíîâàíî íà òîé æå ñàìîé èäåå, íî òåïåðü
ïîñëå êàæäîãî óìíîæåíèÿ íóæíî åù¼ äåëèòü ðåçóëüòàò íà n, ÷òîáû íàéòè îñòàòîê ïî
ìîäóëþ n. Àëãîðèòì ïðèâåä¼í íèæå.
1: procedure Modular-Exponentiation(a, m, n)
2:
c←0
3:
d←1
4:
ïóñòü (mk mk−1 . . . m0 )2  äâîè÷íàÿ çàïèñü ÷èñëà m
5:
for i ← k
0 do
6:
c ← 2c

downto

57

Àëãåáðà è òåîðèÿ ÷èñåë
7:
8:
9:
10:
11:
12:
13:
14:

d ← (d · d) mod n
if bi = 1 then
c←c+1
c ← (d · a) mod n

end if
end for
return d
end procedure

Åñëè a, m è n èìåþò äâîè÷íóþ çàïèñü äëèíû íå áîëåå β , òî ÷èñëî àðèôìåòè÷åñêèõ îïåðàöèé åñòü O(β), à ÷èñëî áèòîâûõ  O(β 3 ).
Íåòðóäíî âèäåòü, ÷òî áûñòðîå âîçâåäåíèå â ñòåïåíü íå ÿâëÿåòñÿ îïòèìàëüíûì: âîçâåñòè ÷èñëî â ñòåïåíü 54 ìîæíî, ïðîèçâåäÿ 7 óìíîæåíèé:
a2 = a · a,

a4 = a2 · a2 ,

a18 = a16 · a2 ,

a8 = a4 · a4 ,

a36 = a18 · a18 ,

a16 = a8 · a8
a54 = a36 · a18

Åñòåñòâåííûé âîïðîñ î ìèíèìàëüíîì êîëè÷åñòâå óìíîæåíèé, íåîáõîäèìûõ äëÿ âîçâåäåíèÿ â ñòåïåíü n, ïðèâîäèò ê èçó÷åíèþ àääèòèâíûõ öåïî÷åê.

Àääèòèâíàÿ öåïî÷êà

Îïðåäåëåíèå 3.41.
÷èñëà n  ïîñëåäîâàòåëüíîñòü 1 = a0 , a1 , . . . ak
òàêàÿ, ÷òî ëþáîå ai , êðîìå íóëåâîãî, âûðàæàåòñÿ êàê ñóììà äâóõ ïðåäûäóùèõ ýëåìåíòîâ
(âîçìîæíî, îäèíàêîâûõ) ïîñëåäîâàòåëüíîñòè:
∀i ∈ [1; k] ∃j, l < i

ai = aj + al

Ïî àääèòèâíîé öåïî÷êå ìîæíî ïîñòðîèòü ïîñëåäîâàòåëüíîñòü (i1 , j1 ), . . . (ik , jk ), â êîòîðîé
jr 6 ir < r. ×èñëî k íàçûâàåòñÿ
.

äëèíîé àääèòèâíîé öåïî÷êè

Îïðåäåëåíèå 3.42. Îïðåäåëèì l(n) êàê äëèíó êðàò÷àéøåé àääèòèâíîé öåïî÷êè ÷èñëà
n.

Èç êîððåêòíîñòè àëãîðèòìà áûñòðîãî óìíîæåíèÿ ñëåäóåò, ÷òî l(n) 6 blog2 nc + η(n)
è l(n) = O(log n). Íåòðóäíî çàìåòèòü òàêæå, ÷òî l(n) > blog2 nc. Òî÷íàÿ ôîðìóëà l(n)
îñòàåòñÿ íåèçâåñòíîé, ðàâíî èñòèííîñòü óòâåðæäåíèÿ l(2n − 1) = l(n) + n − 1 (ãèïîòåçà
Áðàóýðà-Øîëüöà). Èçâåñòíî, îäíàêî, ÷òî l(n) íå ìîíîòîííàÿ ôóíêöèÿ, íàïðèìåð, íåâåðíî,
÷òî l(2n) > l(n) äëÿ âñåõ n: äëÿ n = 375494703 èìååì 34 = l(2n) < l(n) = 35 (ñì. [8]).
Äîñòàòî÷íî òî÷íóþ îöåíêó ñâåðõó ìîæíî ïîëó÷èòü ñ ïîìîùüþ ñëåäóþùåãî óòâåðæäåíèÿ:

Òåîðåìà 3.43 (Brauer, 1939).

íåðàâåíñòâî:

Äëÿ ëþáîãî íàòóðàëüíîãî k

l(n) 6

58



1
log2 n + 2k
1+
k

> 1

âûïîëíåíî ñëåäóþùåå

Àëãåáðà è òåîðèÿ ÷èñåë
Äîêàçàòåëüñòâî. Ïî çàäàííîìó k ìû ÿâíî ïîñòðîèì àääèòèâíóþ öåïî÷êó ÷èñëà n
è ïîêàæåì, ÷òî åå äëèíà îãðàíè÷åíà ïðàâîé ÷àñòüþ íåðàâåíñòâà â ôîðìóëèðîâêå òåîðåìû.
Ïóñòü m = 2k , à
log2k m+1
X
dt−i mi
n=
i=0

 m-è÷íîå ïðåäñòàâëåíèå ÷èñëà n. Ðàññìîòðèì ïîñëåäîâàòåëüíîñòü
1, . . . m − 1,
2

2

d0 , 2d0 , . . . md0 , md0 + d1 , 2(md0 + d1 ), . . . m d0 + md1 , m d0 + md1 + d2 , . . .

Ìû ñíà÷àëà ïîëó÷àåì âñåâîçìîæíûå çíà÷åíèÿ di , à çàòåì, èõ èñïîëüçóÿ, ¾âûðàùèâàåì¿
÷èñëî â m-è÷íîé çàïèñè, íà÷èíàÿ ñ ìëàäøåãî ðàçðÿäà. Ôîðìàëüíî ãîâîðÿ, ïóñòü (al ) è
(bl )  ïîñëåäîâàòåëüíîñòè, çàäàííûå ôîðìóëàìè


ai = i, i ∈ [1; m],
b(k+1)i+j = 2j mi d0 + . . . + di m , i ∈ [0; t], j ∈ [1; k + 1]
Íåòðóäíî âèäåòü, ÷òî ïîñëåäîâàòåëüíîñòü a1 , . . . am , b1 , . . . ÿâëÿåòñÿ àääèòèâíîé öåïî÷êîé:
òàê êàê âñå di ëåæàò â [1; m − 1], òî ëèáî bi = 2bi−1 , ëèáî bi = bi−1 + aj äëÿ íåêîòîðîãî j , à
b1 = 2aj . Î÷åâèäíî òàêæå, ÷òî ïîñëåäíèé ýëåìåíò ïîñëåäîâàòåëüíîñòè ðàâåí 2tk d0 + . . . +
dt = n, à äëèíà âñåé ïîñëåäîâàòåëüíîñòè ðàâíà ñóììå äëèí ïîñëåäîâàòåëüíñîòåé (ai ) è
(bi ), òî åñòü íå ïðåâûøàåò
k+1
blog2 nc
m − 1 + (k + 1)t = 2k − 1 + (k + 1)(blog2k nc + 1) = 2k + (k + 1)blog2k nc 6 2k +
k

Åñëè â òåîðåìå âûøå ïðèíÿòü k = log log n + 1, òî ìîæíî ïîëó÷èòü ([6])


1
2 log 2
l(n) 6 log2 n 1 +
+
log log n
(log n)1−log 2

Ïîëèíîìèàëüíîñòü àëãîðèòìà Ãàóññà

àëãîðèòì Ãàóññà

Ðàññìîòðèì ñëåäóþùèé
, ïîçâîëÿþùèé ïðèâåñòè ïðÿìîóãîëüíóþ
ìàòðèöó ê ñòóïåí÷àòîìó âèäó.
1: procedure Gauss((Aij ) ∈ Matn×m (Q))
2:
for t = 0; t 6 m; t+ = 1 do k = min{i ∈ [t + 1; n]|Ait 6= 0}
3:
for i = 0; i 6 n; i+ = 1 do ïîìåíÿòü ìåñòàìè Ati è Aki
4:
5:
6:
7:
8:

end for
for i = t + 1; i 6 m; i+ = 1 do
for j = 1; j 6 n; j+ = 1 do Aij − = Atj ·
end for
end for

Ait
Att

59

Àëãåáðà è òåîðèÿ ÷èñåë
9:
10:
11:

end for
return (Aij )
end procedure

Ïîêà ïðåäïîëàãàåì, ÷òî ðàöèîíàëüíûå äðîáè íå ñîêðàùàþòñÿ.
Âñïîìíèì, ÷òî àðèôìåòè÷åñêèå îïåðàöèè íà äðîáÿõ îïðåäåëåíû òàê:
a
c
ad + bc
a c
ac
+ =
,
· =
b
d
bd
b d
bd
Ìû íå ïðîèçâîäèì ñîêðàùåíèÿ, à âñå |Aij | 6 h, ïîýòîìó ïîñëå âû÷èòàíèÿ ïåðâîé ñòðî÷êè
èç îñòàëüíûõ ÷èñëèòåëè è çíàìåíàòåëè ýëåìåíòîâ âî âñåõ ñòðî÷êàõ, íà÷èíàÿ ñî âòîðîé,
áóäóò îãðàíè÷èâàòüñÿ ïî ìîäóëþ h2 . Ñëåäóþùàÿ èòåðàöèÿ, â õîäå êîòîðîé âòîðàÿ [ïîñëå ñîîòâåòñòâóþùåé ïåðåñòàíîâêè] ñòðî÷êà âû÷èòàåòñÿ èç âñåõ ïîñëåäóþùèõ, óâåëè÷èò
ìàêñèìàëüíî âîçìîæíóþ ñòåïåíü íà 2. Âîîáùå èç âûøåïðèâåäåííîé ôîðìóëû î÷åâèäíî,
÷òî åñëè |a|, |b|, |c|, |d| 6 x, òî ÷èñëèòåëè è çíàìåíàòåëè ñóììû è ïðîèçâåäåíèÿ äðîáåé
îãðàíè÷åíû ñâåðõó x2 . Ýòî îçíà÷àåò, ÷òî êàæäàÿ ñëåäóþùàÿ èòåðàöèÿ àëãîðèòìà Ãàóññà
óäâàèâàåò ñòåïåíü h, êîòîðîé îãðàíè÷èâàþòñÿ ÷èñëèòåëè è çíàìåíàòåëè äðîáåé. ßñíî, ÷òî
íåíóëåâûõ ñòðî÷åê áóäåò ïîëó÷àòüñÿ íå áîëåå rkA, îñòàëüíûå ñòðî÷êè áóäóò ëèíåéíûìè
êîìáèíàöèÿìè ïåðâûõ rkA ñòðîê è çàíóëÿòñÿ ïðè ïðåîáðàçîâàíèÿõ ñòðî÷åê. ÑîîòâåòrkA
ñòâåííî, ÷èñëèòåëè è çíàìåíàòåëè äðîáåé îãðàíè÷åíû h2 ; èçíà÷àëüíî rkA 6 min(m, n)
min(m,n)
è ìàêñèìàëüíî âîçìîæíîå îãðàíè÷åíèå åñòü h2
.  ÷àñòíîñòè, äëÿ êâàäðàòíûõ ìàòn
ðèö ïîëó÷àåòñÿ îãðàíè÷åíèå h2 .
Èòàê, âûøå ïîëó÷åíî ñëèøêîì áûñòðîðàñòóùåå îãðàíè÷åíèå, â ÷àñòíîñòè, íå ÿâëÿþùååñÿ ïîëèíîìèàëüíûì ïî n. Ïîýòîìó äëÿ áîëüøèõ n è ïðèõîäèòñÿ èñïîëüçîâàòü àëãîðèòì Åâêëèäà äëÿ ñîêðàùåíèÿ äðîáåé: ïîñëå ñðàçó æå âû÷èñëåíèÿ pij , qij ìû âû÷èñëÿåì
gcd(pij , qij ) è äåëèì íà íèõ.
Ñíà÷àëà äîêàæåì, ÷òî âñå ÷èñëèòåëè è çíàìåíàòåëè áóäóò îãðàíè÷åíû ïî ìîäóëþ
íåêîòîðûì ïîëèíîìîì îò m, n, h. Ïóñòü âåäóùèå ýëåìåíòû íàõîäÿòñÿ íà ãëàâíîé äèàãîíàëè [â ïðîòèâíîì ñëó÷àå ïåðåñòàâèì ñîîòâåñòâóþùèì îáðàçîì ñòðîêè]. Ïóñòü (Aij (k) ) 
ìàòðèöà, ïîëó÷åííàÿ èç A íà k-îé èòåðàöèè, D(k) = (Aij )i,j∈[1;k]  ïîäìàòðèöà A [îðèãè(k)
íàëüíîé], ñîñòîÿùàÿ èç ïåðåñå÷åíèé ïåðâûõ k ñòðîê è k ñòîëáöîâ, Dij
(äëÿ i, j ∈ [k+1; n])
 ìàòðèöà, ñîñòàâëåííàÿ èç ïåðåñå÷åíèé ñòðîê ñ íîìåðàìè 1, 2, . . . , k, i è ñòîëáöîâ ñ íîìåðàìè 1, 2, . . . , k, j , òîãäà
(k)

(k)

Aij =

det Dij
det D(k)

(k)
Äåéñòâèòåëüíî, ïîñëå ïðèìåíåíèÿ àëãîðèòìà Ãàóññà ê Dij
ïîëó÷èì íà äèàãîíàëè ýëåìåí(n)
(n)
(n)
òû A11 , . . . , Akk , Aij (k) : äèàãîíàëüíûå ýëåìåíòû Aii áóäóò ïîëó÷åíû íà i-îé èòåðàöèè
è íå áóäóò âïîñëåäñòâèè, â ïîñëåäíåé æå ñòðî÷êå åäèíñòâåííûì íåíóëåâûì ýëåìåíòîì
áóäåò Aij (k) ; çàìåòèì, ÷òî, ïðèìåíÿÿ àëãîðèòì Ãàóññà ê D(k) , ïîëó÷èì íà äèàãîíàëè

60

Àëãåáðà è òåîðèÿ ÷èñåë
A11 , . . . , Akk , à äåòåðìèíàíò òðåóãîëüíîé ìàòðèöû ðàâåí ïðîèçâåäåíèþ äèàãîíàëüíûõ
ýëåìåíòîâ.
(k)
è D(k)  ïîäìàòðèöû îðèãèíàëüíîé ìàòðèöû,
 äîêàçàííîé âûøå ôîðìóëå Dij
ïîýòîìó èõ äåòåðìèíàíòû îãðàíè÷åíû ñâåðõó k!hk , äëÿ çàïèñè ÷èñëèòåëåé è çíàìåíàòåëåé
ïîòðåáóåòñÿ íå áîëåå
(n)

(n)

log(k!hk ) 6 log(N !hN ) = log(N !) + N log(h) 6 N (log(N ) + log(h))

ñèìâîëîâ, ãäå N = max(m, n), ÷òî åñòü ïîëèíîì îò m, n, log(h). Ñîîòâåòñòâåííî, åñëè
eij = pij , òî pij 6 det D(k) , à qij 6 det D(k)  îòíîøåíèå äåòåðìèíàíòîâ ìîæåò áûòü êàê
A
ij
qij
íåñîêðàòèìîé, òàê è ñîêðàòèìîé äðîáüþ.
Òåïåðü îñòàëîñü îöåíèòü ñëîæíîñòü, ìû ïðåäúÿâèì Î-àñèìïòîòèêó ñëîæíîñòè.
pij
Ñðàçó çàìåèòèì, ÷òî ìû ñ÷èòàåì Aij = qij
, à ðàç íà êàæäîé èòåðàöèè ïðîèñõîäèò
pij
pij
ptj pit qtt
7→

·
,
qij
qij
qtj qit ptt

òî
(

pij 7→ pij qtj qit ptt − qij ptj pit ptt
qij 7→ qij qtj qit ptt

Èç äîêàçàííîãî âûøå ñëåäóåò, ÷òî âñå ÷èñëèòåëè è çíàìåíàòåëè ìîæíî îãðàíè÷èòü ñâåðõó
N (log(N ) + log(h)) ñèìâîëîâ, ãäå N = max(m, n): ïîñëå àðèôìåòè÷åñêèõ îïåðàöèé, ïðåîáðàçóþùèõ Aij , ÷èñëèòåëè è çíàìåíàòåëè ïðèâîäÿòñÿ. Ïîýòîìó ïðîèçâåäåíèå ÷åòûðåõ
÷èñåë äëèíû íå áîëåå N (log(N )+log(h)) èìååò ñëîæíîñòü O(N 2 log2 (N h)) áèòîâûõ îïåðàöèé: ïåðåìíîæàþòñÿ äâå ïàðû ÷èñåë äëèíû N log(N h), à çàòåì  äâà ïîëó÷åííûõ ÷èñëà,
èìåþùèå äëèíó 2N log(N h) [êâàäðàò ÷èñëà äëèíû N log(N h) èìååò äëèíó 2N log(N h)].
Ñëîæåíèå äâóõ ÷èñåë äëèíû O(N log(N h)) èìååò ñëîæíîñòü N log(N h). Ñîîòâåòñòâåííî,
âû÷èñëåíèå íåïðèâåäåííûõ ÷èñëèòåëåé è çíàìåíàòåëåé èìååò ñëîæíîñòü O(N 2 log2 (N h)).
Ñëîæíîñòü ïðèâåäåíèÿ îöåíèì ãðóáî: àëãîðèòì Åâêëèäà äëÿ ÷èñåë äëèíû N log(N h) âûïîëíÿåòñÿ çà O(N log(N h)) àðèôìåòè÷åñêèõ îïåðàöèé, à êàæäàÿ îïåðàöèÿ, áóäü òî ñëîæåíèå, âû÷èòàíèå èëè äåëåíèå ñ îñòàòêîì, íå ñëîæíåå O(N 2 log2 (N h)) [êâàäðàòè÷íîå âðåìÿ
çàíèìàåò äåëåíèå ñ îñòàòêîì], ïîýòîìó ïðèâåäåíèå ìîæíî ñäåëàòü çà O(N 3 log3 (N h)) áèòîâûõ îïåðàöèé.
Òàêèå îïåðàöèè ïðîâîäÿòñÿ ñ Aij äëÿ i ∈ [t + 1; m] è j ∈ [1; n], òî åñòü íàä (m − t)n
ýëåìåíòàìè
íà t-îé èòåðàöèè, à t ïðîáåãàåò îò 0 äî rkA, òî åñòü òàêèõ îïåðàöèé íå áîëåå
P
n t∈[0;m] (m−t) 6 21 nm2 . Òàêèì îáðàçîì, àðèôìåòèêà â àëãîðèòìå Ãàóññà èìååò áèòîâóþ
ñëîæíîñòü O(nm2 N 3 log3 (N h)) îïåðàöèé.
Ïîñëåäíèé øàã  îöåíêà âêëàäà âûáîðà íóæíîé ñòðî÷êè è ïåðåñòàíîâêà ñòðî÷åê;
ñòðî÷êó ìîæíî âûáðàòü çà O(m) áèòîâûõ îïåðàöèé [íàäî ïðîñìîòðåòü m − t ýëåìåíòîâ è âûáðàòü íåíóëåâîé ëèáî çàÿâèòü, ÷òî òàêèõ íå áûâàåò], à ïåðåñòàâèòü ñòðî÷êè
ìîæíî çà O(nN log(N h)) áèòîâûõ îïåðàöèé [âåäü ïîìåíÿòü ìåñòàìè Ati è Aki ìîæíî çà
61

Àëãåáðà è òåîðèÿ ÷èñåë
O(N log(N h)) áèòîâûõ îïåðàöèé, ïîìåíÿâ áèòû ìåñòàìè]. Òàêèì îáðàçîì, áèòîâàÿ ñëîæíîñòü àëãîðèòìà Ãàóññà ðàâíà

3 
O nm2 max(m, n)3 log h + log max(m, n)

Çàìåòèì, ÷òî àðèôìåòè÷åñêèõ îïåðàöèé c ýëåìåíòàìè ìàòðèöû âñåãî O(nm2 ).
Íåòðóäíî âèäåòü, ÷òî ñèñòåìà ëèíåéíûõ óðàâíåíèé Ax = b íàä Q òàêæå ìîæåò áûòü
ðåøåíà çà ïîëèíîìèàëüíîå âðåìÿ. Ïðèìåíÿÿ ìåòîä Ãàóññà ïîñëåäîâàòåëüíî ê ñòðî÷êàì è
ñòîîáàì ìàòðèöû A, ìû ìîæåì ïîëó÷èòü, ÷òî


d1

 

1
1 ∗ ∗ ∗ ∗


d2
0

∗ 1

0   1 ∗ ∗ ∗ 

.

.
∗ ∗ 1
A

1


.
=

,

 
 

∗ ∗ ∗ 1
 



0
1 ∗
..


.
0
∗ ∗ ∗ ∗ 1
1
dn
|
{z
} |
{z
}
∇A

∆A

ïîýòîìó ñèñòåìà óðàâíåíèé Ax = b ýêâèâàëåíòíà ñèñòåìå ëèíåéíûõ óðàâíåíèé
diag(d1 , . . . dn )(∇A )−1 y = ∆−1
A b

Åñëè di 6= 0, òî ((∇A )−1 y)i =

(∆−1
b)i
A
.
di

 ïðîòèâíîì ñëó÷àå ïîëó÷èì, ÷òî

6= 0, òî ðåøåíèÿ ñèñòåìû íåò;
• åñëè
• åñëè
= 0, òî i-ûé ñòîëáåö ìàòðèöû ∇A x ÿâëÿåòñÿ îäíèì èç áàçèñíûõ
âåêòîðîâ ïðîñòðàíñòâà ðåøåíèé ñèñòåìû Ax = 0, ïîýòîìó äëÿ ÷àñòíîãî ðåøåíèÿ Ax = b áåðåì ((∇A )−1 x)i = 0, à i-ûé ñòîëáåö ìàòðèöû ∇A x äîáàâëÿåì ê
ìíîæåñòâó X .
(∆−1
A b)i
(∆−1
A b)i

 èòîãå èìååì ïîëó÷èì ÷àñòíîå ðåøåíèå è áàçèñ ïðîñòðàíñòâà ðåøåíèé ñèñòåìû Ax = 0,
÷òî äàåò ïîëíîå îïèñàíèå ðåøåíèé ñèñòåìû.

Ïðîñòåéøèå êðèïòîãðàôè÷åñêèå ïðîòîêîëû
Ïîëèíîìèàëüíîãî àëãîðèòìà ôàêòîðèçàöèè íàòóðàëüíîãî ÷èñëà ïîêà íå ñóùåñòâóåò,
è íà ýòîé ¾ñëîæíîñòè¿ ôàêòîðèçàöèè îñíîâàíû ïðîñòåéøèå êðèïîòãðàôè÷åñêèå ñõåìû.
Ïîñòàíîâêà âîïðîñà òàêîâà: äâå ñòîðîíû, óñëîâíî Àëèñà è Áîá, äîëæíû äîãîâîðèòüñÿ
î ïðîòîêîëå îáìåíà èíôîðìàöèåé (çàêîäèðîâàííîé öåëûì ÷èñëîì), êîòîðûé áûë áû êàê
ìîæíî áîëåå êðèïòîóñòîé÷èâ, òî åñòü ÷òîáû äåøèôðîâêà ñîîáùåíèé ñòîðîííèì ó÷àñòíèêîì, óñëîâíî Åâîé, èëè èìèòàöèÿ åé îäíîé èç ñòîðîí (òî åñòü Åâà ìîæåò ïåðåïèñûâàòüñÿ
ñ Àëèñîé ¾îò èìåíè Áîáà¿) áûëà êàê ìîæíî áîëåå òÿæåëîé.
62

Àëãåáðà è òåîðèÿ ÷èñåë
 ñèììåòðè÷åñêîé êðèïòîñèñòåìå Àëèñà è Áîá èñïîëüçóþò îäèí è òîò æå êëþ÷ äëÿ
øèôðîâàíèÿ è äåøèôðîâàíèÿ ñîîáùåíèÿ, ïåðåäàâàòü ýòîò êëþ÷ îíè ìîãóò ëèøü ïî îòêðûòîìó êàíàëó. Äèôôè è Õåëëìàí ïðåäëîæèëè äîñòàòî÷íî êðèïîòóñòîé÷èâóþ ñèììåòðè÷åñêóþ ñõåìó.

(1) Àëèñà è Áîá âûáèðàþò ïðîñòîå ÷èñëî p è ïåðâîîáðàçíûé êîðåíü g ïî ýòîìó
ìîäóëþ. ×èñëà p è g ïóáëèêóþòñÿ â îòêðûòûé äîñòóï. Ñîîáùåíèÿ, êîòîðûìè
Àëèñà è Áîá áóäóò îáìåíèâàòüñÿ â îáå ñòîðîíû, áóäóò èìåòü âèä g mn mod p.
(2) Àëèñà ñåêðåòíî âûáèðàåò ÷èñëî n è
ïîñûëàåò Áîáó g n
mod p.
(3) Áîá ñåêðåòíî âûáèðàåò ÷èñëî m è ïî îòêðûòîìó êàíàëó ïîñûëàåò Àëèñå g m
mod p.
(4) Áîá äåøèôðóåò ñîîáùåíèå Àëèñû s = (g n )m mod p, Àëèñà äåøèôðóåò ñîîáùåíèå Áîáà s = (g m )n mod p.

ïî îòêðûòîìó êàíàëó

Ïîñêîëüêó g m è g n ïîñûëàþòñÿ ïî îòêðûòîìó êàíàëó, îíè âèäíû âñåì. ×òîáû âû÷èñëèòü ñîîáùåíèå Àëèñû è Áîáà, Åâà äîëæíà ïî g m mod p è g n mod p, íå çíàÿ m è n,
âû÷èñëèòü g mn mod p. Âû÷èñëåíèå äèñêðåòíîãî ëîãàðèôìà ïîêà íåëüçÿ îñóùåñòâèòü ïîëèíîìèàëüíîé ïðîöåäóðîé. Ôîðìàëüíî, âïðî÷åì, âû÷èñëåíèå g mn mod p ïî g m mod p è
g n mod p  íå âû÷èñëåíèå äèñêðåòíîãî ëîãàðèôìà, ýêâèâàëåíòíîñòü ýòèõ ïðîöåäóð ïîêà
íå óñòàíîâëåíà.
Åñëè Åâà ìîæåò íå òîëüêî ïîäñëóøèâàòü, íî è âûñòóïàòü àêòèâíûì àãåíòîì, òî îíà
ìîæåò, íàïðèìåð, ïåðåõâàòûâàòü è ïîäìåíÿòü ñîîáùåíèÿ  íàïðèìåð, ïîñëàòü Áîáó îò
èìåíè Àëèñû íåêîòîðîå g t mod p è ïîëó÷èòü ñåêðåòíûé êëþ÷ g tm mod p äëÿ äåøèôðîâêè ñîîáùåíèé Áîáà. Âîçíèêàåò ïðîáëåìà èäåíòèôèêàöèè ó÷àñòíèêîâ êîììóíèêàöèè.
Îíà ìîæåò áûòü ðåøåíà àñèììåòðè÷íîé êðèïòîãðàôè÷åñêîé ñõåìîé, íàïðèìåð, RSA.

(1) Áîá âûáèðàåò äâà ïðîñòûõ ÷èñëà p 6= q è âû÷èñëÿåò n = pq . Ñîîáùåíèÿ, êîòîðûå
Áîá áóäåò ïðèíèìàòü, áóäóò îñòàòêàìè ïî ìîäóëþ n.
(2) Îí æå âûáèðàåò
 d (îí èçâåñòåí òîëüêî åìó).
(3) Áîá âû÷èñëÿåò
e = d−1 mod (p − 1)(q − 1).
(4)  îòêðûòûé äîñòóï ïóáëèêóþòñÿ ÷èñëà {e, n}.
(5) Åñëè Àëèñà õî÷åò ïîñëàòü ñåêðåòíîå ñîîáùåíèå x Áîáó, òî îíà ïðîâîäèò øèôðîâêó x → e(x) = xe mod n è ïîñûëàåò e(x) ïî îòêðûòîìó êàíàëó.
(6) Áîá äåøèôðóåò ñîîáùåíèå ñ ïîìîùüþ ñåêðåòíîãî êëþ÷à d(e(x)) → (e(x))d mod n =
x mod n.

ñåêðåòíûé êëþ÷
îòêðûòûé êëþ÷

63

Àëãåáðà è òåîðèÿ ÷èñåë

n, e
Alice

x

Bob
n = pq , d

xe mod n
def

e = d−1 mod ϕ(n)

Íà êàðòèíêå îòêðûòûå n, e  îòêðûòàÿ èíôîðìàöèÿ Áîáà: êàæäûé àäðåñàò ãåíåðèðóåò ñâîé ìîäóëü è ñâîé îòêðûòûé êëþ÷. Òàêèì îáðàçîì, â ñõåìå RSA ¾íåõîðîøèé ÷åëîâåê¿
Åâà íå ñìîæåò ïåðåõâàòûâàòü è ïîäìåíÿòü ñîîáùåíèÿ Áîáó, ïîñêîëüêó äëÿ ¾ïðîõîæäåíèÿ
àâòîðèçàöèè¿ åé íóæíî íàéòè äåëèòåëè n. Êðèïòîóñòîé÷èâîñòü ñõåìû îñíîâàíà íà ïðåäïîëàãàåìîé ñëîæíîñòè çàäà÷è ôàêòîðèçàöèè: äëÿ âû÷èñëåíèÿ ϕ(n) êàê ïðàâèëî íóæíî
ðàçëîæåíèå n íà ìíîæèòåëè [ïîêà íå ÿâèòñÿ èíîãî ñïîñîáà], à ïîëèíîìèàëüíîãî àëãîðèòìà ôàêòîðèçàöèè ïîêà íå ñóùåñòâóåò.

Çàäà÷à 1.

(a) Ïóñòü îòêðûòûé êëþ÷ Áîáà (25, 2021). Îí õî÷åò ïîñëàòü ñîîáùåíèå
(÷èñëî) çà ñâîåé ïîäïèñüþ.  êàêóþ ñòåïåíü îí äîëæåí åãî âîçâåñòè?
(b) Äîêàæèòå èëè îïðîâåðãíèòå, ÷òî êîäèðîâàíèå â ñèñòåìå RSA M → M e mod n
áèåêòèâíî îòîáðàæàåò îòðåçîê {0, . . . , n − 1} â ñåáÿ.
(a) Íåîáõîäèìî âû÷èñëèòü d. Ñàìî ÷èñëî ïðèäåòñÿ ðàçëàãàòü íà
ìíîæèòåëè êàêèì-íèáóäü
äóðàöêèì ñïîñîáîì, íàïðèìåð, ïåðåáèðàÿ äåëèòåëè,

íå ïðåâûøàþùèå d 2021e = 44. Âûéäåò, ÷òî 2021 = 43 · 47. Îñòàëîñü ðåøèòü
òîëüêî 25d = 42 · 46; íàäî áóäåò ðàñïèñàòü ðàñøèðåííûé àëãîðèòì Åâêëèäà äëÿ
25 è 42 · 46 = 1932:

Ðåøåíèå.

1932 = 25 · 77 + 7
25 = 7 · 3 + 4
7=4·1+3
4=3·1+1
3 = 1 · 3,

òîãäà
1 = 4 − 3 · 1 = 4 − (7 − 4 · 1) · 1 = 4 · 2 − 7 · 1 =
= (25 − 7 · 3) · 2 − 7 · 1 = 25 · 2 − 7 · 7 = 25 · 2 − (1932 − 25 · 77) · 7 = 25 · (2 + 7 · 77) − 1932 · 7,

è d = 2 + 7 · 77 = 541.

(b) Çäåñü âàæíî, ÷òî â ñèñòåìå RSA (e, ϕ(n)) = 1, â ïðîòèâíîì ñëó÷àå êîíòðïðèìåð ñòðîèòñÿ òðèâèàëüíî. Ðàçóìååòñÿ, îòîáðàæåíèå M → M e mod n ÿâëÿåòñÿ

64

Àëãåáðà è òåîðèÿ ÷èñåë
áèåêöèåé îòðåçîêà {0, . . . , n − 1} â ñåáÿ: îòîáðàæåíèå M → M d mod n ÿâëÿåòñÿ
îáðàòíûì äëÿ äàííîãî îòîáðàæåíèÿ,
• äëÿ x ∈ {0, . . . , n − 1} âçàèìíî ïðîñòûõ ñ n âñå âåðíî ñðàçó, òàê êàê xde = x
mod n â ñèëó òåîðåìû Ýéëåðà;
• äëÿ x = pk ∈ {0, . . . , n − 1} âñå ïîëó÷àåòñÿ â ñèëó òîãî, ÷òî de = 1 mod (p −
1), è xde = x mod n â ñèëó ìàëîé òåîðåìû Ôåðìà;
• ñëó÷àé x = qk ∈ {0, . . . , n − 1} ðàçáèðàåòñÿ àíàëîãè÷íî.


Äèñêðåòíîå ïðåîáðàçîâàíèå Ôóðüå
Íåòðóäíî âèäåòü, ÷òî îáû÷íîå ïåðåìíîæåíèå ìíîãî÷ëåíîâ a0 + . . . + an xn è b0 + . . . +
bn x ïîòðåáóåò âûïîëíåíèÿ Θ(n2 ) àðèôìåòè÷åñêèõ îïåðàöèé. Äåéñòâèòåëüíî, ïîñêîëüêó
n

(a0 + . . . + an xn )(b0 + . . . + bn xn ) =

2n
X
k=0

xk

k
X

ai bk−i ,

i=0

P
à âû÷èñëåíèå ki=0 ai bk−i òðåáóåò 2k − 1 àðèôìåòè÷åñêèõ îïåðàöèé, òî è ñàìà ñëîæíîñòü
îáû÷íîãî ïåðåìíîæåíèÿ ìíîãî÷ëåíîâ êâàäðàòè÷íà ïî n. Ìåæäó òåì, åñëè èçâåñòíû çíà÷åíèÿ ìíîãî÷ëåíîâ a0 +. . .+an xn è b0 +. . .+bn xn â 2n+2 òî÷êàõ ξ1 , . . . x2n+2 , òî çíà÷åíèÿ
(a0 + . . . + an xn )(b0 + . . . + bn xn ) â òî÷êàõ ξ1 , . . . x2n+2 ìîæíî âû÷èñëèòü çà O(n). Åñëè
óäàñòñÿ íàéòè ¾õîðîøèé¿ íàáîð òî÷åê {ξi } è íàéòè ñóáêâàäðàòè÷íóþ (òî åñòü èìåþùóþ
ñëîæíîñòü o(n2 )) ïðîöåäóðó âû÷èñëåíèÿ íàáîðà çíà÷åíèé ìíîãî÷ëåíà â ýòèõ òî÷êàõ (à
òàêæå âîññòàíîâëåíèÿ ìíîãî÷ëåíà ïî íàáîðó çíà÷åíèé), òî ìîæíî ïîñòðîèòü ïðîöåäóðó,
ïåðåìíîæàþùóþ ìíîãî÷ëåíû ñòåïåíè íå áîëåå n çà ñóáêâàäðàòè÷íîå âðåìÿ. Ìû ïîêàæåì,
÷òî â êà÷åñòâå íàáîðà ÷èñåë ìîæíî âçÿòü e2πp/q , à ñîîòâåòñòâóþùàÿ ïðîöåäóðà ïåðåõîäà
ê íàáîðó çíà÷åíèé èìååò ñëîæíîñòü O(n log n).

Äèñêðåòíîå ïðåîáðàçîâàíèå Ôóðüå

Îïðåäåëåíèå 3.44.
 ýòî îòîáðàæåíèå Fn : Cn →
Cn , ñòàâÿùåå â ñîîòâåòñòâèå âåêòîðó a = (a0 , a1 , . . . , an−1 )> âåêòîð y = (y0 , y1 , . . . , yn−1 )> ,
ãäå yj = f (ωnj ), j = 0, 1, . . . , n − 1 è
f (x) =

n−1
X

aj xj .

j=0

Èíûìè ñëîâàìè, ìû ïîñòàâèëè â ñîîòâåòñòâèå âåêòîðó êîýôôèöèåíòîâ ìíîãî÷ëåíà f âåêòîð çíà÷åíèé ïîëèíîìà f â êîðíÿõ ñòåïåíè n èç åäèíèöû. Âåêòîð y íàçûâàåòñÿ äèñêðåòíûì ïðåîáðàçîâàíèåì Ôóðüå âåêòîðà a è îáîçíà÷àåòñÿ y = DF Tn (a).
Ïðåîáðàçîâàíèå Ôóðüå ÿâëÿåòñÿ ÷åðåçâû÷àéíî âàæíûì èíñòðóìåíòîì â ãàðìîíè÷åñêîì àíàëèçå, ïðè èññëåäîâàíèè ñâîéñòâ ôóíêöèé è äðóãèõ ïðåîáðàçîâàíèé, à òàêæå
óðàâíåíèé â ÷àñòíûõ ïðîèçâîäíûõ. Îêàçûâàåòñÿ, åãî ìîæíî îïðåäåëèòü íå òîëüêî íàä
65

Àëãåáðà è òåîðèÿ ÷èñåë
ôóíêöèÿìè, íî è íàä äèñêðåòíûìè îáúåêòàìè, ò.å. âåêòîðàìè. Äèñêðåòíîå ïðåîáðàçîâàíèå Ôóðüå  åñòåñòâåííûé àíàëîã íåïðåðûâíîãî ïðåîáðàçîâàíèÿ. Íà ñàìîì äåëå, â
êà÷åñòâå ìíîæèòåëåé, íà êîòîðûå óìíîæàþòñÿ ýëåìåíòû aj , ìîæíî âûáðàòü íå òîëüêî
2πi
e n jk , íî è ÷èñëà âèäà ωnjk , ãäå ωn  êîðåíü n-é ñòåïåíè èç 1. Êàê íåñëîæíî âèäåòü, â
2πi
ïîëå êîìïëåêñíûõ ÷èñåë C âñå âîçìîæíûå ωn èìåþò âèä e n s , ãäå s âçàèìíî ïðîñòî ñ n.
2πi
Åñëè íå îãîâîðåíî îáðàòíîå, ìû áóäåì èñïîëüçîâàòü èìåííî ωn = e n . Çàìåòèì òàêæå,
m
n
÷òî åñëè m | n, òî ωn ÿâëÿåòñÿ êîðíåì èç åäèíèöû ñòåïåíè m .
Ïðèâåäåì íåêîòîðûå ñâîéñòâà ÄÏÔ.
(1) Íåïîñðåäñòâåííî èç îïðåäåëåíèÿ ñëåäóåò, ÷òî Fn  ëèíåéíîå ïðåîáðàçîâàíèå ñ
ìàòðèöåé
n−1
Ξ := ωnkj k,j=0 .
(2) Fn îáðàòèìî, è îáðàòíîå ïðåîáðàçîâàíèå Fn−1 ÿâëÿåòñÿ ëèíåéíûì ñ ìàòðèöåé
n−1
1
Ξ−1 =
ω −kj k,j=0 ,
n n
ò.ê. âñå ñòîëáöû (è ñòðîêè) ìàòðèöû Ξ îðòîãîíàëüíû:
(
X kj sj ∗ n−1
X k−s j
n,
k = s,
ωn (ωn ) =
(ωn ) = (ωnk−s )n −1
= 0, k =
6 s.
k−s
j
j=0
ωn

−1

(3) Äëÿ a ∈ C îïðåäåëèì ïîëèíîì Pa (z) := j=0 aj z j , òîãäà åãî çíà÷åíèÿ â êîðíÿõ
èç åäèíèöû äàþòñÿ ÄÏÔ: Fn [a]k = Pa (ωnk ).
Pn−1

n

Îòìåòèì, ÷òî ïðåîáðàçîâàíèå Ôóðüå ìîæíî îïðåäåëèòü â ïðîèçâîëüíîì ãèëüáåðòîâîì ïðîñòðàíñòâå êàê ïåðåõîä ê êîîðäèíàòàì â íåêîòîðîì îðòîãîíàëüíîì áàçèñå (ñðàâíèòå ñî ñâîéñòâàìè 1) è 2).
Èç ïóíêòà 3) ìîæíî ïîëó÷èòü åùå âàæíîå ñâîéñòâî. Ðàññìîòðèì äâà ìíîãî÷ëåíà Pa
è Pb ñòåïåíè na − 1 è nb − 1, ñîîòâåòñòâåííî. Èõ ïðîèçâåäåíèå èìååò âèä
deg Pa +deg Pb

(Pa Pb )(z) =

X

j
X

j=0

`=0

a` bj−` z j =:

ëèíåéíîé ñâåðòêîé

X

cj z j = Pc (z).

j

Âåêòîð c ∈ C
íàçûâàåòñÿ
âåêòîðîâ a è b: c = a⊗b. Ñâåðòêà âîçíèêàåò â àíàëèçå ñèãíàëîâ è èçîáðàæåíèé ïðè èñïîëüçîâàíèè
: åñëè
u  âõîäíîé äèñêðåòèçîâàííûé ñèãíàë, f  âåêòîð, îïèñûâàþùèé èìïóëüñíóþ õàðàêòåðèñòèêó ôèëüòðà (ýòî ìîæåò áûòü ñãëàæèâàþùèé ôèëüòð, ôèëüòð íèçêèõ èëè âûñîêèõ
÷àñòîò, äèñêðåòíàÿ ïðîèçâîäíàÿ è ò.ä.), òî u⊗f  ðåçóëüòàò ïðèìåíåíèÿ ôèëüòðà f ê ñèãíàëó u. Òàê êàê ÄÏÔ îò âåêòîðà åñòü çíà÷åíèÿ ñîîòâåòñòâóþùåãî ïîëèíîìà â êîðíÿõ èç
åäèíèöû, òî ñâåðòêå âåêòîðîâ äîëæíî ñîîòâåòñòâîâàòü ïðîèçâåäåíèå èõ ÄÏÔ. Íàïðèìåð,
na +nb −1

66

ëèíåéíûõ ôèëüòðîâ

Àëãåáðà è òåîðèÿ ÷èñåë
ïóñòü a, b ∈ Cn . Òîãäà
Pa⊗b (ωnk ) = Pa (ωnk )Pb (ωnk ) = Fn [a]k Fn [b]k .

Êàçàëîñü áû, òîãäà îáðàòíîå ïðåîáðàçîâàíèå îò ïîýëåìåíòíîãî ïðîèçâåäåíèÿ Fn [a]Fn [b]
äîëæíî äàòü ñâåðòêó a ⊗ b. Îäíàêî íàäî ó÷èòûâàòü, ÷òî ñòåïåíü ïðîèçâåäåíèÿ ïîëèíîìîâ
âîçðàñòàåò, à ωnn = 1, ïîýòîìó
Pa⊗b (ωnk ) =

2n−2
X

ωnkj

j=0

j
X

2n−2
X

a` bj−` =

ωnkj mod n

j=0

`=0

j
X

a` bj−` =

`=0

n−1
X n−1
X

a` bj−` mod n ωnkj = Pd (ωnk ),

j=0 `=0

öèêëè÷åñêîé ñâåðòêîé a è b. Òàêèì îáðàçîì, ÄÏÔ îò öèêëè÷åñêîé
ñâåðòêè äâóõ âåêòîðîâ ðàâíÿåòñÿ ïîýëåìåíòíîìó ïðîèçâåäåíèþ èõ ÄÏÔ.  ÷àñòíîñòè,

ãäå d ∈ C íàçûâàåòñÿ
n

÷òîáû ìîæíî áûëî âîññòàíîâèòü êîýôôèöèåíòû ïðîèçâåäåíèÿ ïîëèíîìîâ P (z)Q(z) ñ ïîìîùüþ ÄÏÔ â CN , íåîáõîäèìî âûáðàòü N ≥ deg P + deg Q + 1.
Íàêîíåö, ÄÏÔ ìîæíî îïðåäåëèòü íå òîëüêî íàä êîìïëåêñíûìè ÷èñëàìè, íî è íàä
ïðîèçâîëüíûì ïîëåì. Òàê, ïóñòü F  íåêîòîðîå ïîëå, à ξ ∈ F èìååò ïîðÿäîê n. Òîãäà
ïðÿìîå ïðåîáðàçîâàíèå çàäàåòñÿ ôîðìóëîé
Fn [a]k :=

n−1
X

ξ kj aj ,

j=0

à îáðàòíîå
Fn−1 [a]k :=

n−1
1 X −kj
ξ
aj .
n j=0

Ìîæíî, êîíå÷íî, îïðåäåëèòü ÄÏÔ è íàä êîëüöîì, íî òîãäà îíî íå îáÿçàòåëüíî áóäåò
îáðàòèìî.

Áûñòðîå ïðåîáðàçîâàíèå Ôóðüå. Òåïåðü ïîñòðîèì àëãîðèòì, îñóùåñòâëÿþùèé
äèñêðåòíîå ïðåîáðàçîâàíèå Ôóðüå çà ñóáêâàäðàòè÷íîå ïî n âðåìÿ. Áóäåì ñ÷èòàòü, ÷òî
âõîäíîé âåêòîð åñòü (f0 , . . . fn−1 ), ãäå n  ýòî ñòåïåíü äâîéêè. Èäåÿ áûñòðîãî ïðåîáðàçîâàíèÿ Ôóðüå (ÁÏÔ) çàêëþ÷àåòñÿ â ñëåäóþùåì:
(14)

Fn [a]k :=

n−1
X
j=0

=

n/2−1

ωnjk aj =

X

n/2−1

ωn2jk a2j +

j=0
n/2−1

X

X

j=0

ωn(2j+1)k a2j+1 =

j=0

n/2−1
jk
ωn/2
a0j + ωnk

X

 
 
jk
ωn/2
a1j = Fn/2 a0 k mod n/2 + ωnk Fn/2 a1 k mod n/2 ,

j=0

67

Àëãåáðà è òåîðèÿ ÷èñåë
1
ãäå âåêòîð a0 ñîñòîèò èç ÷åòíûõ êîìïîíåíò
  a  èç íå÷åòíûõ. Îòñþäà âèäíî,
  a, à âåêòîð
÷òî ìîæíî ðåêóðñèâíî âû÷èñëèòü Fn/2 a0 è Fn/2 a1 , à çàòåì íàéòè Fn [a] ïî ôîðìóëàì
 
 
 
 
n
Fn [a]k = Fn/2 a0 k + ωnk Fn/2 a1 k , Fn [a]k+n/2 = Fn/2 a0 k − ωnk Fn/2 a1 k , 0 ≤ k < .
2
Òàêèì îáðàçîì ìû ïîëó÷àåì àëãîðèòì, êîòîðûé áóäåì íàçûâàòü
:
1: procedure FFT(f0 , . . . fn−1 )
2:
if n = 1 then
3:
return f0

áûñòðîå ïðåîáðàçî-

âàíèå Ôóðüå
4:
5:
6:
7:
8:

9:
10:
11:
12:

end if

(x0 , . . . , x n2 −1 ) = FFT(f0 , f2 , . . . fn−2 )
(y0 , . . . , y n2 −1 ) = FFT(f1 , f3 , . . . fn−1 )
for i = 1; i 6 n; i+ = 1 do
)yj
rj = xj + exp( 2πj
n
rj+ n2 = xj − exp( 2πj
)yj
n

end for
return (r0 , . . . rn−1 )
end procedure

Íåòðóäíî èíäóêöèåé ïî K ïîêàçàòü, ÷òî FFT(f0 , . . . f2K −1 ) âû÷èñëÿåò âåêòîð (r0 , . . . r2k −1 ),
ãäå
K


2X
−1
2πik
rj =
aj exp
2K
k=0
Áàçà î÷åâèäíî âåðíà, òàê êàê FFT(f0 ) = f0 . Òåïåðü ïðîâåðèì øàã èíäóêöèè. Ïîñêîëüêó
P n2 −1
P n2 −1
kj
kj
ïî ïðåäïîëîæåíèþ xj = k=0
f2k ωn/2
, yj = k=0
f2k+1 ωn/2
, òî
n −1
2

rj =

X
k=0

n −1
2

kj
f2k ωn/2

+

ωnj

X
k=0

n −1
2

kj
f2k+1 ωn/2

=

X
k=0

n −1
2

f2k ωn2kj

+

ωnj

X
k=0

f2k+1 ωn2kj =

n−1
X

fk ωnkj .

k=0

Èòàê, áûñòðîå ïðåîáðàçîâàíèå Ôóðüå ðàáîòàåò êîððåêòíî. Ðàáîòàÿ íà âõîäíîì ìàññèâå
äëèíû n, FFT âûçûâàåò ñåáÿ äâàæäû è ðàáîòàåò ñ ìàññèâàìè äëèíû n2 , à çàòåì àìàëüãàìèðóåò ðåçóëüòàò çà O(n). Âðåìÿ ðàáîòû òàêîãî àëãîðèòìà óäîâëåòâîðÿåò ðåêóððåíòíîé
îöåíêå
n
T (n) ≤ 2T
+ Θ(M n),
2
ãäå M  îöåíêà âðåìåíè âûïîëíåíèÿ îäíîé àðèôìåòè÷åñêîé îïåðàöèè íàä êîìïëåêñíûìè
÷èñëàìè (ëèáî â ïîëå F äëÿ áîëåå îáùåãî ñëó÷àÿ). Ïî òåîðåìå Àêêðà-Áàççè ïîëó÷àåì,
÷òî
T (n) = Θ(M n log n),
68

Àëãåáðà è òåîðèÿ ÷èñåë
÷òî ãîðàçäî ëó÷øå âðåìåíè ðàáîòû íàèâíîãî àëãîðèòìà: Θ(M n2 ).

Ïðèìåð 3.45. Ðàññìîòðèì ìíîãî÷ëåíû P (z) = 3z + 2 è Q(z) = z 2 + 1. Òðåáóåòñÿ íàéòè

èõ ïðîèçâåäåíèå ñ ïîìîùüþ ÁÏÔ. Ò.ê. deg P + deg Q = 3, òî ìîæíî âûáðàòü n = 4. Òîãäà
âåêòîð êîýôôèöèåíòîâ P ðàâåí a = (2, 3, 0, 0), è êîýôôèöèåíòû Q  b = (1, 0, 1, 0). ω4 = i,
ω2 = −1. Ïðèìåíèì àëãîðèòì ÁÏÔ:
 
 
(15)
F2 a0 = F2 [(2, 0)] = (2 + 0, 2 − 0) = (2, 0), F2 a1 = F2 [(3, 0)] = (3, 0),
(16)
(17)

F4 [a] = (2 + 3i0 , 0 + 0i, 2 − 3i0 , 0 − 0i) = (5, 0, −1, 0),
 
 
F2 b0 = F2 [(1, 1)] = (1 + 1, 1 − 1) = (2, 0), F2 b1 = F2 [(0, 0)] = (0, 0),

(18)

F4 [b] = (2, 0, 2, 0).

Îñòàëîñü íàó÷èòüñÿ ïåðåõîäèòü îò çíà÷åíèé ìíîãî÷ëåíà â êîìïëåêñíûõ êîðíÿõ èç
åäèíèöû ê åãî êîýôôèöèåíòàì, òî åñòü ïîñ÷èòàòü îáðàòíîå ÄÏÔ. Îáðàòíîå ïðåîáðàçîâàíèå âû÷èñëÿåòñÿ òàê æå, òîëüêî ωn íóæíî çàìåíèòü íà ωn−1 , è ðàçäåëèòü èòîãîâûé
ðåçóëüòàò íà n. Äèñêðåòíîå ïðåîáðàçîâàíèå Ôóðüå ìîæíî çàïèñàòü â ìàòðè÷íîì âèäå:


1
1
1
1
...
1



 1
ωn
ωn2
ωn3
...
ωnn−1 
y0
 a0

2(n−1) 
2
4
6

 y1  1
ωn
ωn
ωn
...
ωn
  a1 



3(n−1)  
3
6
9
 . =
. ,
1
ω
ω
ω
.
.
.
ω


n
n
n
n
.
 .  
 .. 

..
..
..
..
..

 ..
 an−1
.
.
yn−1
.
.
.
.
2(n−1)
3(n−1)
(n−1)(n−1)
n−1
1 ωn
ωn
ωn
. . . ωn
òî åñòü y = Vn a, ãäå ýëåìåíò ìàòðèöû Vn ñ èíäåêñàìè (k, j) ðàâåí ωnkj (ïðè j, k =
0, 1, . . . , n − 1). Îáðàòíàÿ îïåðàöèÿ a = DF Tn−1 (y) ñîñòîèò â óìíîæåíèè ìàòðèöû Vn−1
(îáðàòíîé ê Vn ) ñëåâà íà y .

Òåîðåìà 3.46.

Ýëåìåíò ñ èíäåêñàìè (j, k) ìàòðèöû V ðàâåí
−1
n

−kj
ωn
n

.

Ïîêàæåì, ÷òî ñîñòàâëåííàÿ èç òàêèõ ýëåìåíòîâ ìàòðèöà Vn−1
óäîâëåòâîðÿåò òðåáîâàíèþ Vn−1 Vn = In , ãäå In  åäèíè÷íàÿ ìàòðèöà ðàçìåðà n × n.
Ïî îïðåäåëåíèþ, (j, j 0 )-é ýëåìåíò ïðîèçâåäåíèÿ Vn−1 Vn åñòü
Äîêàçàòåëüñòâî.

n−1
X
 −1 
Vn Vn jj 0 =
k=0



ωn−kj
n



0

(ωnkj ) =

n−1
1 X k(j 0 −j)
ωn
.
n
k=0

Ïî ëåììå î ñëîæåíèè ïîñëåäíÿÿ ñóììà ðàâíà 1, åñëè j = j 0 , è ðàâíà 0 ïðè j 6= j 0 .
Äåéñòâèòåëüíî, −(n − 1) 6 j 0 − j 6 n − 1, òàê ÷òî j − j 0 íå äåëèòñÿ íà n ïðè j 6= j 0 .

69

Powered by TCPDF (www.tcpdf.org)

Àëãåáðà è òåîðèÿ ÷èñåë
Çíàÿ îáðàòíóþ ìàòðèöó Vn−1 , ìû ìîæåì íàéòè a = DF Tn−1 (y) ïî ôîðìóëå
aj =

n−1
1X
yk ωn−kj
n
k=0

äëÿ j = 0, 1, . . . , n − 1. Ìû âèäèì, ÷òî äëÿ âû÷èñëåíèÿ îáðàòíîãî ïðåîáðàçîâàíèÿ Ôóðüå
ìîæíî ïðèìåíèòü òîò æå àëãîðèòì ÁÏÔ, ïîìåíÿâ â í¼ì a è y ìåñòàìè, çàìåíèâ ωn íà ωn−1
è ðàçäåëèâ êàæäûé ýëåìåíò ðåçóëüòàòà íà n. Îòñþäà ñëåäóåò, ÷òî DF Tn−1 òàêæå ìîæíî
âû÷èñëèòü çà O(n log n).

Áûñòðîå ïåðåìíîæåíèå ìíîãî÷ëåíîâ
Òåïåðü ìû ìîæåì îïèñàòü ïîñëåäîâàòåëüíîñòü äåéñòâèé äëÿ ïåðåìíîæåíèÿ ìíîãî÷ëåíîâ, çàäàííûõ ñâîèìè êîýôôèöèåíòàìè. Äëÿ ýòîãî ìû ñíà÷àëà ïåðåéä¼ì ê çíà÷åíèÿì
â êîìïëåêñíûõ êîðíÿõ èç åäèíèöû çà âðåìÿ Θ(n log n); çàòåì ïåðåìíîæèì çíà÷åíèÿ, ïîëó÷èâ çíà÷åíèÿ ìíîãî÷ëåíà-ïðîèçâåäåíèÿ â êîìïëåêñíûõ êîðíÿõ èç åäèíèöû çà âðåìÿ
Θ(n); ïîñëå ýòîãî ïðèìåíèì ê ïîëó÷åííûì çíà÷åíèÿì îáðàòíîå ïðåîáðàçîâàíèå Ôóðüå
çà âðåìÿ Θ(n log n). Îáùåå âðåìÿ ðàáîòû ñîñòàâèò Θ(n log n). ×òîáû íàéòè ñâåðòêó äâóõ
s
âåêòîðîâ a, b ∈ Cn , íóæíî äîïîëíèòü
èõ 0 äî a0 , b0 ∈ C2 , ãäå s = dlog ne + 1, òàê ÷òî

2n ≤ 2s < 4n, è âû÷èñëèòü F2−1
F2s [a0 ]F2s [b0 ] .
s

Ïðèìåð 3.47. Ðàññìîòðèì ìíîãî÷ëåíû P (z) = 3z + 2 è Q(z) = z 2 + 1. Òðåáóåòñÿ íàéòè

èõ ïðîèçâåäåíèå ñ ïîìîùüþ ÁÏÔ. Ò.ê. deg P + deg Q = 3, òî ìîæíî âûáðàòü n = 4. Òîãäà
âåêòîð êîýôôèöèåíòîâ P ðàâåí a = (2, 3, 0, 0), è êîýôôèöèåíòû Q  b = (1, 0, 1, 0). ω4 = i,
ω2 = −1. Ïðèìåíèì àëãîðèòì ÁÏÔ:
 
 
(19)
F2 a0 = F2 [(2, 0)] = (2 + 0, 2 − 0) = (2, 0), F2 a1 = F2 [(3, 0)] = (3, 0),
(20)
(21)

F4 [a] = (2 + 3i0 , 0 + 0i, 2 − 3i0 , 0 − 0i) = (5, 0, −1, 0),
 
 
F2 b0 = F2 [(1, 1)] = (1 + 1, 1 − 1) = (2, 0), F2 b1 = F2 [(0, 0)] = (0, 0),

(22)

F4 [b] = (2, 0, 2, 0).

Òåïåðü íàéäåì îáðàòíîå ïðåîáðàçîâàíèå îò F4 [a]F4 [b] = (10, 0, −2, 0):
(23)

2F2−1 [(10, −2)] = (8, 12), 2F2−1 [(0, 0)] = (0, 0),

4F4−1 [(10, 0, −2, 0)] = (8 + 0i0 , 12 + 0i−1 , 8 − 0i0 , 12 − 0i−1 ) = (8, 12, 8, 12).


Òàêèì îáðàçîì, F4−1 F4 [a]F4 [b] = (2, 3, 2, 3), è P (z)Q(z) = 2 + 3z + 2z 2 + 3z 3 .

(24)

Îñíîâàííûé íà ÁÏÔ àëãîðèòì áûñòðîãî ïåðåìíîæåíèÿ ìíîãî÷ëåíîâ èìååò çàáàâíîå
ïðèìåíåíèå â çàäà÷å ïîèñêå ïîäñòðîêè ñ äæîêåðîì (ñèìâîëîì ¾?¿, íà ìåñòå êîòîðîãî
ìîæåò áûòü ëþáàÿ áóêâà). Åñëè è ñòðîêà, è ïîäñòðîêà çàðàíåå èçâåñòíû, òî ñóùåñòâóåò
ëèíåéíûé ïî ñóììå äëèí ñòðîê àëãîðèòì Êíóòà-Ìîððèñà-Ïðàòòà. Åãî æå, îäíàêî, íå
70

Àëãåáðà è òåîðèÿ ÷èñåë
ïîëó÷àåòñÿ ñòîëü æå òðèâèàëüíî îáîáùèòü íà ñëó÷àé ñ äæîêåðàìè, âîïðîñ ñóùåñòâîâàíèÿ
ëèíåéíîãî àëãîðèòìà â ýòîì ñëó÷àå äî ñèõ ïîð îòêðûò.
Èäåÿ ÁÏÔ-àëãîðèòìà ïîèñêà ïîäñòðîê ñëåäóþùàÿ. Íóæíî íàéòè ïîäñòðîêó (îáðàçåö) p0 , . . . , pm−1 â ñòðîêå (òåêñòå) t0 , . . . , tn−1 , çäåñü pi , tj  ýòî ñèìâîëû íåêîòîðîãî àëôàâèòà. Ãîâîðÿò, ÷òî ïîäñòðîêà âõîäèò ñ i-é ïîçèöèè, åñëè pj = ti+j , j = 0, . . . , m − 1.
Åñëè ñ÷èòàòü áóêâû àëôàâèòà ðàçëè÷íûìè öåëûìè ÷èñëàìè, òî âõîæäåíèå
ïîäñòðîêè
Pm−1
ñ i-é ïîçèöèè ýêâèâàëåíòíî îáíóëåíèþ ñóììû êâàäðàòîâ: Bi =
(p

ti+j )2 =
j
j=0
Pm−1 2
2
j=0 (pj −2pj ti+j +ti+j ) = 0, à âû÷èñëåíèå ìàññèâà ÷èñåë {Bi , i = 0, . . . , n−m} ïîçâîëÿåò
îïðåäåëèòü âñå ìåñòà âõîæäåíèÿ ïîäñòðîêè â òåêñò.
m−1
P 2
Ñ ïîìîùüþ ÁÏÔ ìîæíî ïîñòðîèòü O(n log m)-ïðîöåäóðó. Ñóììà S =
pj ïðèñóòj=0

ñòâóåò êàê ñëàãàåìîå â êàæäîì Bi è âû÷èñëÿåòñÿ çà O(n) øàãîâ.
Ðàññìîòðèì äâà ïîëèíîìà ñòåïåíè íå âûøå n: T (x) = tn−1 xn−1 + · · · + t1 x + t0 , P (x) =
n−1
p0 x
+ · · · + pm−1 Èõ ïðîèçâåäåíèå ìîæíî âû÷èñëèòü ñ ïîìîùüþ ÁÏÔ çà O(n log n).
Ïîñìîòðèì íà êîýôôèöèåíò èõ ïðîèçâåäåíèÿ C(x) ïðè xm−1+i (0 ≤ i ≤ n − m) :

cm−1+i = p0 ti + p1 ti+1 + p2 ti+2 + . . . + pm−2 tm−2+i + pm−1 tm−1+i =

m−1
X

pj tj+i

j=0

Êàê âèäèì, ýòî îäíî èç ñëàãàåìûõ äëÿ Bi . Òàêèì îáðàçîì, àëãîðèòì äëÿ ïîäñ÷åòà âñåõ
Bi òàêîâ. Ñíà÷àëà âû÷èñëÿåì çà O(n log n) øàãîâ êîýôôèöèåíòû ïðîèçâåäåíèÿ C(x) óêàçàíûõ ìíîãî÷ëåíîâ. Äàëåå çà ìàêñèìóì O(n) øàãîâ âû÷èñëÿåì ñóììó êâàäðàòîâ S è çà
m−1
P 2
O(n) øàãîâ ñ÷èòàåì ñóììó ïåðâûõ m êâàäðàòîâ ti , ò. å. H =
tj . Äàëåå âû÷èñëÿåì
j=0

B0 = S − 2 · cm−1 + H è B1 = S − 2 · cm +

m−1
P

t2j+1

= B1 + 2 · cm−1 − 2 · cm − t21 + t2m .

j=0

Äëÿ ýòîãî íàì ïîòðåáóåòñÿ O(1) îïåðàöèé. Àíàëîãè÷íî ïîëó÷èì Bi = Bi−1 +2(cm−2+i −
cm−1+i ) − t2i−1 + t2m−1+i , ò. å. äëÿ ïîëó÷åíèÿ êàæäîãî ñëåäóþùåãî ÷ëåíà òðåáóåòñÿ O(1)
îïåðàöèé. Òàêèì îáðàçîì, äëÿ âû÷èñëåíèÿ âñåõ ÷ëåíîâ ïîòðåáóåòñÿ åùå O(n) îïåðàöèé.
Òàêèì îáðàçîì, âåñü àëãîðèòì àñèìïòîòè÷åñêè òðåáóåò O(n log n) îïåðàöèé.
Òó æå èäåþ äëÿ ïðîâåðêè âõîæäåíèÿ ïîäñòðîêè ìîæíî èñïîëüçîâàòü, åñëè ðàçðåøàåòñÿ èñïîëüçîâàòü ñèìâîë äæîêåðà, ¾?¿. Òîãäà â òåõ æå îáîçíà÷åíèÿõ íóæíî âû÷èñëèòü
m−1
m−1
P
P 3
ìàññèâ {Ai , i = 0, . . . , n−m}, ãäå Ai =
pj ti+j (ti+j −pj )2 =
(pj ti+j −2p2j t2i+j +pj t3i+j ).
j=0

j=0

Ïðè ýòîì ñèìâîëó ¾?¿ ñîîòâåòñòâóåò ÷èñëî 0, à âñå îñòàëüíûå ñèìâîëû êîäèðóþòñÿ íåíóëåâûìè ÷èñëàìè. Òîãäà íåòðóäíî çàìåòèòü, ÷òî îáíóëÿòüñÿ ïîëó÷åííàÿ ñóììà áóäåò òîãäà
è òîëüêî òîãäà, êîãäà ïîäñòðîêà âõîäèò â ñëîâî ñ äàííîé ïîçèöèè. Âû÷èñëåíèå îòäåëüíûõ
71

Àëãåáðà è òåîðèÿ ÷èñåë
÷àñòåé ñóììû ìîæíî ïðîèçâåñòè ïðè ïîìîùè ÁÏÔ, åñëè ïðàâèëüíî ïîäîáðàòü ìíîãî÷ëåíû (ïî àíàëîãèè ñ ïðåäûäóùèì ñëó÷àåì, òî åñòü òàê, ÷òîáû êîýôôèöèåíòû ïðîèçâåäåíèÿ
ïîëó÷åííûõ ìíîãî÷ëåíîâ âûðàæàëèñü ÷åðåç îòäåëüíûå ÷àñòè ñóììû Ai ).

Îáîáùåíèÿ è íåêîòîðûå ïðèìåíåíèÿ ÁÏÔ. Òåïåðü ïîêàæåì, êàê ïîëó÷èòü

ÁÏÔ äëÿ ïðîèçâîëüíîãî n.
Fn [a]k =

n−1
X

ωnkj aj =

j=0

n−1
X

2

ωnk

/2

ωn−(k−j)

2

/2

2

ωnj

/2

2

aj = ωnk

j=0

/2

n−1
X

2

ωn−(k−j)

/2



2

ωnj

/2


aj ,

j=0

in−1
h
in−1 h 2
2
,
è ωnj /2 aj
ïîýòîìó äëÿ âû÷èñëåíèÿ Fn [a] äîñòàòî÷íî íàéòè ñâåðòêó âåêòîðîâ ωn−j /2
j=0

j=0

÷òî ìîæíî ñäåëàòü çà O(M n log n).
Ïîìèìî îäíîìåðíûõ ñâåðòîê, áûâàåò íåîáõîäèìî âû÷èñëÿòü òàêæå è ìíîãîìåðíûå 
íàïðèìåð, äëÿ ïðèìåíåíèÿ ôèëüòðîâ ê èçîáðàæåíèÿì. Ýòî, îïÿòü æå, ìîæíî äåëàòü ñ
ïîìîùüþ ÄÏÔ, êîòîðîå â ìíîãîìåðíîì ñëó÷àå îïðåäåëÿåòñÿ ñëåäóþùèì îáðàçîì: ïóñòü
a ∈ Cn1 ×n2 ×···×nd , òîãäà
nd −1

n1 −1

F [a]k1 ,k2 ,...,kd :=

X

ωnj11k1 · · ·

j1 =0

X

ωnjddkd aj1 ,...,jd .

jd =0

Êàê âèäíî, ÄÏÔ â äàííîì ñëó÷àå ïîëó÷àåòñÿ êàê ïîñëåäîâàòåëüíîå ïðèìåíåíèå îäíîìåðíîãî ïðåîáðàçîâàíèÿ ïî âñåì èçìåðåíèÿì (ïîðÿäîê íå âàæåí). Íî òîãäà, èñïîëüçóÿ
îäíîìåðíîå ÁÏÔ, åãî ìîæíî âû÷èñëèòü çà
!
d
d
X
X
X
n
O(ns log ns ) =
O(n log ns ) = O n
log ns = O(n log n)
ns
s=1
s=1
s
Q
àðèôìåòè÷åñêèõ îïåðàöèé, ãäå n := ds=1 ns  ðàçìåð âõîäà.
ÁÏÔ ìîæíî òàêæå ðàññìîòðåòü è íàä äðóãèì êîëüöîì R, êîòîðîå ìîæåò íå ñîäåðæàòü êîðíÿ èç åäèíèöû íåêîòîðîé ñòåïåíè âèäà 2k . Òîãäà ïîêàæåì, ÷òî P
çà âðåìÿ
j
O(n log n log log n) ìîæíî â êîëüöå R[x]/(xn +1) ïåðåìíîæèòü ìíîãî÷ëåíû f (x) = n
j=0 fj x
Pn
j
k
bn
c
è g(x) = j=0 gj x ñòåïåíè íå áîëåå n. Ñíîâà ïîëîæèì n = 2 , ââåäåì òàêæå m = 2 2 è
n/m m−1

fe(x, y) =

X X
i=0 j=0

n/m m−1

fmi+j xj y i ,

ge(x, y) =

X X

gmi+j xj y i ,

i=0 j=0

òîãäà f (x) = fe(x, xm ), g(x) = ge(x, xm ). Åñëè fege = e
h + qe(y n/m + 1), òî
fg = e
h(x, xm ) + qe(x, xm )(xn + 1) = e
h(x, xm ) mod xn + 1
e
h óäîáíî âû÷èñëÿòü êàê e
h mod (R[x]/(x2m + 1))[y]: ïîñêîëüêó ñòåïåíü e
h êàê ìíîãî÷ëåíà
e
ïî x ìåíüøå 2m, òî h mod (R[x]/(x2m + 1))[y] áóäåò ïî ôàêòó òåì æå ìíîãî÷ëåíîì,

72

Àëãåáðà è òåîðèÿ ÷èñåë
íî â êîëüöå R[x]/(x2m + 1) åñòü íóæíûé íàì êîðåíü èç åäèíèöû, ïîýòîìó ìû ìîæåì
ïðèìåíèòü ÁÏÔ: ïîñêîëüêó R[x]/(x2m +1 ñîäåðæèò ïðèìèòèâíûé êîðåíü ν ñòåïåíè 2n/m,
òî ν n/m = −1 è
(fe mod y n/m − 1)(e
g mod y n/m − 1) = e
h

mod y n/m − 1,

è ñâåðòêó ýòèõ ìíîãî÷ëåíîâ ìîæíî âû÷èñëèòü îáû÷íûì ÁÏÔ, íî äëÿ óìíîæåíèÿ êîýôôèöèåíòîâ fe è ge (ýëåìåíòîâ R[x]/(x2m + 1)) ðåêóðñèâíî èñïîëüçóåòñÿ ñàì àëãîðèòì.
Èòàê, ìû ïîëó÷èëè ñëåäóþùóþ ïðîöåäóðó ïåðåìíîæåíèÿ ìíîãî÷ëåíîâ f (x) è g(x)
ñòåïåíè íå áîëåå n = 2k .
1: procedure Modular-FFT-Convolution(f (x), g(x))
2:
if k 6 2 then
3:
return f (x)g(x) mod xn + 1
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:

14:
15:
16:

end if

k

m = 2b 2 c P
Pm−1
P
Pm−1
j i
j i
fe(x, y) = n/m
e(x, y) = n/m
i=0
j=0 fmi+j x y , g
i=0
j=0 gmi+j x y
if n/m = 2m then
η ← x mod x2m + 1

else

η ← x2 mod x2m + 1

end if

f ∗ = fe mod y n/m − 1, g ∗ = ge mod y n/m − 1
h∗ = FFT-Convolution-Mod(f ∗ , g ∗ )
âçÿòü e
h ∈ R[x, y] òàêîé, ÷òî h∗ = e
h mod x2m + 1
m
n
return h(x, x ) mod x + 1

end procedure

Çäåñü FFT-Convolution-Mod  ìîäèôèöèðîâàííîå óìíîæåíèå ìíîãî÷ëåíîâ, ãäå äëÿ
óìíîæåíèÿ êîýôôèöèåíòîâ èñïîëüçóåòñÿ ðåêóðñèâíî Modular-FFT. Èç ðàññóæäåíèé
âûøå ñëåäóåò êîððåêòíîñòü Modular-FFT-Convolution. Òåïåðü îöåíèì ñëîæíîñòü ýòîãî àëãîðèòìà. Ïóñòü T (k)  ñëîæíîñòü óìíîæåíèÿ ìíîãî÷ëåíîâ ñòåïåíè 2k . Ïðè âû÷èñëåíèè h∗ ïðîöåäóðà Modular-FFT-Convolution âû÷èñëÿåòñÿ íà ìíîãî÷ëåíàõ ñòåïåíè
k
k
íå áîëåå 2b 2 c+1 , ñòåïåíü h∗ êàê ìíîãî÷ëåíà îò y íå áîëåå 2d 2 e . Òàêèì îáðàçîì, ïîëó÷èì
ðåêêóðåíòó


 

k
k
k
T (k) 6 2d 2 e T b c + 1 + O 2k d e + 1
,
2
2
Îòñþäà ìîæíî âûâåñòè, ÷òî
T (k) 6 const · 2k k log k + O(2k k),

òî åñòü ñëîæíîñòü

FFT-Convolution-Mod

åñòü O(n log n log log n).
73

Àëãåáðà è òåîðèÿ ÷èñåë
Èñïîëüçóÿ êîíñòðóêöèþ âûøå, ÁÏÔ ìîæíî ïðèìåíèòü
äëÿ óìíîæåíèÿ áîëüøèõ ÷èP
ñåë. Ðàññìîòðèì äâà ÷èñëà â m-àðíîé çàïèñè: x = nj=0 aj mj = Pa (m), y = Pb (m). Òîãäà, ÷òîáû âû÷èñëèòü ïðîèçâåäåíèå xy , äîñòàòî÷íî íàéòè êîýôôèöèåíòû ïðîèçâåäåíèÿ
ïîëèíîìîâ Pa è Pb . Îñóùåñòâëÿÿ ÁÏÔ â ïîäõîäÿùåì êîëüöå Z/mZ, ãäå m èìååò âèä
m = 2s + 1, ìîæíî íàéòè ïðîèçâåäåíèå xy çà âðåìÿ O(n log n log log n). Ýòîò àëãîðèòì
íàçûâàåòñÿ
.
Ïðåîáðàçîâàíèå Ôóðüå ìîæíî òàêæå èñïîëüçîâàòü äëÿ àíàëèçà èëè ðåøåíèÿ ñèñòåì
ëèíåéíûõ óðàâíåíèé. Äåëî â òîì, ÷òî íåêîòîðûå îïåðàòîðû ñî ñëîæíîé ñòðóêòóðîé èìåþò
îòíîñèòåëüíî ïðîñòîé âèä â ïðîñòðàíñòâå ïðåîáðàçîâàíèÿ Ôóðüå. Íàïðèìåð, ðàññìîòðèì
ÑËÀÓ Cx = b ñ
C:


c0
cn−1
c1
 c1
c0
c2 

C=
. . . . . . . . . . . . . . . . . . ,
cn−1 cn−2
c0

àëãîðèòìîì Øåíõàãå-Øòðàññåíà
öèðêóëÿíòíîé ìàòðèöåé

ò.å. Ci,j = ci−j mod n . Íåñëîæíî âèäåòü, ÷òî Cx = c ⊗ x (öèêëè÷åñêàÿ ñâåðòêà), ò.å. öèðêóëÿíòû  ýòî ìàòðè÷íîå îïðåäåëåíèå öèêëè÷åñêîé ñâåðòêè. Îòñþäà ïîëó÷àåì, ÷òî
Fn [Cx] = ΞCx = Fn [c]Fn [x] = diag(Fn [c])Ξx.

Òàêèì îáðàçîì, â ïðîñòðàíñòâå ïðåîáðàçîâàíèÿ Ôóðüå îïåðàòîð èìååò äèàãîíàëüíóþ ìàòðèöó:
ΞCΞ−1 = diag(Fn [c]),
è óðàâíåíèå ïåðåïèñûâàåòñÿ êàê
diag(Fn [c])Fn [x] = Fn [b].

Ýòî ïîçâîëÿåò ðåøàòü ÑËÀÓ ñ öèðêóëÿíòíûìè ìàòðèöàìè çà O(n log n), òàê êàê


x = Fn−1 diag(Fn [c])−1 Fn [b] .
Åùå îäèí êëàññ ìàòðèö, ðàáîòó ñ êîòîðûìè ìîæåò óïðîñòèòü ïðåîáðàçîâàíèå Ôóðüå  ýòî ò¼ïëèöåâû ìàòðèöû. Ìàòðèöà A ÿâëÿåòñÿ
, åñëè Ai+1,j+1 =
Ai,j . Ïîêàæåì, êàê ìîæíî óìíîæàòü âåêòîð íà ò¼ïëèöåâó ìàòðèöó çà âðåìÿ O(n log n)
âìåñòî O(n2 ), êîòîðîå òðåáóåòñÿ ïðè îáû÷íîì óìíîæåíèè. Çàìåòèì, ÷òî ìàòðèöà


A AT
A :=
AT
A
öèðêóëÿíòíàÿ, ïîýòîìó
 n  T 
0
A x
A
=
.
x
Ax
À óìíîæåíèå íà öèðêóëÿíòíóþ ìàòðèöó äàåò ñâåðòêó, êîòîðóþ ìîæíî âû÷èñëèòü ñ ïîìîùüþ ÁÏÔ.

ìàòðèöåé Ò¼ïëèöà

74

Àëãåáðà è òåîðèÿ ÷èñåë

Ðåøåòî Ýðàòîñôåíà
Ïî àíàëîãèè ñ àñèìïòîòè÷åñêèì çàêîíîì ðàñïðåäåëåíèÿ ïðîñòûõ ÷èñåë ìîæíî ïîëó÷èòü, ÷òî åñëè pr  r-îå ïðîñòîå ÷èñëî, òî pr < 2r log r äëÿ âñåõ r > 2. Ïîýòîìó äëÿ
íàõîæäåíèÿ ïåðâûõ k ïðîñòûõ ÷èñåë îáû÷íî èñïîëüçóåòñÿ
: ìû çàïèñûâàåì ñïèñîê âñåõ öåëûõ ÷èñåë îò 1 x = 2r log r, çàòåì âû÷åðêèâàåì âñå √
÷åòíûå ÷èñëà,
âñå êðàòíûå 3, âñå êðàòíûå 5, è òàê äëÿ êàæäîãî ïðîñòîãî ìåíüøå,
÷åì x. Îñòàâøè√
åñÿ öåëûå ÷èñëà íå äåëÿòñÿ íà ïðîñòûå ÷èñëà, íå ïðåâûøàþùèå x è, ñëåäîâàòåëüíî,
ÿâëÿþòñÿ ïðîñòûìè.
1: procedure Eratosthene(r )
2:
x = d2r log re
3:
p ∈ {0, 1}x = (p1 , p2 , . . . px ) = (0, 1 . . . 1)
4:
for i ∈ [1; x] do
5:
if pi = 1 then
6:
for j ∈ [2; pxi ] do
7:
pj = 0

ðåøåòî Ýðàòîñôåíà

8:
9:
10:
11:

end for
end if
end for
endprocedure


Äëÿ êàæäîãî ïðîñòîãî p < x ñîâåðøàåòñÿ b xp c øàãîâ, ñóììàðíîå ÷èñëî øàãîâ îöåíèâàåòñÿ ñâåðõó (ñì. óðàâíåíèå (3.20) â ñòàòüå [19])




X

1
log x
4
1
x
< x log log x + B +
=
x
log
+
B
+
,

p
2
log2 x
log2 x

p<

x, p

ïðîñòîå

Ïîñêîëüêó êàæäûé øàã ìîæåò áûòü ïðîäåëàí çà O(log x) ýëåìåíòàðíûõ îïåðàöèé [ñëîæåíèå èíäåêñîâ âî âðåìÿ èñïîëíåíèÿ âíóòðåííåãî öèêëà for], ñëîæíîñòü ðåøåòà Ýðàòîñôåíà
åñòü O(x log x log log x), à ïîñêîëüêó log x = log 2r + log log r = O(log r), òî ñëîæíîñòü ðåøåòà Ýðàòîñôåíà ìîæíî îöåíèòü êàê O(r log2 r log log r).
Òåïåðü ðàññìîòðèì àëãîðèòìû, ïðîâåðÿþùèå ïðîñòîòó äàííîãî íà âõîä íàòóðàëüíîãî
÷èñëà n. Áåç îãðàíè÷åíèÿ îáùíîñòè ìîæíî ñ÷èòàòü, ÷òî n íå÷åòíî.

Âåðîÿòíîñòíûå òåñòû íà ïðîñòîòó
1:
2:
3:
4:
5:

òåñò Ôåðìà:

Ðàññìîòðèì ñëåäóþùèé
procedure Fermat(N )
a ← random ∈ [2; N − 1]
if (a, N ) > 1 then
return composite

else

75

Àëãåáðà è òåîðèÿ ÷èñåë
6:
7:
8:
9:
10:
11:
12:

if aN −1 = 1 mod N then
return prime
else
return composite
end if
end if
end procedure

Òåñò Ôåðìà  ýòî âåðîÿòíîñòíûé àëãîðèòì òèïà Ìîíòå-Êàðëî, òî åñòü ðàáîòàþùèé,
ïîêà íå ïîëó÷èò ïðîòèâîðå÷èå, ëèáî íå ïðåâûñèò äîïóñòèìîå ÷èñëî èòåðàöèé, êîòîðûé
íà êàæäîé èòåðàöèè ãåíåðèðóåò ñëó÷àéíîå öåëîå ÷èñëî a èç îòðåçêà [1, N − 1] (êàæäûé
èç âû÷åòîâ ìîæåò ïîÿâèòüñÿ ñ îäíîé è òîé æå âåðîÿòíîñòüþ). Íåòðóäíî âèäåòü, ÷òî åñëè
N ïðîñòîå, òî òåñò Ôåðìà îáÿçàòåëüíî âûâåäåò prime. Òåïåðü íàäî îöåíèòü âåðîÿòíîñòü
òîãî, ÷òî ïðè ñîñòàâíîì N òåñò Ôåðìà äàñò íåâåðíûé îòâåò, òî åñòü prime.

Ïóñòü ÍÎÄ(a, N ) = 1 è a 6= 1 mod N . Òîãäà ïî êðàéíåé ìåðå
äëÿ ïîëîâèíû ÷èñåë èç ïðîìåæóòêà 1 6 b < N âûïîëíåíî b 6= 1 mod N .

Óòâåðæäåíèå 3.48.

N −1

N −1

Äîêàçàòåëüñòâî. Óñëîâèå íóæíî ïîíèìàòü òàê, ÷òî n  íå ÷èñëî Êàðìàéêëà, è
ñóùåñòâóåò òàêîå ÷èñëî a, ÷òî ÍÎÄ(a, N ) = 1 è aN −1 6= 1 mod N . Òîãäà äëÿ x1 , . . . xk
−1
òàêèõ, ÷òî xN
= 1 mod N èìååì
i
−1
(axi )N −1 = aN −1 xN
= aN −1 6= 1 mod N,
i

òàêèì îáðàçîì, õîòÿ áû ïîëîâèíà èñêîìûõ b ñóùåñòâóåò.



Èç óòâåðæäåíèÿ âûøå ñëåäóåò, ÷òî åñëè ÷èñëî n  íå÷¼òíîå ñîñòàâíîå, òî òåñò Ôåðìà
âûäàñò prime ñ âåðîÿòíîñòüþ íå áîëåå 12 . Èíûìè ñëîâàìè, íà òàêîì âõîäå n íå áîëåå ÷åì
çà t èòåðàöèé òåñò Ôåðìà îïðåäåëèò, ÷òî ýòî ÷èñëî ñîñòàâíîå, ñ âåðîÿòíîñòüþ áîëüøåé
1 − 21t , ÷òî ÿâëÿåòñÿ î÷åíü áëèçêèì ê åäèíèöå ÷èñëîì äàæå äëÿ t = 10 (âåðîÿòíîñòü
ïîëó÷àåòñÿ ïðèìåðíî 99, 9%).

Óòâåðæäåíèå 3.49.

÷èñëî îïåðàöèé.

Òåñò Ôåðìà ìîæåò áûòü ðåàëèçîâàí çà ïîëèíîìèàëüíîå ïî âõîäó

Äîêàçàòåëüñòâî.  òåñòå Ôåðìà ñëó÷àéíîå ÷èñëî íàõîäèòñÿ îäèí ðàç, ïîêàæåì,
÷òî îñòàëüíûå ìàíèïóëÿöèè ìîãóò áûòü ðåàëèçîâàíû çà ïîëèíîìèàëüíîå âðåìÿ. Äåéñòâèòåëüíî, àëãîðèòì Åâêëèäà ïîëèíîìèàëåí, à âû÷èñëåíèå aN −1 mod N ìîæåì ðåàëèçîâàòü
ñëåäóþùèì îáðàçîì:
• âîçâîäèòü â ñòåïåíü ïî-èíäèéñêè, òî åñòü âû÷èñëÿòü x, x2 , x4 , . . .;
• ïîñëå êàæäîãî âîçâåäåíèÿ â êâàäðàò áðàòü îñòàòîê ïî ìîäóëþ N ;
Îòñþäà ïîëó÷àåì, ÷òî òåñò Ôåðìà ìîæåò áûòü ðåàëèçîâàí çà ïîëèíîìèàëüíîå ïî âõîäó
÷èñëî îïåðàöèé.


76

Àëãåáðà è òåîðèÿ ÷èñåë
Îäíàêî íå âñ¼ òàê õîðîøî äëÿ äàííîé âåðîÿòíîñòíîé ïðîöåäóðû.

Îïðåäåëåíèå 3.50. Ñîñòàâíîå íàòóðàëüíîå ÷èñëî n íàçûâàåòñÿ ÷èñëîì Êàðìàéêëà, åñëè
äëÿ âñåõ íàòóðàëüíûõ a òàêèõ, ÷òî (a, n) = 1, âåðíî an−1 = 1 mod n.
Ñóùåñòâóåò àëüòåðíàòèâíîå îïðåäåëåíèå ÷èñåë Êàðìàéêëà.

Òåîðåìà 3.51 (Korselt). ×èñëî n ÿâëÿåòñÿ ÷èñëîì Êàðìàéêëà òèòòê îíî íå÷åòíî,
ñâîáîäíî îò êâàäðàòîâ è p − 1|n − 1 äëÿ ëþáîãî ïðîñòîãî äåëèòåëÿ p|n.
Äîêàçàòåëüñòâî. Íåòðóäíî óáåäèòüñÿ â äîñòàòî÷íîñòè óñëîâèé òåîðåìû: åñëè n =
p1 . . . pk íå÷åòíî è pi − 1|n − 1, òî äëÿ ëþáîãî a ∈ Z/nZ ñóùåñòâóåò òàêîé pi (ïðîñòîé
äåëèòåëü n), ÷òî (pi , a) = 1  â ïðîòèâíîì ñëó÷àå âñå ïðîñòûå äåëèòåëè n äåëÿò a,
ñëåäîâàòåëüíî, n|a. Èìååì â òàêîì ñëó÷àå
φ(n)

aφ(n) = a(p1 −1)...(pi −1)...(pk −1) = 1 pi −1 = 1 mod n

.

Òåïåðü ïðîåðèì íåîáõîäèìîñòü ýòèõ óñëîâèé. Äåéñòâèòåëüíî, åñëè êàðìàéêëîâî n
÷åòíîå, òî (−1)n = −1 mod n, ÷òî íåâåðíî. Ïóñòü n = pk1 1 . . . pkmm , è ki > 2 äëÿ íåêîòîðîãî i. Òîãäà ðàññìîòðèì a  ïîðîæäàþùèé (Z/pki i Z)× ⊂ (Z/nZ)× . Åãî ïîðÿäîê ðàâåí
|(Z/pki i Z)× | = φ(pki i ) = pki i −1 (pi − 1), ñëåäîâàòåëüíî, pki i −1 (pi − 1)|n − 1. Ïîñêîëüêó pi íå
äåëèò pi − 1 è n − 1, òî èìååì ïðîòèâîðå÷èå. Áîëåå òîãî, îòñþäà âèäíî, ÷òî pi − 1|n − 1.
Âñå ýòè ðàññóæäåíèÿ âåðíû äëÿ ëþáîãî pi , òåì ñàìûì äîñòàòî÷íîñòü óñòàíîâëåíà.

Èñïîëüçóÿ êðèòåðèé Êîðñåëüòà, ìîæíî íàéòè ïåðâûå íåñêîëüêî ÷èñåë Êàðìàéêëà.
561 = 3 · 11 · 17

(2 | 560;

10 | 560;

16 | 560)

1105 = 5 · 13 · 17

(4 | 1104;

12 | 1104;

16 | 1104)

1729 = 7 · 13 · 19

(6 | 1728;

12 | 1728;

18 | 1728)

2465 = 5 · 17 · 29

(4 | 2464;

16 | 2464;

28 | 2464)

2821 = 7 · 13 · 31

(6 | 2820;

12 | 2820;

30 | 2820)

6601 = 7 · 23 · 41

(6 | 6600;

22 | 6600;

40 | 6600)

8911 = 7 · 19 · 67

(6 | 8910;

18 | 8910;

66 | 8910)

Áîëåå òîãî, âïîñëåäñòâèè áûëî óñòàíîâëåíî, ÷òî ÷èñåë Êàðìàéêëà áåñêîíå÷íî ìíîãî
(õîòÿ èõ è íå òàê ìíîãî), òàê ÷òî åñòü èíòåðåñ â áîëåå ñèëüíîì òåñòå.
Ðàññìîòðèì äðóãóþ âåðîÿòíîñòíóþ ïðîöåäóðó ïîä íàçâàíèåì
Ïðåæäå íàïîìíèì íåñêîëüêî îïðåäåëåíèé.

òåñò Ñîëîâåÿ-Øòðàññåíà

Îïðåäåëåíèå 3.52. Öåëîå ÷èñëî a íàçûâàåòñÿ

êâàäðàòè÷íûì âû÷åòîì

ïî ìîäóëþ m,
åñëè ðàçðåøèìî ñðàâíåíèå x2 ≡ a (mod m).  ïðîòèâíîì ñëó÷àå ÷èñëî a íàçûâàåòñÿ
.

êâàäðàòè÷íûì íåâû÷åòîì

77

Àëãåáðà è òåîðèÿ ÷èñåë

Îïðåäåëåíèå 3.53. Ïóñòü p  íå÷¼òíîå ïðîñòîå ÷èñëî è a  öåëîå ÷èñëî. Îïðåäåëèì

ñèìâîë Ëåæàíäðà ñëåäóþùèì îáðàçîì:

  
1,
a
= −1,

p

0,

Óòâåðæäåíèå 3.54.

 
a
p

=a

a  êâàäðàòè÷íûé âû÷åò ïî ìîäóëþ p
a  êâàäðàòè÷íûé íåâû÷åò ïî ìîäóëþ p
p|a
p−1
2

mod p

Íà ïåðâûé âçãëÿä êàæåòñÿ, ÷òî ñèìâîë Ëåæàíäðà îïòèìàëüíî âû÷èñëÿòü ïðè ïîìîùè
áûñòðîãî âîçâåäåíèÿ â ñòåïåíü ïî ìîäóëþ. Òàêàÿ ïðîöåäóðà ïîòðåáóåò O(log3 p) áèòîâûõ
îïåðàöèé. Îäíàêî åñëè ââåñòè â ðàññìîòðåíèå áîëåå îáùóþ êîíñòðóêöèþ, íàçûâàåìóþ
, òî ñèìâîë Ëåæàíäðà ìîæíî áóäåò âû÷èñëÿòü çà O(log2 n).

ñèìâîëîì ßêîáè

Îïðåäåëåíèå 3.55. Ïóñòü P  íå÷¼òíîå ÷èñëî, áîëüøåå åäèíèöû è P = p1 p2 · pk  åãî

ðàçëîæåíèå íà ïðîñòûå ìíîæèòåëè (ñðåäè p1 , . . . , pk ìîãóò áûòü è ðàâíûå). Òîãäà äëÿ
ïðîèçâîëüíîãî öåëîãî ÷èñëà a
îïðåäåëÿåòñÿ ðàâåíñòâîì




 
a
a
a
a
=
· ... ·
,
P
p1
p2
pk

ñèìâîë ßêîáè

 
ãäå pai  ñèìâîëû Ëåæàíäðà. Êðîìå òîãî, ïî îïðåäåëåíèþ áóäåì ñ÷èòàòü, ÷òî
äëÿ âñåõ a.

a
1



=1

Äëÿ ëþáûõ íàòóðàëüíûõ p è q ìåþò ìåñòî ñëåäóþùèå óòâåðæäåíèÿ:
     
ab
(1)
= ap · pb .
p
   
(2)
Åñëè a ≡ b (mod p), òî ap = pb .
 
(3) p1 = 1.
 
p−1
(4) −1
= (−1) 2 .
p
 
p2 −1
(5) p2 = (−1) 8 .

Ìóëüòèïëèêàòèâíîñòü.
Ïåðèîäè÷íîñòü.

Ýòè óòâåðæäåíèÿ âåðíû è äëÿ ñèìâîëà Ëåæàíäðà, è äëÿ ñèìâîëà ßêîáè.

Òåîðåìà 3.56 (Êâàäðàòè÷íûé
çàêîí âçàèìíîñòè).
 

ñòûõ P è Q âåðíî
78

P
Q

Q
P



= (−1)

P −1 Q−1
· 2
2

.

Äëÿ ëþáûõ íå÷åòíûõ âçàèìíîïðî-

Àëãåáðà è òåîðèÿ ÷èñåë

Ïðèìåð 3.57. Èç êâàäðàòè÷íîãî çàêîíà âçàèìíîñòè:


219
383




=−

383
219




=−

164
219





=−



4
41
=
219
219
| {z }
1


=−

219
41




=−

14
41






2
41



7
41




=−

7
41




=−

41
7




=−

−1
7


= 1.

Îêàçûâàåòñÿ ôîðìóëó Ýéëåðà ìîæíî ïðåâðàòèòü â êðèòåðèé ïðîñòîòû ÷èñëà, åñëè
ïåðåéòè îò ñèìâîëà Ëåæàíäðà ê ñèìâîëó ßêîáè.

Íå÷¼òíîå ÷èñëî n > 1 ÿâëÿåòñÿ ïðîñòûì òîãäà è òîëüêî òîãäà, êîãäà
äëÿ âñÿêîãî a ∈ {1, . . . , n − 1} âûïîëíÿåòñÿ  = a mod n.

Òåîðåìà 3.58.

a
n

n−1
2

Èìåííî ýòî ñðàâíåíèå è ïðîâåðÿåò òåñò Ñîëîâåÿ-Øòðàññåíà.

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:

procedure Solovay-Strassen(N )
a ← random ∈ [2; N − 1]

if (a, N ) > 1 then
return composite
else

N −1
if Na = a 2 mod N then
return prime
else
return composite
end if
end if
end procedure

Ïóñòü n  íå÷¼òíîå è ñîñòàâíîå, òîãäà
(1) ñóùåñòâóåò ÷èñëî a ∈ {1, 2, . . . , n − 1}, òàêîå ÷òî gcd an = 1 è a 6≡
(mod n);
(2) âûïîëíåíî íåðàâåíñòâî
n

o

a ∈ {1, 2, . . . , n − 1} | gcd an > 1 èëè gcd an = 1 è a
6≡
(mod n)
1

Òåîðåìà 3.59 (Ñîëîâåé-Øòðàññåí, 1977).

n−1
2

n−1
2

n−1

a
n

>

2

a
n



.

Îòìåòèì, ÷òî òåñò Ñîëîâåÿ-Øòðàññåíà íà ëþáîì íå÷¼òíîì ñîñòàâíîì ÷èñëå çà íå
áîëåå ÷åì t øàãîâ äàñò îòâåò ¾íåò¿ ñ âåðîÿòíîñòüþ áîëüøåé, ÷åì 1 − 21t . Ïðè ýòîì èñêëþ÷åíèé â ñòèëå ÷èñåë Êàðìàéêëà, êàê áûëî äëÿ òåñòà Ôåðìà, äëÿ òåñòà Ñîëîâåÿ-Øòðàññåíà
óæå íåò. Ïðîâåðêà ñðàâíåíèÿ Ýéëåðà òðåáóåò O(log3 n) îïåðàöèé, êàê è ïðîâåðêà ñðàâíåíèÿ Ôåðìà.
79

Àëãåáðà è òåîðèÿ ÷èñåë
Ñëåäóþùèé àëãîðèòì áóäåò îñíîâûâàòüñÿ òîæå íà íåêîòîðîì óòâåðæäåíèè, êîòîðîå
âûòåêàåò èç ñðàâíåíèÿ Ôåðìà è åù¼ íåêîòîðûõ ãðóïïîâûõ ñâîéñòâ.

Òåîðåìà 3.60. Ïóñòü n > 2  íå÷¼òíîå ÷èñëî è ïóñòü n = 2 k, ãäå l > 1 è k 
íå÷¼òíîå ÷èñëî. Òîãäà ÷èñëî n ÿâëÿåòñÿ ïðîñòûì òîãäà è òîëüêî òîãäà, êîãäà äëÿ
ëþáîãî a ∈ {1, 2, . . . , n − 1} âûïîëíåíî îäíî èç óñëîâèé:
(1) a ≡ 1 (mod n);
(2) ñóùåñòâóåò 0 6 i 6 l − 1, òàêîå ÷òî a ≡ −1 (mod n).
l

k

2i k

òåñò Ìèëëåðà-Ðàáèíà. Â îïèñàíèè àëãîðèòìà n−

Òåïåðü ðàññìîòðèì âåðîÿòíîñòíûé
1 = 2l k, ãäå l > 1 è k  íå÷¼òíîå ÷èñëî.
1: procedure Miller-Rabin(N )
2:
a ← random ∈ [2; N − 1]
3:
if (a, N ) > 1 then
4:
return composite
5:
6:
7:
8:
9:
10:
11:
12:

13:
14:
15:
16:
17:
18:
19:
20:
21:

else
if aN −1 6= 1 mod N then
return composite
else
if ak−1 = 1 mod N then
return prime
else
x

r ← min{x ∈ [1; l] | a2 k = 1 mod N }
r−1
if a2 k 6= −1 mod N then
return composite

else
return prime
end if
end if
end if
end if
end procedure

Íåòðóäíî âèäåòü, ÷òî ýòà ðåàëèçàöèÿ òåñòà Ðàáèíà-Ìèëëåðà ïîëèíîìèàëüíà. Ñëó÷àéíîå ÷èñëî íàõîäèòñÿ îäèí ðàç, àëãîðèòì Åâêëèäà ïîëèíîìèàëåí, à âû÷èñëåíèå aN −1 mod N
è ak−1 mod N ìîæåì ðåàëèçîâàòü ñëåäóþùèì îáðàçîì:
• âîçâîäèòü â ñòåïåíü ïî-èíäèéñêè, òî åñòü âû÷èñëÿòü x, x2 , x4 , . . .;
• ïîñëå êàæäîãî âîçâåäåíèÿ â êâàäðàò áðàòü îñòàòîê ïî ìîäóëþ N ;

80

Àëãåáðà è òåîðèÿ ÷èñåë
x

Ïîèñê ÷èñëà r ïîòðåáóåò ïåðåáîðà íå áîëåå l 6 log2 n−1
6 log2 n âû÷èñëåíèé a2 k mod N .
k
Èòîãî íåñëîæíî âèäåòü, ÷òî ïðîöåäóðà Miller-Rabin ðàáîòàåò çà O(log3 n). Òåïåðü îöåíèì âåðîÿòíîñòü îøèáêè.

Îïðåäåëåíèå 3.61. Ïóñòü n > 2  íå÷¼òíîå ÷èñëî è a ∈ {1, 2, . . . , n − 1}. Òîãäà ÷èñëî a

ëæåñâèäåòåëåì Ìèëëåðà-Ðàáèíà

l−1

íàçûâàåòñÿ
, åñëè ïîñëåäîâàòåëüíîñòü (ak , a2k , a4k , . . . , a2
ïî ìîäóëþ n ðàâíà ëèáî ïîñëåäîâàòåëüíîñòè, ó êîòîðîé íà ïåðâîì ìåñòå ñòîèò åäèíèöà,
ëèáî ïîñëåäîâàòåëüíîñòè, ó êîòîðîé íà êàêîì-òî ìåñòå ñòîèò (−1), è
â ïðîòèâíîì ñëó÷àå.

ñâèäåòåëåì Ìèëëåðà-

Ðàáèíà

Ïóñòü N > 2  íå÷¼òíîå ñîñòàâíîå ÷èñëî. Åñëè N ñîñòàâíîå, òî âåðîÿòíîñòü íàõîæäåíèÿ ëæåñâèäåòåëÿ íå áîëåå .

Òåîðåìà 3.62.

Äîêàçàòåëüñòâî.

1
4

Ïóñòü N − 1 = t · 2h . Ðàññìîòðèì ñëåäóþùèå ñëó÷àè.

• Åñëè N ïðîñòîå, òî (a, N ) = 1 è aN −1 = 1 mod N , à ïîñêîëüêó r  ìèíèìàëür
r−1
r−1
íîå íàòóðàëüíîå ÷èñëî òàêîå, ÷òî a2 k = 1, òî (a2 k )2 = 1 è a2 k = −1.
Ñëåäîâàòåëüíî, íà N òåñò Ðàáèíà-Ìèëëåðà âûäàåò prime âñåãäà.
• Åñëè N = pe äëÿ íåêîòîðîãî e > 1 è ïðîñòîãî íå÷åòíîãî p, òî ìíîæåñòâî ëæåñâèäåòåëåé î÷åâèäíî ñîäåðæèòñÿ âî ìíîæåñòâå {a ∈ [2; N − 1] | aN −1 = 1 mod N },
êîòîðîå ñîãëàñíî òåîðåìå Ýéëåðà èìååò ìîùíîñòü (φ(N ), N − 1). Îòñþäà
P(pe  ëæåñâèäåòåëü) 6

(pe−1 (p − 1), pe − 1)
(φ(N ), N − 1)
p−1
1
=
= e
=
N −1
pe − 1
p −1
1 + . . . + pe−1
1
6
6
1 + pe−1

6
1
.
4

• Ïóñòü N = pe11 . . . pemm äëÿ r > 2. Òîãäà φ(pei i ) = ti 2li . Ââåäåì g = min{l, l1 , . . . lm }
g
è ïîêàæåì, ÷òî äëÿ ëþáîãî ëæåñâèäåòåëÿ a èìååò ìåñòî at2 = 1 mod N . Ïî
l
îïðåäåëåíèþ l èìååì at2 = 1 mod N , òàê ÷òî áóäåì ñ÷èòàòü g < l, òî åñòü g = li
g
äëÿ íåêîòîðîãî i. Ïóñòü at2 6= 1 mod N , à j ∈ [g + 1, l]  ìèíèìàëüíîå, äëÿ
j
j−1
êîòîðîãî at2 = 1 mod N . Òîãäà at2
= −1 mod N . Âîñïîëüçîâàâøèñü ÊÒÎ,
j−1
íàéäåì òàêîå ai , ÷òî a = ai mod pei i , òîãäà at2
= −1 mod pei i . Ñëåäîâàòåëüíî,
i
e
t
×
j
i
ïîðÿäîê ai â ãðóïïå (Z/pi Z) ðàâåí 2 , òî åñòü áîëüøå 2hi , ÷òî ïðîòèâîðå÷èò
hi
òîìó, ÷òî â (Z/pei i Z)× âåðíî ait2 = 1.
Òåïåðü ïóñòü ρj : (Z/N Z)× → (Z/N Z)× , îïðåäåëåííûé ôîðìóëîé ρj (x) =
t2j
x . Íåòðóäíî âèäåòü, ÷òî ìíîæåñòâî ëæåñâèäåòåëåé ñîäåðæèòñÿ â ρ−1
g−1 ({1, −1}),
òîãäà ìîùíîñòü ìíîæåñòâà ëæåñâèäåòåëåé íå áîëåå 2| ker ρg−1 |. Îñòàëîñü òîëüêî

81

k

)

Àëãåáðà è òåîðèÿ ÷èñåë
îöåíèòü ìîùíîñòü ÿäðà.  ñèëó ÊÒÎ ïîëó÷àåì
m
Y
gcd(ti 2li , t2j )
| ker ρj | =
i=1

Íåòðóäíî âèäåòü, ÷òî
2m | ker ρg−1 | = | ker ρg | 6 | ker ρl |

Òàêèì îáðàçîì, âñåãî ëæåñâèäåòåëåé íå áîëåå ÷åì
2| ker ρg−1 | 6 21−m | ker ρl |

Åñëè äåëèòåëåé õîòÿ áû 3, òî ëæåñâèäåòåëåé íå áîëåå ÷åì | ker4 ρl | , òî åñòü íå
áîëåå ÷åòâåðòè ýëåìåíòîâ ãðóïïû. Åñëè æå äåëèòåëåé ðîâíî 2, òî N íå ÿâëÿåòñÿ
÷èñëîì Êàðìàéêëà [ïðîâåðêà ýòîãî  çàäà÷à], ñëåäîâàòåëüíî, | ker ρl | 6 N 2−1 ,
îòêóäà òàêæå ñëåäóåò, ÷òî ëæåñâèäåòåëåé íå áîëåå N 4−1 .


Àëãîðèòì ÀÊÑ
Êàê ìû âèäåëè, ÿçûê ïðîñòûõ ÷èñåë ëåæèò â NP ∩ co − NP. Ïîñêîëüêó íå äîêàçàíî
è íå îïðîâåðãíóòî óòâåðæäåíèå P = NP ∩ co − NP, èç âñåãî âûøåñêàçàííîãî íå ñëåäóåò
ïîëèíîìèàëüíîñòü ÿçûêà ïðîñòûõ ÷èñåë. Ïîëèíîìèàëüíûé àëãîðèòì, äåòåðìèíèðîâàííî ïðîâåðÿþùèé ïðîñòîòó ÷èñëà, áûë ïðåäúÿâëåí ëèøü â 2002 ãîäó, òðåìÿ èíäóñàìè 
Manindra Agrawal, Neeraj Kayal è Nitin Saxena (ñì. [1], [2]).
Îñíîâîé âåðîÿòíîñòíûõ òåñòîâ íà ïðîâåðêó ïðîñòîòû áûëà ìàëàÿ òåîðåìà Ôåðìà.
Ñóùåñòâóþò, îäíàêî, ÷èñëà Êàðìàéêëà  êîíòðïðèìåðû ê îáðàòíîìó ê ÌÒÔ óòâåðæäåíèþ. Ïðåäëàãàåòñÿ ïåðåéòè ê êîëüöó Z[x]/(xr − 1) äëÿ íåêîòîðîãî óäîáíîãî r è ðàññìîòðåòü àíàëîã ìàëîé òåîðåìû Ôåðìà, êîòîðûé ÿâëÿåòñÿ êðèòåðèåì è ìîæåò áûòü ëåãêî
èñïîëüçîâàí äëÿ ïîñòðîåíèÿ äåòåðìèíèðîâàííîãî àëãîðèòìà.
Ñïåðâà ìû âûáåðåì ñîîòâåòñòâóþùåå r.

Ëåììà 3.63.

Ñóùåñòâóåò òàêîå r 6 dlog ne, ÷òî ïîðÿäîê n â Z/rZ ïðåâûøàåò log n.
5

2

Q 2n j
Ðàññìîòðèì ÷èñëî S = n log
j=1 (n −1). Ïîêàæåì, ÷òî ñóùåñòâóåò
r 6 dlog5 ne, íà êîòîðûé S íå äåëèòñÿ. Äåéñòâèòåëüíî,
Äîêàçàòåëüñòâî.

log2 n

S=n

Y
j=1

log2 n
j

(n − 1) < n

Y

Plog2 n

nj = n1+

j=1

j

6 n(log

2

n)2

= 2log

5

n

j=1

Åñëè x äåëèòñÿ íà ëþáîå ÷èñëî èç [1; dlog5 ne], òî x äåëèòñÿ íà íàèìåíüøåå îáùåå êðàòíûõ
÷èñåë 1, . . . log5 n. Îäíàêî lcm(1, . . . , m) > 2m−1 . Òàêèì îáðàçîì, íóæíîå íàì r äîëæíî
ñóùåñòâîâàòü.
82

Àëãåáðà è òåîðèÿ ÷èñåë
Îòäåëüíûé ìîìåíò  êàê äîêàçàòü, ÷òî lcm(1, . . . , n) > 2n−1 äëÿ ëáîãî íàòóðàëüíîãî
n. Ýòî ìîæíî ñäåëàòü ïî-ðàçíîìó, â ðàáîòå [1] ïðèâåäåíà ññûëêà íà ðàáîòó Íàèðà [17],
êîòîðûé ïîêàçûâàåò èñòèííîñòü ýòîãî óòâåðæäåíèÿ ïðè n > 9. Íàèð çàìå÷àåò, åñëè
!Z
Z 1
n−m
1
X
m−1
n−m
i n−m
I(m, n) =
x
(1 − x)
dx =
(−1)
xm+i−1 dx,
i
0
0
i=0
òî lcm(1, . . . , n)I(m, n) ∈ Z äëÿ ëþáîãî m ∈ [0; n], à èíòåãèðîâàíèåì
ïî ÷àñòÿì ìîæíî

n
|lcm(1, . . . , n), â ÷àñòïîêàçàòü, ÷òî I(m, n) = m 1n . Òàêèì îáðàçîì ïîëó÷àåì, ÷òî m m
(m)
íîñòè,
!
2n
n
|lcm(1, . . . , 2n),
n
!
!
2n
2n + 1
(2n + 1)
= (n + 1)
|lcm(1, . . . , 2n + 1)
n
n+1

Òàêèì îáðàçîì ïîëó÷àåì, ÷òî n(2n + 1) 2n
|lcm(1, . . . , 2n + 1), îòêóäà ñëåäóåò, ÷òî
n
!
!
2n
X
2n
2n
lcm(1, . . . , 2n + 1) > n(2n + 1)
>n
= n4n
n
i
i=0
Òàêèì îáðàçîì, ïðè n > 2 èìååì lcm(1, . . . , 2n + 1) > 22n+1 è lcm(1, . . . , 2n + 2) >
lcm(1, . . . , 2n + 1) > 22n+2 .
Àëüòåðíàòèâíîå äîêàçàòåëüñòâî ýòîãî ôàêòà òàêæå ïðèâåë Áàêèð Ôàðõè [10], äîêàçàâ, ÷òî äëÿ ëþáîãî m ∈ N
!
!
!!
lcm(1, . . . , m + 1)
m
m
m
lcm
,
,...,
=
,
0
1
m
m+1
Èç ýòîãî óòâåðæäåíèÿ ñëåäóåò, ÷òî
!
!
!!
!
m−1
m−1
m−1
m−1
lcm(1, . . . , m) = mlcm
,
,...,
> m max
>
i∈[0;m−1]
0
1
m−1
i
!
X
m−1
= 2m−1
>
i
i∈[0;m−1]

òåîðåìó Êóììåðà

Ñàìî äîêàçàòåëüñòâî Ôàðõè îïèðàåòñÿ íà
: äëÿ ëþáûõ ïîëîæèòåëüíûõ

öåëûõ m > n è ïðîñòîãî p ìàêñèìàëüíàÿ ñòåïåíü p, âõîäÿùàÿ â ðàçëîæåíèå m
, ðàâíà
n
÷èñëó ïåðåíîñîâ, êîòîðûå ñîâåðøàþòñÿ ïðè ñëîæåíèè (m − n) + n mod p.

83

Àëãåáðà è òåîðèÿ ÷èñåë
Òåïåðü îïèøåì ñàì àëãîðèòì è äîêàæåì åãî êîððåêòíîñòü. Çäåñü (n, xr − 1) ⊂ Z[x] 
èäåàë, ïîðîæäåííûé n è xr −1. Îòìåòèì, ÷òî ïðîâåðêà òîãî, ÿâëÿåòñÿ ëè ÷èñëî n ñòåïåíüþ
êàêîãî-ëèáî íàòóðàëüíîãî ÷èñëà, òàêæå ìîæåò áûòü ðåàëèçîâàíà ïîëèíîìèàëüíî.
1: procedure AKS(N )
2:
if ∃a, b > 2 ab = n then
3:
return composite
4:
5:

6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:

end if Q

2

n
j
S ← n log
j=1 (n − 1)
for t ∈ [1; dlog5 ne] do
if S 6= 0 mod t then
r←t

end if
end for
for a ∈ [1; r] do
if 1 < gcd(a, n) < n then
return composite
end if
end for √
for a ∈ [1; r log n] do
if (x + a)n 6= xn + a mod (n, xr − 1) then
return composite
end if
end for
return prime
end procedure

Íåòðóäíî âèäåòü, ÷òî åñëè n ïðîñòîå, òî (x + a)n = xn + an = xn + a â Z[x]/(n, xr − 1).
Òåïåðü ïîêàæåì, ÷òî âåðíî è ¾îáðàòíîå¿ óòâåðæäåíèå (åñòü íåêîòîðîå óñëîâèå íà n,
âûïîëíèìîñòü êîòîðîãî ìîæíî ïðîâåðèòü çà ïîëèíîìèàëüíîå ïî log n âðåìÿ).

Ïóñòü n 6= b (äëÿ c > 2)  íàòóðàëüíîå ÷èñëî, íå èìåþùåå
ïðîñòûõ
äåëèòåëåé,
íå
ïðåâîñõîäÿùèõ
r. Åñëè (x + a) = x + a mod (n, x − 1) äëÿ âñåõ

a ∈ [1; r log n], òî n  ïðîñòîå.
Òåîðåìà 3.64 (AKS).

c

n

n

r


Ïóñòü l = d r log ne, à n > p > r  ïðîñòîé äåëèòåëü ÷èñëà n.
Äëÿ âñåõ 0 6 a 6 l âûïîëíåíî
Äîêàçàòåëüñòâî.

(x + a)n = xn + a

mod (p, xr − 1),

n

n

(x + a) p = x p + a

mod (p, xr − 1)
n

n

Ïåðâîå ðàâåíñòâî î÷åâèäíî, âòîðîå ìîæíî ïðîâåðèòü òàê: åñëè (x + a) p = x p + a + q(x)
mod (p, xr − 1), òî (x + a)n = xn + a + [q(x)]p mod (p, xr − 1), îòêóäà ñëåäóåò, ÷òî [q(x)]p =
0 mod (p, xr − 1), ïîñêîëüêó xr − 1 ñâîáîäåí îò êâàäðàòîâ íàä Z/pZ [òàê êàê p > r,
84

Àëãåáðà è òåîðèÿ ÷èñåë
êîðíåé xr − 1, ëåæàùèõ â Z/pZ, íå áîëüøå p − 1, à çíà÷èò, îíè âñå ðàçëè÷íû; êîðíè
xr − 1 â ñîîòâåòñòâóþùåì ðàñøèðåíèè òàêæå ðàçëè÷íû, è èõ ðîâíî r], ïîýòîìó q(x) = 0
mod (p, xr − 1) [òàê êàê q(x) äåëèòñÿ íà âñå äåëèòåëè xr − 1].
Áóäåì íàçûâàòü ÷èñëî m
äëÿ ìíîãî÷ëåíà f ∈ Z[x], åñëè

èíòðîñïåêòèâíûì

[f (x)]m = f (xm ) mod (p, xr − 1).

Íåòðóäíî ïðîâåðèòü, ÷òî åñëè m1 è m2 èíòðîñïåêòèâíû äëÿ f (x), òî m1 m2 èíòðîñïåêòèâíî äëÿ f (x):
[f (x)]m1 m2 = [f (xm1 )]m2 = f (xm1 m2 ) mod (p, xr − 1).

Àíàëîãè÷íî åñëè m èíòðîñïåêòèâíî äëÿ f1 (x) è f2 (x), òî m èíòðîñïåêòèâíî äëÿ f1 (x)f2 (x).
×èñëî p èíòðîñïåêòèâíî äëÿ ëþáîãî ïîëèíîìà, à np èíòðîñïåêòèâíî äëÿ ìíîãî÷ëåíà x+a,
 j
ñëåäîâàòåëüíî, ëþáîå ÷èñëî èç ìíîæåñòâà I = {pi np
| i, j > 0} èíòðîñïåêòèâíî äëÿ
Ql
ea
ëþáîãî ìíîãî÷ëåíà èç ìíîæåñòâà P = { a=0 (x + a) | ea > 0}.
Òåïåðü ïóñòü h(x)  íåêîòîðûé íåïðèâîäèìûé ìíîæèòåëü r-îãî öèêëîòîìè÷åñêîãî
ìíîãî÷ëåíà, à ïîëå F = Z[x]/(p, h(x))  ïîëå. Ââåäåì
(  
)
)
( l
j
Y
n
i
ea
Ir = p
mod (r, h(x)) | ea > 0 .
mod r | i, j > 0 , Pr =
(x + a)
p
a=0
Íåòðóäíî âèäåòü, ÷òî ïîñêîëüêó ïîðÿäîê n â Z/rZ íå ìåíüøå log2 n, òî |Ir | > log2 n.
Îöåíèì ìîùíîñòü Pr ñâåðõó è ñíèçó è ïîëó÷èì ïðîòèâîðå÷àùèå äðóã äðóãó îöåíêè.
Ñíà÷àëà îöåíèì |Pr | ñíèçó. Ïîêàæåì, ÷òî åñëè f (x) 6= g(x)  ìíîãî÷ëåíû èç P ñòåïåíè ìåíåå |Ir |, òî f (x)−g(x) 6= 0 mod (p, h(x)). Äîïóñòèì, ÷òî f (x)−g(x) = 0 mod (p, h(x)).
Äëÿ ëþáîãî m ∈ I è m
e = (m mod r) èìååì
e
e
f (xm
) − g(xm
) = f (xm ) − g(xm ) = [f (x)]m − [g(x)]m = 0

mod (p, h(x))

Ñëåäîâàòåëüíî, åñëè x  êîðåíü f (x) − g(x) íàä F, òî âñå ýëåìåíòû ìíîæåñòâà X =
{xm | m ∈ Ir } òàêæå ÿâëÿþòñÿ êîðíÿìè. Ïîñêîëüêó h(x)  íåïðèâîäèìûé äåëèòåëü rîãî öèêëîòîìè÷åñêîãî ìíîãî÷ëåíà, òî h(x) íå ìîæåò äåëèòü xre − 1 äëÿ re < r. Ïîýòîìó
xm1 − xm2 mod (p, h(x)) òèòòê r|m1 − m2 , è, òàêèì îáðàçîì, âñå ýëåìåíòû X ðàçëè÷íû.
Ñëåäîâàòåëüíî, f (x)−g(x) èìååò íàä F íå ìåíåå |Ir | êîðíåé, îòêóäà ñëåäóåò, ÷òî deg[f (x)−
g(x)] > |If |, ÷òî íåâåðíî. Òàêèì îáðàçîì çàêëþ÷àåì, ÷òî ýëåìåíòîâ Pr íå ìåíüøå, ÷åì
÷èñëî âñåâîçìîæíûõ
îñòàòêîâ ìíîãî÷ëåíîâ èç P ñòåïåíè ìåíåå |Ir |. Ìû ìîæåì óêàçàòü íå

|Ir |+l
ìåíåå |I
òàêèõ
ìíîãî÷ëåíîâ:
çàìåòèì, ÷òî ìíîãî÷ëåíû x, x+1, . . . x+l ëåæàò â Ir (òàê
|−1
r√
êàê l = d r log ne < r) è âñå ïîïàðíî ðàçëè÷íû, ñåìåéñòâî
âñåâîçìîæíûõ ïðîèçâåäåíèé

|Ir |+l
íå áîëåå |Ir | òàêèõ ìîíîìîâ íàñ÷èòûâàåò ðîâíî |I
(øàðû
è ïåðåãîðîäêè, à êàæäîìó
|−1
r
íàáîðó êîðíåé ñîîòâåòñòâóåò ðîâíî îäèí ìíîãî÷ëåí).
85

Àëãåáðà è òåîðèÿ ÷èñåë

Òåïåðü, ïîëüçóÿñü òåì, ÷òî n 6= pb , ïîêàæåì, ÷òî |Pr | 6 n |Ir | . Ðàññìîòðèì
 j
p
n
| 0 6 i, j 6 b |Ir |c}
I√|I | = {pi
r
p
p
Ïîñêîëüêó n 6= pb , âñå ýëåìåíòû I√|I | ðàçëè÷íû, è |I√|I | | = (1 + b |Ir |c)2 > |Ir |. Òàêèì
r
r
îáðàçîì ïîëó÷àåì, ÷òî ñóùåñòâóþò òàêèå m1 , m2 ∈ I√ , ÷òî xr − 1|xm1 − xm2 . Òîãäà â
|Ir |

ëþáîì ìíîãî÷ëåíå ìîæíî çàìåíèòü xm1 íà xm2 è ïîëó÷èòü, ÷òî
[f (x)]m1 = f (xm1 ) = f (xm2 ) = [f (x)]m2

mod (p, h(x))

Òàêèì îáðàçîì, ëþáîé ýëåìåíò Pr ÿâëÿåòñÿ êîðíåì óðàâíåíèÿ y m1 − y m2 = 0. Êîðíåé
òàêîãî óðàâíåíèÿ íå áîëüøå ñòåïåíè ýòîãî ìíîãî÷ëåíà, òî åñòü íå áîëüøå ìàêñèìàëüíîãî
ýëåìåíòà I√|I | , êîòîðûé ðàâåí
r

 b√|Ir |c √

n
pb |Ir |c 6 n |Ir | .
p

Òàêèì îáðàçîì ìû ïîëó÷èëè, ÷òî
|Ir | + l
|Ir | − 1

!


6 |Pr | 6 n |Ir |

Òåïåðü ïîêàæåì, ÷òî
|Ir | + l
|Ir | − 1



!
>n

|Ir |

Äåéñòâèòåëüíî, ïîñêîëüêó |Ir | > log2 n, òî
!
!
!
p
p


1 + blog(n) |Ir |c + l
1 + 2blog(n) |Ir |c
|Ir | + l
p
p
>
>
> 2blog(n) |Ir |c+1 > n |Ir |
|Ir | − 1
blog(n) |Ir |c
blog(n) |Ir |c
Òàêèì îáðàçîì, n = pa äëÿ íåêîòîðîãî ïîëîæèòåëüíîãî a. Ðàç a < 2, òî a = 1 è n 
ïðîñòîå ÷èñëî.

Íåòðóäíî âèäåòü, ÷òî êàæäàÿ ïðîâåðêà â àëãîðèòìå ÀÊÑ ìîæåò áûòü ðåàëèçîâàíà
ïîëèíîìèàëüíà. Ñëîæíîñòü, îäíàêî, ïîëó÷àåòñÿ ñëèøêîì áîëüøîé: ñàìàÿ ãðóáàÿ îöåíêà
e 21
2 ).
äàåò ñëîæíîñòü O(n
86

Àëãåáðà è òåîðèÿ ÷èñåë

Âçÿòèå êâàäðàòíîãî êîðíÿ ïî ìîäóëþ
Âçÿòèå êâàäðàòíîãî êîðíÿ èç a ïî ìîäóëþ n  ðåøåíèå óðàâíåíèÿ x2 = c mod n.
Ñëåäóÿ êíèæêå Äèêñîíà [9], ðàññìîòðèì ìåòîä Òîíåëëè.
Ðàññìîòðèì x2 = c mod p, ãäå p = 1 + 2s γ  ïðîñòîå (çäåñü γ  íå÷åòíîå ÷èñëî), è
s−1
ïóñòü èçâåñòåí g  êâàäðàòè÷íûé íåâû÷åò ïî ìîäóëþ p [òî åñòü g 2 γ = −1]. Íåòðóäíî
s−1
âèäåòü, ÷òî γ è s âû÷èñëÿþòñÿ çà O(log p). Åñëè åñòü õîòÿ áû îäíî ðåøåíèå, òî c2 γ = 1
s−2
mod p. Ïîäáåðåì çíà÷åíèå 0 ∈ {0, 1} òàê, ÷òîáû c2 γ0 = 1 mod p, â òàêîì ñëó÷àå
g2

s−1

γ0 2s−2 γ

c

= 1 mod p

Ïîäáåðåì 1 ∈ {0, 1} òàê, ÷òîáû âûïîëíÿëîñü
g2

s−1

γ1 +2s−2 γ0 2s−3 γ

c

= 1 mod p

Ïðîäîëæèì ïîäáèðàòü òàêèì æå îáðàçîì i ∈ {0, 1}, ÷òîáû
s−1

g2

Îáîçíà÷èì m =
óðàâíåíèÿ:

Ps−2
j=0

γi +...+2s−1−i γ0 2s−2−i γ

c

j 2 , òîãäà â èòîãå ïîëó÷èì g
j

x = ±g mγ c

= 1 mod p
c = 1, îòêóäà ïîëó÷àåì ðåøåíèÿ

2mγ γ

γ+1
2

Íåòðóäíî óáåäèòüñÿ â òîì, ÷òî åñëè çàðàíåå èçâåñòåí íåâû÷åò g , òî ðåøåíèÿ x2 = c
mod p ìîæíî íàéòè çà ïîëèíîìèàëüíîå ïî log p ÷èñëî îïåðàöèé: íàéòè γ è s ìîæíî çà
s−2
s−2
O(log p), ïðè ýòîì s 6 log p; âñå ÷èñëà cγ , c2γ . . . c2 γ è g γ , g 2γ . . . g 2 γ âû÷èñëÿþòñÿ çà
2
O(s log p) = O(log p) [îäíî óìíîæåíèå, îñòàëüíûå îïåðàöèè  âçÿòèå îñòàòêà ïî ìîäóëþ
p], à äàëüøå, ïîäáèðàÿ êàæäûé i , íóæíî ïåðåìíîæàòü íå áîëåå s−2 ÷èñåë; òàêèì îáðàçîì,
ñóììàðíîå ÷èñëî îïåðàöèé åñòü O(log3 p).
Ìåòîä Òîíåëëè ýëåìåíòàðíî îáîáùàåòñÿ íà óðàâíåíèÿ âèäà x2 = c mod pk , ãäå
(p, c) = 1: åñëè x0  ðåøåíèå óðàâíåíèÿ x2 = c mod p, òî
xp0

k−1

c

pk −2pk−1 +1
2

mod pk

ÿâëÿåòñÿ êîðíåì: ïîñêîëüêó x20 = c + pl mod pk
2

k−1 pk −2pk−1 +1
k−1
k
k−1
k−1
k−1
k
k−1
2
x0p
c
= x2p
cp −2p +1 = (c + pl)p
cp
· cp −p
·c
0
k

k−1

k−1

mod pk

k−1

Ïî òåîðåìå Ýéëåðà cp −p
= 1 mod pk , à (c + pl)p
= cp
mod pk ïî òåîðåìå Êóììåðà [ðàñêðîåì ñêîáêè, ïîñìîòðèì, ÷òî âñå ìîíîìû, êðîìå ïåðâîãî, äåëÿòñÿ íà pk ], îòêóäà
è ñëåäóåò ðåçóëüòàò.
87

Àëãåáðà è òåîðèÿ ÷èñåë

òðþ-

×òîáû ïîëó÷èòü ðåøåíèå x2 = c mod pk äëÿ ëþáîãî c, ìîæíî âîñïîëüçîâàòüñÿ
2
k−1
,
k−1 , ÷òî xk−1 = c mod p
òîãäà ðåøåíèå xk óðàâíåíèÿ x2 = c mod pk òàêæå óäîâëåòâîðÿåò x2 = c mod pk−1 , îòêóäà ñëåäóåò, ÷òî xk = xk−1 + pk−1 b. Òàêèì îáðàçîì,

êîì Ãåíçåëÿ. Äîïóñòèì, ÷òî ìû óæå íàøëè òàêîå öåëîå x

x2k = (xk−1 + pk−1 b)2 = x2k−1 + 2xk−1 pk−1 b

mod pk .

Ïîýòîìó íàì ñòîèò íàéòè b òàê, ÷òîáû âûïîëíÿëîñü
2xk−1 pk−1 b = c − x2k−1

mod pk

Ýòî óðàâíåíèå èìååò åäèíñòâåííîå ðåøåíèå, òàê êàê p 6 |2b, òî gcd(2pk−1 b, pk ) = pk−1 , à
c − x2k−1 äåëèòñÿ íà pk−1 .

Äèñêðåòíîå ëîãàðèôìèðîâàíèå
Ñíà÷àëà, ñëåäóÿ [20], îïèøåì âåðîÿòíîñòíûé àëãîðèòì ïîèñêà ïîðîæäàþùåãî ýëåQ
ìåíòà (Z/pZ)× . Ïóñòü íàì èçâåñòíî ðàçëîæåíèå p − 1 = ri=1 pki i .
1: procedure Primitive-Element(p)
2:
for i ∈ [1; p] do
3:
while b 6= 1 do
4:
a ← random ∈ (Z/pZ)× \ {1}
5:
6:
7:
8:
9:
10:

b←a

p−1
pi

end while
p−1
ki

q i ← a pi

end forQ
return ri=1 qi
end procedure

Àëãîðèòì Primitive-Element âû÷èñëÿåò ïðèìèòâíûé ýëåìåíò
, ñðåäíåå âðåìÿ ðàáîòû ðàâíî O(log p).

Óòâåðæäåíèå 3.65.

(Z/pZ)×

4

Äîêàçàòåëüñòâî. Êîãäà i-àÿ èòåðàöèÿ áîëüøîãî öèêëà [ïî i ∈ [1; p]] ïðîéäåíà, ïîëó÷àåì, ÷òî ðàç a ∈ (Z/pZ)× \ {1}, ÷òî
k
p i

qi i = 1,

k −1
p i

qi i

6= 1

Îòñþäà ñëåäóåò, ÷òî ïîðÿäîê qi äåëèò pki i , íî íå ðàâåí pki i −1  çíà÷èò, ïîðÿäîê qi ðàâåí
Q
pki i . Îòñþäà î÷åâèäíî ñëåäóåò, ÷òî ïîðÿäîê ri=1 qi ðàâåí íàèìåíüøåìó îáùåìó êðàòíîìó
ïîðÿäêîâ qi , òî åñòü p − 1.
Òåïåðü íàéäåì Li  ñðåäíåå ÷èñëî èòåðàöèé öèêëà while âî âðåìÿ i-îé èòåðàöèè öèêëà. Ïîñêîëüêó âñå b, ïîëó÷åííûå ïðè âû÷èñëåíèè a
88

p−1
pi

, ðàâíîâåðîÿòíû, òî âåðîÿòíîñòü

Àëãåáðà è òåîðèÿ ÷èñåë
òîãî, ÷òî öèêë while îñòàíîâèòñÿ, ðàâíà p1i . Òàêèì îáðàçîì, Li  ñëó÷àéíàÿ âåëè÷èíà,
èìåþùàÿ ãåîìåòðè÷åñêîå ðàñïðåäåëåíèå, è
X pi − 1
1
E[Li ] =
n n =
1 6 2
p
1

i
pi
n∈N
Òàêèì îáðàçîì, ñóììàðíîå ñðåäíåå ÷èñëî èòåðàöèé öèêëà while åñòü E[L1 + . . . + Lr ] 6 2r.
Êàæäàÿ èòåðàöèÿ öèêëà âû÷èñëÿåòñÿ çà O(log3 p); ïîñêîëüêó
X
X
ki 6
ki log pi = log p,
r6
i

i

òî ñðåäíåå âðåìÿ ðàáîòû ðàâíî O(log p).
4



Íåòðóäíî âèäåòü, ÷òî ïîëíûé ïåðåáîð ïî âñåì ýëåìåíòàì e, a, a2 . . ., èìååò ñëîæíîñòü
O(|hai| log2 p), ãäå hai ⊂ (Z/nZ)×  ïîäãðóïïà, ïîðîæäåííàÿ n.  õóäøåì ñëó÷àå hai =
Θ(n). Ñóùåñòâóåò áîëåå ýôôåêòèâíûé
, òàêæå èçâåñòíûé êàê
, êîòîðûé ìû ðàññìîòðèì ÷óòü íèæå. Ñ÷èòàåì, ÷òî (a, n) = 1.
1: procedure Baby-Step-Giant-Step(a, b, n)

2:
m ← d ne
3:
for i ∈ [0, m) do
4:
S[i] ← ai

àëãîðèòì Øåíêñà

giant step

5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

baby step-

end for

y←b
for i ∈ [0; m) do
if ∃j : aj = b then
return im + j

else

y ← ya−m

end if
end for
end procedure

Çäåñü "baby-step øàã íà j < m, à "giant-step øàã íà m. Ôàêòè÷åñêè äèñêðåòíûé
ëîãàðèôì x ìîæíî ïåðåïèñàòü êàê mi + j , ãäå j ìîæíî íàéòè ïîèñêîì ïî S[1 . . . m]. Ïîñêîëüêó ëþáîå ÷èñëî â [0; n] ìîæíî ïåðåïèñàòü êàê mi + j äëÿ íåêîòîðûõ
0 6 i, j < m,
p
àëãîðèòì î÷åâèäíî êîððåêòåí. È baby steps, è giant steps òðåáóþò O( |hai| log2 p) áèòîâûõ
îïåðàöèé.

Ôàêòîðèçàöèÿ öåëûõ ÷èñåë
Ôàêòîðèçàöèÿ öåëîãî ÷èñëà  çàäà÷à, òåñíî ñâÿçàííàÿ ñ ïðîâåðêîé ïðîñòîòû. Îäíàêî äî ñèõ ïîð íåò íè ðàíäîìèçèðîâàííîãî àëãîðèòìà, ðåøàþùåãî çàäà÷ó ôàêòîðèçàöèè
89

Àëãåáðà è òåîðèÿ ÷èñåë
çà ïîëèíîìèàëüíîå â ñðåäíåì âðåìÿ. Íà äàííûé ìîìåíò ñàìûé áûñòðûé ðàíäîìèçèðîâàííûé àëãîðèòì, ñîâåðøàåò â ñðåäíåì ñóáýêñïîíåíöèàëüíîå ÷èñëî áèòîâûõ îïåðàöèé.
Áåç îãðàíè÷åíèÿ îáùíîñòè áóäåì ñ÷èòàòü n, êîòîðîå ðàçëàãàåì íà ìíîæèòåëè, íå÷åòíûì [íàéòè ìàêñèìàëüíóþ ñòåïåíü äâîéêè, äåëÿþùóþ n, òðèâèàëüíî ìîæíî ñäåëàòü çà
ïîëèíîì] è íå ïðåäñòàâèìûì â âèäå ab .
Ïðåæäå ÷åì ðàññìîòðåòü íåêîòîðûå àëãîðèòìû ôàêòîðèçàöèè öåëûõ ÷èñåë, ðàçáåðåì
îäèí ðåçóëüòàò, äîêàçàííûé Neeraj Kayal è Nitin Saxena, ñîàâòîðàìè ïîëèíîìèàëüíîãî
àëãîðèòìà ïðîâåðêè ïðîñòîòû.

• ×èñëî n ìîæåò áûòü ðàçëîæåíî íà ïðîñòûå ìíîæèòåëè äåòåðìèíèðîâàííûì ïîëèíîìèàëüíûì àëãîðèòìîì òèòòê
ñóùåñòâóåò ïîëèíîìèàëüíûé àëãîðèòì, íàõîäÿùèé íåêîòîðûé íåòðèâèàëüíûé àâòîìîðôèçì êîëüöà (Z/nZ)[x]/(x − 1).
×èñëî n ìîæåò áûòü ðàçëîæåíî íà ïðîñòûå ìíîæèòåëè â ñðåäíåì çà ïîëèíîìèàëüíîå àëãîðèòìîì òèòòê ñóùåñòâóåò ïîëèíîìèàëüíûé àëãîðèòì, íàõîäÿùèé ÷èñëî àâòîìîðôèçìîâ êîëüöà (Z/nZ)[x]/(x ).

Òåîðåìà 3.66 (Kayal, Saxena [2]).

2



2

• Ïóñòü φ : x 7→ ax + b [äëÿ íåêîòîðûõ a, b ∈ Z/nZ] 
àâòîìîðôèçì (Z/nZ)[x]/(x2 − 1). Ïîêàæåì, ÷òî φ  àâòîìîðôèçì òèòòê b = 0,
a2 = 1 â Z/nZ. Äåéñòâèòåëüíî, åñëè d = gcd(a, n), òî
n 
n
n
a
n
n
x = a x + b = n x + b = b,
φ
d
d
d
d
d
d

Äîêàçàòåëüñòâî.

è φ èíúåêòèâåí òèòòê ìíîæåñòâî { nd x | x ∈ Z/nZ} ñîñòîèò èç îäíîãî ýëåìåíòà,
òî åñòü 0 [êîòîðûé áóäåò â ëþáîì ñëó÷àå], òî åñòü òèòòê d = 1. Áîëåå òîãî,
φ(x2 ) = (φ(x))2 = (ax + b)2 = a2 x2 + 2abx + b2 = a2 + 2abx + b2 ,

îòêóäà a2 + b2 = 1 mod n è ab = 0 mod n, ÷òî òàêæå îçíà÷àåò, ÷òî b = 0 mod n
(ïîñêîëüêó gcd(a, n) = 1) è a2 = 1 mod n. Íåòðóäíî âèäåòü, ÷òî îòîáðàæåíèå
φ : x 7→ ax, ãäå a2 = 1 mod n, ÿâëÿåòñÿ àâòîìîðôèçìîì.
Èòàê, íåòðèâèàëüíûé àâòîìîðôèçì (Z/nZ)[x]/(x2 −1) ñóùåñòâóåò òèòòê åñòü
íåòðèâèàëüíîå ðåøåíèå a óðàâíåíèÿ x2 = 1, òî gcd(a + 1, n) äàåò íåòðèâèàëüíûé
äåëèòåëü n.
Òåïåðü ïðîâåðèì, ÷òî åñëè n ñîñòàâíîå, òî ñóùåñòâóåò íåòðèâèàëüíîå ðåøåíèå óðàâíåíèÿ x2 = 1 mod n. Ýòî ñëåäóåò èç ÊÒÎ: åñëè n = n1 n2 , ãäå
gcd(n1 , n2 ) = 1, òî a, óäîâëåòâîðÿþùèé a = 1 mod n1 è a = −1 mod n2 , òàêæå
óäîâëåòâîðÿåò óñëîâèÿì a2 = 1 mod n è a 6= ±1 mod n.
• Àíàëîãè÷íî ðàññóæäåíèÿì âûøå ìîæíî ïîêàçàòü, ÷òî âñå àâòîìîðôèçìû êîëüöà (Z/nZ)[x]/(x2 ) èìåþò âèä x 7→ ax, ãäå (a, n) = 1. Òàêèõ àâòîìîðôèçìîâ âñåãî
φ(n), è åñëè φ(n) èçâåñòíî, òî ðàçëîæåíèå n íà ïðîñòûå ìîæíî âîññòàíîâèòü â
90

Àëãåáðà è òåîðèÿ ÷èñåë
ñðåäíåì çà ïîëèíîìèàëüíîå ïî log n âðåìÿ [àëãîðèòì ñòðîèòñÿ àíàëîãè÷íî òåñòó
Ðàáèíà-Ìèëëåðà].


Ìåòîä êâàäðàòîâ Äèêñîíà. Íà÷íåì ñ ìåòîäà Äèêñîíà, èñïîëüçóþùåãî ñëó÷àéíûå
êâàäðàòû ïî ìîäóëþ öåëîãî ÷èñëà n. Ýòî áûë ïåðâûé ìåòîä, ðàáîòàþùèé çà ñóáýêñïîíåíöèàëüíîå âðåìÿ. Íàáëþäåíèå, ëåæàùåå â îñíîâå àëãîðèòìà, ìîæíî ïðîèëëþñòðèðîâàòü
íà ñëåäóþùåì ïðèìåðå.
Ïðèìåð 3.67. Ïóñòü n = 2183. Ïðåäïîëîæèì, ÷òî ìû óæå óñòàíîâèëè ðàâåíñòâà
4532 = 7

mod n,

10142 = 3

mod n,

2092 = 21

mod n.

Òîãäà ìû ïîëó÷èì (53 · 1014 · 209)2 = 212 mod n, òî åñòü 6872 = 212 mod n. Îòñþäà
ïîëó÷àåì, ÷òî (687 − 21) · (687 + 21) äåëèòñÿ íà n, ïîñêîëüêó 687 6= ±21 mod n, òî õîòÿ áû
îäèí èç gcd(687 − 21, n) è gcd(687 + 21, n) íå ðàâåí 1 èëè n.  äàííîì ñëó÷àå ìû âîîáùå
ïîëó÷àåì gcd(687−21, n) = 37, gcd(687+21, n) = 59, îáà ýòè ÷èñëà ïðîñòûå è 2183 = 37·59.
Çäåñü ìû âçÿëè êâàäðàòû, äàþùèå ïî ìîäóëþ ìàëûå ïðîñòûå [íå ïðåâîñõîäÿùèå,
ñêàæåì, íåêîòîðîãî B ] è ïðîèçâåäåíèÿ ìàëûõ ïðîñòûõ [â ïðèìåðå íàì õâàòèëî 3, 7 è
3 · 7], è èç ñðàâíåíèÿ a2 = b2 mod n ïîëó÷èëè íåòðèâèàëüíûå äåëèòåëè n.
Äàëåå ïóñòü B ∈ R+ .

Îïðåäåëåíèå 3.68. Îïðåäåëèì

ôàêòîð-áàçó

PB = {p1 , . . . pt } êàê ìíîæåñòâî âñåõ ïðîñòûõ ÷èñåë, íå ïðåâîñõîäÿùèõ B . ×èñëî b áóäåì íàçûâàòü B
, åñëè
b

-÷èñëîì

mod n = pi1 . . . pik äëÿ íåêîòîðûõ pi1 , . . . pik ∈ PB .

2

Îïðåäåëåíèå 3.69. Íàòóðàëüíîå ÷èñëî x íàçûâàåòñÿ y -ãëàäêèì, åñëè âñå åãî ïðîñòûå
äåëèòåëè íå ïðåâûøàþò y .

Íàïðèìåð, ñòåïåíè äâîéêè ÿâëÿþòñÿ 2-ãëàäêèìè, ÷èñëà 1, 2, 3, 4, 6, 8, 9, 12, 16, 18, 24 
3-ãëàäêèå, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16  5-ãëàäêèå.
Îöåíèì ïëîòíîñòü y -ãëàäêèõ ÷èñåë. Ââåäåì
Ψ(x, y) = {m 6 x | m is y − ãëàäêîå},

ψ(x, y) = |Ψ(x, y)|.

Ïîëîæèì, ÷òî m y -ãëàäêîå. Òîãäà m =
ãäå p1 , p2 , . . . , pt  ïðîñòûå ÷èñëà,
íå ïðåâîñõîäÿùèå y . Ñâåðõó ôóíêöèþ ψ(x, y) ìîæíî îöåíèòü ñëåäóþùèì îáðàçîì:
1 α2

1 p2

ψ(x, y) =

t
Y

(1 + logpi (x)) 6

i=1

t
Y

t
. . . pα
t ,

y

(1 + log2 (x)) = O((log x)t ) = O((log x) log y )

i=1

91

Àëãåáðà è òåîðèÿ ÷èñåë
Òåïåðü îöåíèì ψ(x, y) ñíèçó. Ìàêñèìàëüíàÿ
ñòåïåíü y , íà êîòîðóþ ìîæåò äåëèòüñÿ
P
x, ðàâíà logy (x). Íåòðóäíî âèäåòü, ÷òî ti=1 αi > logy (x) + t. Òàêèì îáðàçîì,
!
!
!
logy (x) + t
tlogy x
tlogy x
x
ψ(x, y) >
>
=Ω
=Ω
t
(logy x)!
(logy x)logy x
(logy x)2 logy x
Òåïåðü îïèøåì ñàì àëãîðèòì.
(1) Ñëó÷àéíî âûáåðåì a ∈ Z/nZ.
(2) b = a2 mod n.
(3) Ïðîâåðèòü, ÿâëÿåòñÿ ëè b B -ãëàäêèì
t
Q
i
(4) Åñëè ÿâëÿåòñÿ [B -ãëàäêèì], òî b =

i , ãäå {p1 , · · · , pt }  ìíîæåñòâî ïðîñòûõ,
i=1

íå ïðåâûøàþùèõ B .
(5) Âû÷èñëèòü t + 1 òàêèõ ïàð (a1 , b1 ), (a2 , b2 ), · · · , (at+1 , bt+1 ).
t
Q
α
(6) bj =
pi ij .
i=1
t+1
P

(7) Íàéòè βj òàêèå, ÷òî
(8) x =

t+1
Q

βj αij
j=1
t+1
Q βj 1
bj ) 2 .
(
j=1

β

aj j è y =

j=1

÷åòíî äëÿ êàæäîãî i.

×èñëî B ìû îïðåäåëèì ïîçäíåå. Cíà÷àëà ïîéìåì, ïî÷åìó øàã 7 íåîáõîäèì. Ðàññìîòt+1
Q βj
ðèì
bj , ãäå βj ∈ {0, 1}, äëÿ íåãî âûïîëíåíî
j=1
t+1
Y

β
bj j

=

j=1

Åñëè

t+1
P

t+1
Y

t
Y

β α
pi j ij

=

j=1 i=1

t
Y

t+1
P

βj αij

j=1

pi

i=1

βj αij ÷åòíà äëÿ âñåõ i ∈ [1; t], òî ñàìî ïðîèçâåäåíèå ÿâëÿåòñÿ êâàäðàòîì.

j=1

Ïîýòîìó çàäà÷à ïîèñêà βj òàêèõ, ÷òî âñå ñóììû

t+1
P

βj αij ÷åòíû, ýêâèâàëåíòíà ïîèñêó

j=1

ðåøåíèÿ ñèñòåìû ëèíåéíûõ óðàâíåíèé {

t+1
P

βj αij = 0} íàä F2 .

j=1

Íåòðóäíî òàêæå ïðîâåðèòü, ÷òî x è y óäîâëåòâîðÿþò x2 = y 2 ( mod n ):
x2 =

t+1
Y
j=1

92

2βj

aj

=

t+1
Y
j=1

β

bj j

mod n = y 2

mod n

Àëãåáðà è òåîðèÿ ÷èñåë
×òîáû îöåíèòü âåðîÿòíîñòü óñïåøíîãî âûïîëíåíèÿ îïåðàöèé (4)-(8), íàäî îöåíèòü T
 ÷èñëî B -ãëàäêèõ ÷èñåë â Z/nZ âèäà a2 mod n. Ëåãêî âèäåòü, ÷òî
1

ln n 12 ln n
T > ψ( n, k) ≈ ( 2
) ln k
ln k
Íî íàì íóæíà òàêæå íèæíÿÿ îöåíêà T .

Ïðåäïîëîæèì, ÷òî n íå äåëèòñÿ íè íà îäíî èç ïðîñòûõ p
òàêîâî, ÷òî p < n. Îáîçíà÷èì

Ëåììà 3.70.
r∈N

Òîãäà

1

< . . . < pt

2h
r

S = {b ∈ N | 1 6 b 6 N, b2

|S| >



mod N ∈ Ψ(N, pt )}

h2r
(2r)!

Äëÿ íà÷àëà äîêàçàòåëüñòâà ïîëîæèì n = q1l1 . . . qtlt è îïðåäåëèì
êâàäðàòè÷íûé õàðàêòåð χi íà (Z/qili Z)× êàê ñèìâîë ßêîáè ïî ìîäóëþ qili :
!
a
χi (a) =
qili
Äîêàçàòåëüñòâî.

Îòîáðàæåíèå χi : (Z/qili Z)× → Z/2Z ÿâëÿåòñÿ ãðóïïîâûì ãîìîìîðôèçìîì. Òîãäà ìû
ìîæåì ïîñòðîèòü îòîáðàæåíèå χ : (Z/nZ)× → G = (Z/2Z)t òàêèì îáðàçîì:


a mod n 7→ χ1 (a mod q1l1 ), . . . χt (a mod qtlt )
Ïóñòü
Q = {a ∈ N | 1 < a < n, gcd(a, n) = 1, ∃b ∈ N a = b2

mod n}

ìíîæåñòâî (îáðàòèìûõ) êâàäðàòîâ ïî ìîäóëþ n. Ñîãëàñíî ÊÒÎ ÷èñëî ÿâëÿåòñÿ êâàäðàòè÷íûì âû÷åòîì ïî ìîäóëþ n òîãäà è òîëüêî òîãäà êîãäà îí ÿâëÿåòñÿ êâàäðàòè÷íûì
âû÷åòîì ïî ìîäóëþ êàæäîãî qili , òî åñòü
a ∈ Q ⇐⇒ χ(a) = (1, . . . , 1)

Êðîìå òîãî, îáðàòèìûé êâàäðàò ïî ìîäóëþ qili èìååò ðîâíî äâà êâàäðàòíûõ êîðíÿ [qi 
íå÷åòíîå ïðîñòîå], è ñîãëàñíî ÊÒÎ ëþáîé ∈ Q èìååò 2t êâàäðàòíûõ êîðíåé [ïî ìîäóëþ
n].
Òåïåðü, äëÿ x ∈ R è s ∈ N ïîëîæèì
Ts (x) = {a ∈ N | a 6 x, ∃e1 , . . . , et ∈ N a = pe11 . . . pet t è e1 + . . . + et = s},

93

Powered by TCPDF (www.tcpdf.org)

Àëãåáðà è òåîðèÿ ÷èñåë
òî åñòü Ts (x)  íàáîð ph -ãëàäêèõ öåëûõ ÷èñåë íå
áîëüøå x ñ ðîâíî s (íå îáÿçàòåëüíî

îòëè÷íûìè) ïðîñòûìè äåëèòåëÿìè. Ðàçîáüåì Tr ( n) íà 2t ïîäìíîæåñòâ Ug äëÿ g ∈ G:

Ug = {a ∈ Tr ( n) : x mod n = g}.
Îáîçíà÷èì çà V îáðàç îòîáðàæåíèÿ óìíîæåíèÿ:
[
µ:
(Ug × Ug ) → N, µ(b, c) = bc

mod n

g∈G

Ïîñêîëüêó χ(bc mod n) = (1, . . . , 1) äëÿ âñåõ b, c ∈ Ug è g ∈ G, ïîëó÷èì V ⊂ Q. Êðîìå
òîãî, V ⊂ T2r (n), òàê ÷òî V ⊂ T2r (n) ∩ Q.
Êàæäûé ýëåìåíò â T2r (n) ∩ Q èìååò ðîâíî 2t êâàäðàòíûõ êîðíåé [ïî ìîäóëþ n] è âñå
t
ýòè êîðíè
ýëåìåíòîâ
S ëåæàò â S , ïîýòîìó |S| > 2 |T2r (n) ∩ Q|. Òåïåðü îöåíèì êîëè÷åñòâî

(b, c) ∈ g∈G Ug × Ug ñêëåèâàþòñÿ óìíîæåíèåì µ. Ïîñêîëüêó b, c 6 n è bc = a mod n,
òîãäà bc = â N. Òàêèì îáðàçîì, ìû äîëæíû ðàçáèòü 2r ïðîñòûõ ìíîæèòåëåé íà äâà
ïîäìíîæåñòâà,
 ÷òîáû ïîëó÷èòü b è c [êàê ïðîèçâåäåíèÿ ïî ïîäìíîæåñòâàì], è ñóùåñòâóåò
íå áîëåå 2r
ñïîñîáîâ ñäåëàòü ýòî. Òàêèì îáðàçîì,
r
|V |

[
X
(2r)!
>|
(Ug × Ug ) | =
|Ug |2
2
(r!)
g∈G
g∈G

Òàêèì îáðàçîì,
|S| > 2t |T2r (n) ∩ Q| > 2t |V | > 2t

(r!)2 X
|Ug |2
(2r)! g∈G

Òåïåðü ïðèìåíèì íåðàâåíñòâî Êîøè-Áóíÿêîâñêîãî:
!
!
!2
X
X
X
X

t
2
2
2
|Ug | =
1
|Ug |
>
1 · |Ug |
= |Tr ( n)|2
g∈G

g∈G

g∈G

g∈G



Ïîñêîëüêó
6 n, ýëåìåíò Tr ( n) ðàñïàäàåòñÿ â ïðîèçâåäåíèå r ïðîñòûõ ÷èñåë, íå
ïðåâîñõîäÿùèõ ph , ïîýòîìó
!

tr
t+r−1
|Tr ( n)| =
> .
r
r!
prt

Òàêèì îáðàçîì,
|S| > 2t


(r!)2
(r!)2 X
t2r
|Ug |2 >
|Tr ( n)|2 >
(2r)! g∈G
(2r)!
(2r)!


94

Àëãåáðà è òåîðèÿ ÷èñåë
Òàêèì îáðàçîì, íàì ïîíàäîáèòñÿ â ñðåäíåì íå áîëåå Nt(2r)!
ïîïûòîê äëÿ ïîèñêà ïîäõî2r
äÿùåãî B -÷èñëà. Ñîãëàñíî òåîðåìå î ðàñïðåäåëåíèè ïðîñòûõ ÷èñåë t > logBB [äëÿ B > 59].
Çàôèêñèðóåì r ∈ N è ïîëîæèì B = n1/2r . Òåïåðü îöåíèì ñíèçó ÷èñëî ïîïûòîê:
n(log B)2r
n
(2r)! <
(2r)2r = (log n)2r
t2r
B 2r

Îòñþäà ïîëó÷àåì, ÷òî ñëîæíîñòü ìåòîäà Äèêñîíà ðàâíà
Õ(B 3 + Bn2r+2 )

Ïîäáåðåì B òàê, ÷òîáû îáà ñëàãàåìûõ èìåëè îäèíàêîâûé ïîðÿäîê, òîãäà ïîëó÷èì 3n/2r ∼
n/2r + 2r log n, èëè æå
r=d

n
e.
2 log n

Îòñþäà ïîëó÷àåì ñëåäóþùåå óòâåðæäåíèå.

Àëãîðèòì Äèêñîíà ñîâåðøàåò â ñðåäíåì Õ
òîâûõ îïåðàöèé.

Òåîðåìà 3.71.



exp

q

9
2


log n log log n

áè-

(p − 1)-ìåòîä Ïîëëàðäà. Ïóñòü íàì íàäî ðàçëîæèòü ÷èñëî n = pq íà ïðîñòûå
ìíîæèòåëè. Ïóñòü p − 1  k-ãëàäêîå ÷èñëî. Ïóñòü K = (k!)lg p . Ñîãëàñíî ìàëîé òåîðåìå
Ôåðìà aK = 1 mod p. Äîïóñòèì òàêæå, ÷òî q − 1 íå ÿâëÿåòñÿ k-ãëàäêèì. Òîãäà aK = 1
mod q äëÿ ¾íåìíîãèõ a¿: åñëè aK = 1 mod q , òî agcd(K,q−1) = 1 mod q , è íå áîëåå
.
gcd(K, q − 1) îñòàòêîâ óäîâëåòâîðÿþò agcd(K,q−1) = 1 mod q è gcd(K, q − 1) 6 q−1
2
Òàêèì îáðàçîì, ìîæíî ïîñòðîèòü ñëåäóþùèé àëãîðèòì ðàçëîæåíèÿ íà ïðîñòûå ìíîæèòåëè. Ïóñòü n  ïîëîæèòåëüíîå öåëîå.
1: procedure (p − 1)-Pollard(n)
2:
for k ∈ N \ {1} do
3:
âçÿòü ñëó÷àéíûé a ∈ Z/nZ
4:
K ← (k!)(lg n)
5:
b ← aK mod n
6:
d ← gcd(b − 1, n)
7:
if 1 < d < n then
8:
return d
9:
10:
11:
12:
13:

else
return failure
end if
end for
end procedure

95

Àëãåáðà è òåîðèÿ ÷èñåë
Åñëè k âûáðàí êîððåêòíî, òî àëãîðèòì âûøå âîçâðàùàåò ñîáñòâåííûé äåëèòåëü n ñ
âåðîÿòíîñòüþ íå ìåíåå 21 . Ïîñêîëüêó
(k!)log

n

= ((k − 1)!)log

n

· klog n ,

íà âòîðîì øàãå ñîâåðøàåòñÿ Õ(k log n · log k) áèòîâûõ îïåðàöèé. Íà òðåòüåì øàãå íàäî ñîâåðøèòü Õ(k log2 n · log k) áèòîâûõ îïåðàöèé, à íà ÷åòâåðòîì  Õ(log n) áèòîâûõ
îïåðàöèé. Òàêèì îáðàçîì, ñëîæíîñòü àëãîðèòìà âûøå Õ(k2 log 2 n · log k).

Ôàêòîðèçàöèÿ ìíîãî÷ëåíîâ. Àëãîðèòì Êàíòîðà-Öàññåíõàóñà
Íàì äàí ïîëèíîì f íàä ïîëåì Fp ñòåïåíè n, íàøà çàäà÷à  ðàçëîæèòü åãî íà ìíîæèòåëè. Ìû õîòèì íàéòè åãî ðàçëîæåíèå íà ìíîæèòåëè â âèäå
f = g11 g12 · · · g1m1 g21 · · · gdmd

ãäå êàæäûé ìíîãî÷ëåí gQ
ij  íåïðèâîäèìûé ìíîæèòåëü f ñòåïåíè i. Ñíà÷àëà ïîïðîáóåì
ïî äàííîìó f ïîëó÷èòü j gij äëÿ êàæäîãî i, òî åñòü ïðîèçâåäåíèÿ âñåõ íåïðèâîäèìûõ
ìíîæèòåëåé f ñòåïåíè i. Ýòó ïðîöåäóðó ìû áóäåì íàçûâàòü
Ìû õîòèì íàéòè ïîëèíîìèàëüíûé àëãîðèòì äëÿ ïîèñêà äàííîãî ðàçëîæåíèÿ. Íåòðóäíî
óáåäèòüñÿ, ÷òî ðàçìåð âõîäà ìíîãî÷ëåíà [çàäàííîãî íàáîðîì êîýôôèöèåíòîâ] åñòü n log p,
òàê ÷òî íàì íóæåí àëãîðèòì ñëîæíîñòè O ((n log p)c ) äëÿ c.
Äëÿ íà÷àëà ïðèâåäåì ìíîãî÷ëåí f ê ìíîãî÷ëåíó f˜, ñâîáîäíîìó îò êâàäðàòîâ, íå
ðàçëàãàÿ f íà ìíîæèòåëè. Çàìåòèì, ÷òî åñëè f = h1d1 . . . hdkk [ãäå hi  íåïðèâîäèìûå
äåëèòåëè], òî


X
d
1
d −1
f 0 = hd11 −1 . . . hkk h1 . . . hk
,
h1

distinct degree factorization.

i∈[1;k]

îòêóäà

0

gcd(f, f ) =

hd11 −1

d −1
. . . hkk

gcd h1 . . . hk , h1 . . . hk


X d1
,
h1

i∈[1;k]

è ìíîãî÷ëåí h1 . . . hk
âçàèìíîïðîñò ñ ëþáûì hi , òàê êàê îí ìîæåò áûòü ïðåäñòàâëåí êàê hi P (x) + di h1 . . . hi−1 hi+1 . . . hk , îòêóäà
d1
i∈[1;k] h1

P

gcd(hi P (x) + di h1 . . . hi−1 hi+1 , hi ) = gcd(di h1 . . . hi−1 hi+1 , hi ) = 1,

ïîñêîëüêó âñå ìíîãî÷ëåíû hj íåïðèâîäèìû. Ïîýòîìó åñëè f íå ñâîáîäåí îò êâàäðàòîâ,
f
âìåñòî íåãî â äàëüíåéøåì ìîæíî ðàññìîòðåòü gcd(f,f
0) .
 ñëó÷àå êîíå÷íûõ ïîëåé ïîä ïðîèçâîäíîé ìû áóäåì ïîíèìàòü îòîáðàæåíèå xm 7→
mxm−1 . Âñå òå æå ðàññóæäåíèÿ èìåþò ìåñòî. Îäíàêî â ñëó÷àå êîíå÷íûõ ïîëåé ïðîèçâîäíàÿ îò íåïîñòîÿííîãî ìíîãî÷ëåíà ìîæåò áûòü íóëåâîé: ïðîèçâîäíàÿ f (x) = x2p − 3xp + 5
íàä ïîëåì Fp ðàâíà 0. Íåòðóäíî âèäåòü, ÷òî íàä Fp ïðîèçâîäíàÿ ìíîãî÷ëåíà f ðàâíà 0
96

Àëãåáðà è òåîðèÿ ÷èñåë
òèòòê âñå åãî ìîíîìû èìåþò ñòåïåíü êðàòíóþ p, òî åñòü f (x) = g(xp ) äëÿ íåêîòîðîãî ìíîãî÷ëåíà g . Òàêèì îáðàçîì, åñëè f 0 = 0, òî f (x) = g(xp ), è ìû ïåðåõîäèì ê ðàññìîòðåíèþ
g(x). Åñëè æå g 0 = 0, òî ñ íèì äåëàåì òî æå ñàìîå.  êîíöå êîíöîâ ïîëó÷èòñÿ ìíîãî÷ëåí,
õîòÿ áû îäèí ìîíîì êîòîðîãî èìååò ñòåïåíü íå êðàòíóþ p, à çíà÷èò, è ïðîèçâîäíàÿ òàêîãî
ìíîãî÷ëåíà íå ðàâíà íóëþ
òîæäåñòâåííî.
Q
Äëÿ íàõîæäåíèÿ j gij ïî äàííîìó f íàì ñòîèò âîñïîëüçîâàòüñÿ ñëåäóþùåé ôîðìóëîé:
xp

m

Y

−x=
f ∈Fp [x]

f (x),

 íåïðèâîäèìûé, deg f =d,d|m

 ÷àñòíîñòè, äëÿ m = 1 ïîëó÷àåì, ÷òî xp − 1  ïðîèçâåäåíèå âñåõ íåïðèâîäèìûõ ëèíåéíûõ ìíîãî÷ëåíîâ íàä Fp , ïðè÷åì êàæäûé ñîäåðæèòñÿ ñ åäèíè÷íîé êðàòíîñòüþ. Òàêèì
îáðàçîì, g1 = gcd(f, xp − Q
x) áóäåò ïðîèçâåäåíèåì âñåõ íåïðèâîäèìûõ äåëèòåëåé f ïåðâîé
ñòåïåíè  âåäü xp − x = a∈Fp (x − a), à ÍÎÄ äâóõ ìíîãî÷ëåíîâ áóäåò ñîñòîÿòü ðîâíî èç
íåïðèâîäèìûõ äåëèòåëåé f ïåðâîé ñòåïåíè. Òåïåðü ïóñòü f2 =

f
g1

2

è g2 = gcd(f2 , xp − x)
2

áóäåò â òî÷íîñòè ïðîèçâåäåíèåì íåïðèâîäèìûõ äåëèòåëåé f ñòåïåíè 2 [xp − x ðàñêëàäûâàåòñÿ â ïðîèçâåäåíèå âñåõ íåïðèâîäèìûõ ìíîãî÷ëåíîâ ñòåïåíè 1 è 2, íà ïðîèçâåäåíèå
ìíîãî÷ëåíîâ ñòåïåíè 1 ìû óæå ïîäåëèëè.]
1: procedure DistinctDegreeFactorization(f (x) ∈ Fp [x] ñòåïåíè n.)
2:
f0 = f
3:
for i ∈ [1; n] do
i
4:
Èñïîëüçóÿ áûñòðîå âîçâåäåíèå â ñòåïåíü si = xp mod fi−1
5:
gi = gcd(fi−1 , si − x).
f
6:
fi = i−1
gi
7:
8:
9:

end for
return {g1 , g2 , · · · , gn }.
end procedure

Àëãîðèòì Distinct Degree Factorization íàõîäèò ðàçëîæåíèå f = g1 . . . gn , â êîòîðîì gk  ïðîèçâåäåíèå íåïðèâîäèìûõ äåëèòåëåé ñòåïåíè k. Íåòðóäíî óáåäèòüñÿ â òîì,
÷òî ýòîò àëãîðèòì ïîëèíîìèàëåí.
Òåïåðü ìû ïåðåõîäèì ê ðàçëîæåíèþ ìíîãî÷ëåíà èç Fp íà ïðîñòûå ìíîæèòåëè. Êàê
è â ñëó÷àå ñ ÷èñëàìè, íàì äîñòàòî÷íî íàéòè õîòÿ áû îäèí íåòðèâèàëüíûé äåëèòåëü.
Ñîãëàñíî ðàññóæäåíèÿì âûøå ìû ìîæåì ñ÷èòàòü, ÷òî f ñâîáîäåí îò êâàäðàòîâ 
â ïðîòèâíîì ñëó÷àå ìû ïðèâåäåì åãî ê ìíîãî÷ëåíó, ñâîáîäíîìó îò êâàäðàòîâ. Äëÿ ñâîáîäíîãî îò êâàäðàòîâ ìíîãî÷ëåíà ìîæíî ïîñ÷èòàòü DDF è ïðîâåðèòü, ÿâëÿåòñÿ ëè ýòîò
ìíîãî÷ëåí íåïðèâîäèìûì [ïî÷åìó ýòî ìîæíî ñäåëàòü  óïðàæíåíèå äëÿ ÷èòàòåëÿ].
97

Àëãåáðà è òåîðèÿ ÷èñåë
Ñ êàæäûì gi , ïîëó÷åííûì àëãîðèòìîì Distinct Degree Factorization, áóäåì ðàáîòàòü îòäåëüíî. Òàê ÷òî ñ÷èòàåì, ÷òî íàø f ∈ Fp [x] = g1 · · · gm òàêîâ, ÷òî âñå gi íåïðèâîäèìû, îòëè÷íû è èìåþò ñòåïåíü d.
Òîãäà â ýòèõ ïðåäïîëîæåíèÿõ â ñèëó ÊÒÎ èìååì
Fp [x]/(f (x)) ' Fp [x]/(g1 (x)) × · · · × Fp [x]/(gm (x))

Ïîñêîëüêó êàæäûé gi  íåïðèâîäèìûé ìíîãî÷ëåí ñòåïåíè d, òî Fp [x]/(gi (x)) ' Fpd . Ïîýòîìó
Fp [x]/(f (x)) ' Fpd × · · · × Fpd

Áîëåå òîãî,
(Fp [x]/(f (x)))× ' F×
× · · · F×
pd
pd

Åñëè g  äåëèòåëü íóëÿ â Fp [x]/(f ), òî åãî îáðàç ïðè ãîìîìîðôçèìå èç ÊÒÎ åñòü
(a1 , a2 , · · · , am ), ãäå ai = 0. Áîëåå òîãî, åñëè ýòîò íåíóëåâîé äåëèòåëü íåòðèâèàëåí, òî
aj 6= 0 äëÿ íåêîòîðîãî j 6= i. Èíûìè ñëîâàìè, g èìååò íóëü ïî i-îé êîîðäèíàòå, ÷òî çíà÷èò,
÷òî g äåëèòñÿ íà gi , òàêèì îáðàçîì, g 6= 1. Áîëåå òîãî, g íåíóëåâîé ïî j -êîîðäèíàòå è,
òàêèì îáðàçîì, gj íå äåëèò g , òî åñòü g 6= f. Òàêèì îáðàçîì, gcd(g, f ) íå ðàâåí íè f , íè 1
è ÿâëÿåòñÿ òîãäà íåòðèâèàëüíûì äåëèòåëåì f .
Òàêèì îáðàçîì, çàäà÷à ïîèñêà íåòðèâèàëüíîãî äåëèòåëÿ ñâîäèòñÿ ê ïîèñêó äåëèòåëåé
íóëÿ â Fp [x]/(f (x)). Òåïåðü íàäî ïðèáåãíóòü ê ðàíäîìèçàöèè. Ðàññìîòðèì ñëó÷àéíûé
ýëåìåíò Fp [x]/(f (x))  íåêîòîðûé ìíîãî÷ëåí a(x) ñòåïåíè ìåíåå n. Åñëè íàì ïîâåçëî è
gcd(a, f ) 6= 1, òî ìû ïîëó÷èëè íåòðèâèàëüíûé äåëèòåëü f . Òîãäà
 áóäåì ñ÷èòàòü, ÷òî a 
íå äåëèòåëü íóëÿ â íàøåì êîëüöå [â ÷àñòíîñòè, a ∈ Fp [x]/(f )× .]
Ïîñêîëüêó ìû íå çíàåì äåëèòåëåé gi , ìû íå çíàåì ÿâíî ñîîòâåòñòâóþùåãî ìîðôèçìà
Fp [x]/(f (x)) ' Fpd × · · · × Fpd , õîòÿ è çíàåì î åãî ñóùåñòâîâàíèè. Îäíàêî åñëè îäíà èç
êîîðäèíàò a ïðè òàêîì îòîáðàæåíèè ðàâíà −1, òî ìîæíî ðàññìîòðåòü îáðàçû a(x) + 1,
è ñîîòâåòñòâóþùàÿ êîîðäèíàòà ó a(x) + 1 ðàâíà 0. Çíà÷èò, a(x) + 1 ÿâëÿåòñÿ äåëèòåëåì
íóëÿ. Âîçìîæíî, îäíàêî, ÷òî âñå êîîðäèíàòû a(x) + 1 = 0 ðàâíû −1. Ïîýòîìó ìû æåëàåì
íàéòè ýëåìåíòû, íå âñå êîîðäèíòû êîòîðûõ ðàâíû −1. Ìóëüòèïëèêàòèâíàÿ ãðóïïà F×

pd
d

àáåëåâà ãðóïïà of order pd − 1, òàê ÷òî äëÿ ëþáîãî åå ýëåìåíòà b âåðíî bp −1 = 1, ïîýòîìó
íàì äîñòàòî÷íî âîçâåñòè a â ñòåïåíü (pd − 1)/2 = M , ÷òîáû ïîëó÷èòü ±1.
Òàêèì îáðàçîì ïîëó÷èì ñëåäóþùóþ ïðîöåäóðó. Âîçüìåì ñëó÷àéíûé ìíîãî÷ëåí a(x)
d
ñòåïåíè ìåíåå n, ïðîâåðèì gcd(a, f ). Åñëè gcd(a, f ) 6= 1, òî âû÷èñëèì a(x)(p −1)/2 mod
M
M
f (x). Åñëè a îòîáðàæàëîñü ïî ÊÒÎ â (a1 , a2 , · · · , am ), òî a îòîáðàæàåòñÿ â (a1 , · · · , aM
m ),
â äàííîì ñëó÷àå êàæäûé èç aM
ðàâåí
ëèáî
1
,
ëèáî
−1.
i

Óòâåðæäåíèå 3.72.

íåçàâèñèìû.
98

Êàæäûé a

M
i

= 1

ñ âåðîÿòíîñòüþ 1/2, è âñå ñîáûòèÿ {a

M
i

= 1}

Àëãåáðà è òåîðèÿ ÷èñåë
Ïîñêîëüêó âñå gi ðàçëè÷íû, â ñèëó ÊÒÎ ñîáûòèÿ {aM
i = 1} íåçàâèñèìû. ×òîáû óäîñòîâåðèòüñÿ â òîì, ÷òî âåðîÿòíîñòü ñîáûòèÿ {bM = 1} ðàâíà 1/2,
ðàññìîòðèì îòîáðàæåíèå
Äîêàçàòåëüñòâî.

−→ Z/2Z,
ψ : F×
pd

b −→ bM

Íåòðóäíî âèäåòü, ÷òî ψ ÿâëÿåòñÿ ãîìîìîðôçèçìîì. Ïîýòîìó ÿäðî ψ  ïîäãðóïïà F×
pd
ýëåìåíòîâ b òàêèõ, ÷òî bm = 1. Êëàññîâ ñìåæíîñòè ïî ýòîé ïîäãðóïïå äâà, âòîðîé êëàññ
 ìíîæåñòâî ýëåìåíòîâ b òàêèõ, ÷òî bM = −1. Ïîñêîëüêó ìîùíîñòè êëàññîâ ñìåæíîñòè
äâà, òî âåðîÿòíîñòü ñîáûòèÿ {bM = 1} ðàâíà 1/2.

Ïîýòîìó êàæäàÿ êîîðäèíàòà ai ðàâíà 1 èëè −1 ñ âåðîÿòíîñòüþ 1/2. Ïîýòîìó âåðîÿòíîñòü òîãî, ÷òî âñå êîîðäèíàòû ðàâíû ëèáî 1, ëèáî −1, ðàâíà 1/2m . Ïîýòîìó ñ âåðîÿòíîñòüþ õîòÿ áû 1 − 2m−1 ìû íàéäåì âåêòîð, â êîòîðîì åñòü êîîðäèíàòû 1 è −1
îäíîâðåìåííî.
1: procedure Cantor-Zassenhaus(f ∈ Fp [x] of degree n.)
2:
if f íå ñâîáîäåí îò êâàäðàòîâ then
3:
return fe, ïîëó÷åííûé èç f ïðèâåäåíèåì êâàäðàòîâ
4:
5:
6:
7:
8:
9:
10:
11:
12:

end if

{g1 , g2 , · · · , gn } =
if gn 6= 1 then

DistinctDegreeFactoring(f )

return Irreducible
end if
for gi 6= 1 do

EqualDegreeFactorize(gi , d)

end for
end procedure

Ñ âåðîÿòíîñòüþ íåìåíåå 1 − 2m−1 ïîëó÷èòñÿ äåëèòåëü íóëÿ, à çíà÷èò, gcd(aM + 1, f )
 íåòðèâèàëüíûé äåëèòåëü f.
1: procedure EqualDegreeFactorize(f ∈ Fp [x] of degree n, d  ñòåïåíü âñåõ åãî íåïðèâîäèìûõ äåëèòåëåé)
2:
âçÿòü ñëó÷àéíûé ìíîãî÷ëåí a(x) ñòåïåíè ìåíüøå n.
3:
if gcd(a, f ) 6= 1 then
4:
return gcd(a, f )
5:
6:
7:
8:
9:
10:

end if

M ← (pd − 1)/2.
âû÷èñëèòü a0 (x) = a(x)M + 1.
if a0 6= 0 and gcd(a0 , f ) 6= 1 then
return gcd(a0 , f )

end if

99

Àëãåáðà è òåîðèÿ ÷èñåë
11:

end procedure
Àëãîðèòì Áåðëåêåìïà

Òåïåðü ðàññìîòðèì äðóãîé àëãîðèòì ôàêòîðèçàöèè ìíîãî÷ëåíà íàä êîíå÷íûì ïîëåì
 àëãîðèòì Áåðëåêåìïà. Ñíà÷àëà, êàê è ðàíüøå, ìû ïðîâåðèì, ÿâëÿåòñÿ ëè âõîäíîé
f (x) ∈ Fp [x] ñâîáîäíûì îò êâàäðàòîâ. Äàëåå áóäåì ñ÷èòàòü, ÷òî
f = f1 f2 · · · fm

ãëå fi  ðàçëè÷íûå íåïðèâîäèìûå äåëèòåëè f. Ïî ÊÒÎ ïîëó÷àåì
R = Fp [x]/(f ) = (Fp [x]/(f1 )) × (Fp [x]/(f2 )) × · · · × (Fp [x]/(fm ))

Ïóñòü di = deg fi , à n = deg f. Îáîçíà÷èì çà B îòîáðàæåíèå T − I , ãäå I  òîæåñòâåííîå îòîáðàæåíèå. Òîãäà B îòîáðàæàåò ëþáîé a ∈ R â ap − a.

Îïðåäåëåíèå 3.73.

Ïîäàëãåáðîé Áåðëåêåìïà áóäåì íàçûâàòü B = ker(B) = ker(T − I).

Ïóñòü a ∈ B. Ïî ÊÒÎ åìó ñîîòâåòñòâóåò ýëåìåíò (a1 , a2 , · · · , am ) â ïðÿìîé ñóììå
ñëàãàåìûõ Fp [x]/(fi ), â äàííîì ñëó÷àå
ap − a 7→ (ap1 − a1 , · · · , apm − am ).

 ñèëó òîãî, ÷òî a ∈ B, api − ai = 0 äëÿ ëþáîãî i. Çàìåòèì, ÷òî api − ai ÿâëÿåòñÿ ýëåìåíòîì
Fp [x]/(gi ) ' Fpdi è ñëåäîâàòåëüíî api − ai = 0 âåðíî òèòòê ai ∈ Fp . Íåòðóäíî âèäåòü, ÷òî
ýëåìåíòû Fpd , äëÿ êîòîðûõ xp − x = 0, îáðàçóþò â òî÷íîñòè Fp ⊂ Fp [x]/(gi ).
Òàêèì îáðàçîì, êàæäàÿ êîîðäèíàòà íàáîðà (a1 , a2 , · · · , am ) áóäåò ýëåìåíòîì ïîëÿ Fp
è, ñëåäîâàòåëüíî,
B ' Fp × · · · × Fp
Òàêèì îáðàçîì, êàæäàÿ êîîðäèíàòà áóäåò ýëåìåíòîì Fp è, ñëåäîâàòåëüíî,
B ' Fp × · · · × Fp

Ïîñêîëüêó B  ïðîèçâåäåíèå m êîïèé Fp , B  m-ìåðíîå ïðîñòðàíñòâî R íàä Fp .
Î÷åâèäíî, ÷òî {1, x, x2 , · · · , xn−1 } çàäàåò áàçèñ äëÿ R, íàäî íàéòè áàçèñ äëÿ B. Ïóñòü
îïåðàòîð T äåéñòâóåò íà R ñëåäóþùèì îáðàçîì:
T (xi ) =

n−1
X

αji xj

j=0

Òîãäà ìîæíî ðàññìîòðåòü ìàòðèöó (αji )i,j , ñîîòâåòñòâóþùóþ T , è äåéñòâèå T  óìíîæåíèå íà ýòó ìàòðèöó.
Òîãäà ìàòðèöó äëÿ B ìîæíî çàäàòü êàê B̂ = (αji )i,j − I. Ñëåäîâàòåëüíî, ÿäðî ýòîãî îòîáðàæåíèÿ  ìíîæåñòâî âåêòîðîâ v òàêèõ, ÷òî B̂v = 0,  ìîæåò áûòü íàéäåíî ñ
ïîìîùüþ àëãîðèòìà Ãàóññà.
100

Àëãåáðà è òåîðèÿ ÷èñåë
Èìåÿ áàçèñ äëÿ {b1 , b2 , · · · , bm }, ìû ìîæåì
P âçÿòü ñëó÷àéíûé ýëåìåíò B, ïðîñòî ðàññìîòðåâ m ñëó÷àéíûõ ýëåìåíòîâ am èç Fp è
ai bi áóäåò íàøèì ñëó÷àéíûì ýëåìåíòîì
B. Ëþáîé ýëåìåíò a ∈ B îòïðàâëÿåòñÿ â Fp × · · · × Fp ïî ÊÒÎ. Òàêèì îáðàçîì, ìû ìîæåì
p−1
ïðèìåíèòü èäåþ àëãîðèòìà Êàíòîðà-Öàññåíõàóñà: a 2 ñîîòâåòñòâóåò âåêòîðó èç 1 è −1.
1: procedure BerlekampFactorization(f ∈ Fp [x] ñòåïåíè n)
2:
Ñäåëàòü f ñâîáîäíûì îò êâàäðàòîâ.
3:
R ← Fp [x]/(f ), ðàññìîòðåííîå êàê n-ìåðíîå ëèíåéíîå ïðîñòðàíñòâî íàä Fp .
4:
Ïîñòðîèòü ìàòðèöó B̂ , ñîîòâåòñòâóþùóþ îòîáðàæåíèþ a 7→ ap − a.
5:
Èñïîëüçóÿ àëãîðèòì Ãàóññà, íàéòè áàçèñ {b1 , b2 , · · · , bm } ïîäàëãåáðû Áåðëåêåìïà
B.
P
6:
Âçÿòü {a1 , · · · , am−1 } ∈R Fp , b ←
ai bi .
p−1
2
+ 1, f ) 6= 1 then
7:
if gcd(b
p−1
8:
return gcd(b 2 + 1, f )
9:
10:

end if
end procedure

Òåîðåòèêî-ãðóïïîâûå àëãîðèòìû
Òåïåðü ïîãîâîðèì îá àëãîðèòìàõ â òåîðèè ãðóïï. Ìû áóäåì èìåòü äåëî ñ ïîäãðóïïàìè
Sym(Ω)  ãðóïïû ïåðåñòàíîâîê íåêîòîðîãî êîíå÷íîãî ìíîæåñòâà Ω. Ìû áóäåì èñïîëüçîâàòü íîòàöèþ Âåéëàíäòà: ïóñòü φ : G×X → X  äåéñòâèå, òîãäà áóäåì îáîçíà÷àòü φ(g)(x)
êàê xg . Áóäåì òàêæå íàçûâàòü ãðóïïó G ⊂ Sym(Ω)
, åñëè åå äåéñòâèå íà
Ω òðàíçèòèâíî.
Âû÷èñëåíèå îðáèòû ýëåìåíòà ÿâëÿåòñÿ îäíèì èç îñíîâíûõ âîïðîñîâ â òåîðåòèêîãðóïïîâûõ àëãîðèòìàõ.
Íàì äàíà ãðóïïà G, êîòîðàÿ äåéñòâóåò íà êîíå÷íîì ìíîæåñòâå Ω, è, ñëåäîâàòåëüíî,
G ìîæíî ðàññìàòðèâàòü êàê ïîäãðóïïó â Sym(Ω). Ïîñêîëüêó G ìîæåò áûòü î÷åíü áîëüøîé, â êà÷åñòâå ââîäà òàêæå äàí íåáîëüøîé ïîðîæäàþùèé íàáîð A ãðóïïû G. Ó÷èòûâàÿ
ýëåìåíò α ∈ Ω, ìû áû õîòåëè âû÷èñëèòü G-îðáèòó α, îáîçíà÷àåìóþ αG . Íàïîìíèì, ÷òî

òðàíçèòèâíîé

αG = {β ∈ Ω | ∃g ∈ G, β = αg }

Íàèâíûì ñïîñîáîì ÿâëÿåòñÿ ïîïûòêà ¾äîáðàòüñÿ¿ äî êàæäîãî ýëåìåíòà íà îðáèòå,
èñïîëüçóÿ äåéñòâèå ýëåìåíòîâ A íà α, à èìåííî:
1: procedure OrbitComputation(A, α)
2:
∆ = {α}
3:
while ∆ ðàñòåò do
4:
for a ∈ A, δ ∈ D ∈ ∆ do
5:
∆ = ∆ ∪ {δ g }
6:

end for

101

Àëãåáðà è òåîðèÿ ÷èñåë
7:
8:

end while
end procedure

Âðåìÿ âûïîëíåíèÿ ïî êðàéíåé ìåðå êâàäðàòè÷íî ïî |Ω|.
Âïîñëåäñòâèè ìû ìîæåì âîñïîëüçîâàòüñÿ ïîäõîäîì ¾ðàçäåëÿé è âëàñòâóé¿: êàê òîëüêî ìû ïîëó÷èì ðàçëîæåíèå ïî îðáèòå Ω, ìû ìîæåì èçó÷èòü äåéñòâèå ãðóïïû íà êàæäîé îðáèòå ïî îòäåëüíîñòè. Î÷åâèäíî, ÷òî íà êàæäîé îðáèòå äåéñòâèå ãðóïïû ÿâëÿåòñÿ
òðàíçèòèâíûì. Äëÿ èçó÷åíèÿ òðàíçèòèâíî äåéñòâóþùèõ ãðóïï èçó÷èì ¾áëîêè¿. Áóäåì
ïðåäïîëàãàòü, ÷òî äåéñòâèå G òðàíçèòèâíî.

Îïðåäåëåíèå 3.74. Ìíîæåñòâî ∆ ⊆ Ω íàçûâàåòñÿ áëîêîì, åñëè äëÿ ëþáîãî g ∈ G ëèáî
∆g = ∆, ëèáî ∆g ∩ ∆ = ∅. Ãðóïïà G íàçûâàåòñÿ
îäíîýëåìåíòíûå ìíîæåñòâà, ëèáî âñå Ω.

ïðèìèòèâíîé, åñëè âñå åå áëîêè  ëèáî

Ðàññìîòðèì íåêîòîðûå ïðèìåðû.
(1) Íåòðóäíî âèäåòü, ÷òî Sym(Ω) ïðèìèòèâíà.
(2) Åñëè G = A|Ω|  ìíîæåñòâî ÷åòíûõ ïåðåñòàíîâîê íàä Ω, ó íåå äîñòàòî÷íî ýëåìåíòîâ, ÷òîáû âñå åùå îñòàâàòüñÿ ïðèìèòèâíîé. Ýòî òàêæå ìîæíî ëåãêî ïðîâåðèòü.
Ïðåäïîëîæèì, ÷òî G äåéñòâóåò íà ñåáå, ñêàæåì, ïóòåì óìíîæåíèÿ ñëåâà, G 6 Sym(G).
Êàæäàÿ ïîäãðóïïà â G ÿâëÿåòñÿ áëîêîì, òàê êàê ñìåæíûå êëàññû ëèáî ñîâïàäàþò, ëèáî
íåïåðåñåêàþùèåñÿ. Â äåéñòâèòåëüíîñòè ëþáîé ñìåæíûé êëàññ òàêæå áóäåò áëîêîì.
Òàêèì îáðàçîì, ó íàñ åñòü çàìîùåíèå Ω òàêèìè áëîêàìè, ìû áóäåì íàçûâàòü èõ
.

áëî÷íîé ñèñòåìîé

Îïðåäåëåíèå 3.75.

Áëî÷íàÿ ñèñòåìà

äåéñòâèÿ ãðóïïû G íà Ω.

 ðàçáèåíèå ìíîæåñòâà Ω íà áëîêè çàäàííîãî

Îáðàòèòå âíèìàíèå, ÷òî åñëè ∆ ÿâëÿåòñÿ áëîêîì, òî è ∆g äëÿ êàæäîãî g ∈ G òàêæå
ÿâëÿåòñÿ áëîêîì. Äëÿ ýòîãî çàìîùåíèÿ âåðíà òåîðåìà, î÷åíü ïîõîæàÿ íà òåîðåìó Ëàãðàíæà î ïîäãðóïïàõ ãðóïïû. Îáðàòèòå âíèìàíèå, ÷òî â òàêîì ñëó÷àå äåéñòâèå äîëæíî áûòü
òðàíçèòèâíûì, èíà÷å òàêèå áëîêè ∆g íå ïîêðîþò âñå ìíîæåñòâî Ω.

Ïóñòü G äåéñòâóåò òðàíçèòèâíî íà ìíîæåñòâå Ω è ïóñòü ∆ ⊆ Ω
áóäåò ëþáûì áëîêîì. Òîãäà |∆| äåëèò |Ω|.

Òåîðåìà 3.76.

Ýòà òåîðåìà ñðàçó ïðèâîäèò ê ñëåäóþùåìó ñëåäñòâèþ.

Óòâåðæäåíèå 3.77.

åñëè |Ω|-å ÷èñëî.

Ëþáàÿ ãðóïïà G, äåéñòâóþùàÿ íà Ω òðàíçèòèâíî, ïðèìèòèâíà,

Ïðèìåð 3.78. Ïóñòü X  ãðàô, íàáîð èç íåêîòîðûõ k òðåóãîëüíèêîâ. Ðàññìîòðèì ãðóïïó åãî àâòîìîðôèçìîâ, äåéñòâóþùèõ íà íåãî. Âî-ïåðâûõ, îáðàòèòå âíèìàíèå, ÷òî ýòî
äåéñòâèå òðàíçèòèâíî, è, êðîìå òîãî, êàæäûé òðåóãîëüíèê áóäåò áëîêîì.
Òàêèì îáðàçîì, ãðóïïà àâòîìîðôèçìîâ ïðèìèòèâíà.
102

Àëãåáðà è òåîðèÿ ÷èñåë
Ïîñëåäíèé ïðèìåð õîðîøî ìîòèâèðóåò èñïîëüçîâàòü ïîäõîä ¾ðàçäåëÿé è âëàñòâóé¿.
Åñëè G òðàíçèòèâíà è ïðèìèòèâíà, ïóñòü ∆ áóäåò íàèìåíüøèì áëîêîì. Òåïåðü ãðóïïîâûå ýëåìåíòû Ω ñîîòâåòñòâóþò áëî÷íîé ñèñòåìå, ïîðîæäåííîé ∆. Îáðàòèòå âíèìàíèå,
÷òî G äåéñòâóåò íà ýòîé ñèñòåìå áëîêîâ ïåðåñòàíîâêàìè. À òàêæå ïóñòü ñèñòåìà áëîêîâ
áóäåò íîâûì íàáîðîì Ω1 , à ãðóïïà áóäåò ïðîåêòèâíîé âåðñèåé G è òåïåðü ìû ìîæåì çàäàòü âîïðîñ ¾ßâëÿåòñÿ ëè G0 ïðèìèòèâíîé èëè òðàíçèòèâíîé?¿ îòíîñèòåëüíî ìåíüøåãî
ìíîæåñòâà Ω.
Ïðîâåðêà, ÿâëÿåòñÿ ëè äåéñòâèå òðàíçèòèâíûì, ìîæåò áûòü âûïîëíåíà ñ ïîìîùüþ
âû÷èñëåíèÿ îðáèòû, íî íàì íóæíî òàêæå ïðîâåðèòü, ÿâëÿåòñÿ ëè ãðóïïà ïðèìèòèâíîé.
Çàìåòèì, ÷òî åñëè ∆1 è ∆2 ÿâëÿþòñÿ G-áëîêàìè, òî è ∆1 ∩ ∆2 òàêæå ÿâëÿåòñÿ áëîêîì.
Òåïåðü ìû ìîæåì ðàññìîòðåòü íàèìåíüøèé áëîê, ñîäåðæàùèé íàáîð ýëåìåíòîâ Ω.

Ãðóïïà G 6 Sym(Ω), äåéñòâóþùàÿ òðàíçèòèâíî íà Ω, ïðèìèòèâíà åñëè
è òîëüêî åñëè G -ìàêñèìàëüíàÿ ïîäãðóïïà â G.
Ëåììà 3.79.

α

Äîêàçàòåëüñòâî. Îáðàòèòå âíèìàíèå, ÷òî α óêàçûâàòü íå íóæíî, ïîñêîëüêó â ñèëó
òðàíçèòèâíîñòè äåéñòâèÿ G Gα è Gβ ñîïðÿæåíû äðóã ñ äðóãîì. Ëåãêî ïðîâåðèòü, ÷òî äëÿ
ëþáîãî g ∈ G òàêîãî, ÷òî gα = β , âûïîëíÿåòñÿ gGα g −1 = Gβ .
Ïðåäïîëîæèì, ÷òî {α} < ∆ < Ω  íåòðèâèàëüíûé áëîê. Ïóñòü H = {g ∈ G | ∆g = ∆}.
Ìû ïîêàæåì, ÷òî Gα < H < G, äîêàçàâ òåì ñàìûì ëåììó â îäíó ñòîðîíó.
ßñíî, ÷òî ïîñêîëüêó G äåéñòâóåò òðàíçèòèâíî è ∆ < Ω, H  ñîáñòâåííàÿ ïîäãðóïïà
â G. Òàêæå, åñëè g ∈ Gα , òî α ∈ ∆ ∩ ∆g 6= ∅. Òàê êàê ∆ ÿâëÿåòñÿ áëîêîì, òî ∆ = ∆g
è, ñëåäîâàòåëüíî, g ∈ H . Òàê êàê {α} < ∆ ñóùåñòâóåò β ∈ ∆, îòëè÷íûé îò α. Ïóñòü g 
ýëåìåíò ãðóïïû, êîòîðûé ïåðåâîäèò α â β . Òîãäà β ∈ ∆ ∩ ∆g , g ∈ H , íî g ∈
/ Gα . Òàêèì
îáðàçîì, Gα < H .
Òåïåðü äîêàæåì òåîðåìó â äðóãóþ ñòîðîíó. Ïóñòü Gα < H < G, ïîêàæåì òîãäà, ÷òî
αH = ∆  íàø íåòðèâèàëüíûé áëîê. Òàê êàê Gα < H , ∆ 6= {α}. Ïîêàçàòü ∆ < Ω íåìíîãî
ñëîæíåå. Ïîñêîëüêó Gα ÿâëÿåòñÿ ïîäãðóïïîé â G, Gα è åãî êëàññû ñìåæíîñòè ïî íåìó
ðàçáèâàþò G:
[
G=
Gα gβ
β∈Ω gβ :α7→β

È îáðàòèòå âíèìàíèå, ÷òî åñëè ëþáîé gβ ∈ H , òî âåñü êëàññ Gα gβ ñîäåðæèòñÿ â H .
Ñëåäîâàòåëüíî, òàê êàê ∆ = Ω ïîäðàçóìåâàåò H = G, íàøå ïðåäïîëîæåíèå H < G
âëå÷åò ∆ < Ω.
Îñòàëîñü òîëüêî ïîêàçàòü, ÷òî ∆ ÿâëÿåòñÿ áëîêîì. Ïðåäïîëîæèì, ÷òî ∆g ∩ ∆ 6= ∅,
0
òî äëÿ íåêîòîðîãî h, h0 ∈ H , αhg = αh , îòêóäà h0 gh−1 ∈ Gα < H . Ñëåäîâàòåëüíî, g ∈ H
g
è, òàêèì îáðàçîì, ∆ = ∆.

Óñòàíîâëåííàÿ âûøå ëåììà ÿâëÿåòñÿ âçàèìíî-îäíîçíà÷íûì ñîîòâåòñòâèåì ìåæäó
ïîäãðóïïàìè â G è áëîêàìè â Ω.
103

Àëãåáðà è òåîðèÿ ÷èñåë
Ìîæíî òàêæå äóìàòü, ÷òî G äåéñòâóåò íà {Gα g | α ∈ Ω}, ñîïîñòàâèâ êàæäîé òî÷êå
α ∈ Ω ïîäãðóïïó Gα è åå ñìåæíûå êëàññû.

Ïóñòü N  G  íîðìàëüíàÿ òðàíçèòèâíàÿ ïîäãðóïïà â G. Òîãäà îðáèòû
ôîðìèðóþò áëî÷íóþ ñèñòåìó.

Ëåììà 3.80.
N

Ìû õîòèì ïîêàçàòü, ÷òî αN  áëîê. Ïðåäïîëîæèì, αN g ∩αN 6= ∅,
òîãäà αn1 g = αn2 äëÿ íåêîòîðûõ n1 , n2 ∈ N è, ñëåäîâàòåëüíî, n1 gn−1
∈ Gα . Â ñèëó
2
íîðìàëüíîñòè N âûøåïðèâåäåííûå ýëåìåíòû ìîæíî âûðàçèòü êàê n3 g äëÿ íåêîòîðîãî
n3 ∈ N . Îòñþäà n1 gn−1
∈ N g è, ñëåäîâàòåëüíî, n2 ∈ N g , òîãäà N g è N ñîâïàäàþò, òåì
2
ñàìûì αN g = αN .

Äîêàçàòåëüñòâî.

Âûâîä 3.81. Åñëè G ïðèìèòèâíà, òî âñå åå íîðìàëüíûå ïîäãðóïïû òðàíçèòèâíû.
Ïîèñê áëî÷íîãî ðàçëîæåíèÿ. Òåïåðü ïåðåéäåì ê òàêîé çàäà÷å: ïî âõîäíîé ãðóïïå
hAi = G 6 Sym(Ω) íàéòè íåòðèâèàëüíóþ áëî÷íóþ ñèñòåìó èëè ïîêàçàòü åå ïðèìèòâíîñòü.
Çàìåòüòå, ÷òî åñëè G íå ÿâëÿåòñÿ ïðèìèòèâíîé, äëÿ êàæäîãî α ∈ Ω ñóùåñòâóåò
òàêîé β 6= α, ÷òî G èìååò íåòðèâèàëüíûé áëîê, ñîäåðæàùèé {α, β}. È, ñëåäîâàòåëüíî,
äîñòàòî÷íî ðåøèòü ýôôåêòèâíî ñëåäóþùóþ çàäà÷ó.
MINBLOCK: ïî âõîäíûì {α, β} ⊆ Ω íàéòè ìèíèìàëüíûé áëîê, ñîäåðæàùèé α è β .
Îïðåäåëèòü íåîðèåíòèðîâàííûé ãðàô X = (V, E) òàêîå, ÷òî V = Ω è E = {(α, β)}G =
{(αg , β g ) | g ∈ G}.
Óòâåðæäåíèå 3.82.

áëîêîì.

Ñâÿçíàÿ êîìïîíåíòà C , ñîäåðæàùàÿ α, ÿâëÿåòñÿ ìèíèìàëüíûì

Äîêàçàòåëüñòâî. Îáðàòèòå âíèìàíèå, ÷òî G 6 Aut(X), à òàêæå G òðàíçèòèâíà íà
Ω. Ñëåäîâàòåëüíî, ñâÿçíûå êîìïîíåíòû äîëæíû äâèãàòüñÿ â öåëîì è, òàêèì îáðàçîì, îíè
ÿâëÿþòñÿ áëîêàìè; â ÷àñòíîñòè, C ÿâëÿåòñÿ áëîêîì.
Ïðåäïîëîæèì, ÷òî C íå ÿâëÿåòñÿ ìèíèìàëüíûì, ïóñòü C1 ( C áóäåò áëîêîì. Ïîñêîëüêó îãðàíè÷åíèå ñòðîãîå, ñóùåñòâóåò ðåáðî (γ, δ) = (αg , β g ) òàêîé, ÷òî γ ∈ C1 è
δ ∈ C \ C1 . Òåïåðü γ ∈ C1g ∩ C1 , íî δ ∈ C1g \ C1 , ÷òî ïðîòèâîðå÷èò òîìó, ÷òî C1 ÿâëÿåòñÿ
áëîêîì. Ñëåäîâàòåëüíî, C äîëæåí áûòü ìèíèìàëüíûì áëîêîì, ñîäåðæàùèì α è β .


Òåïåðü ìîæíî ïåðåáðàòü âñå β äëÿ äàííîãî α, ÷òîáû íàéòè ðåøåíèå íåòðèâèàëüíîé
çàäà÷è î áëîêàõ.

Çàäà÷à ïðèíàäëåæíîñòè
Òåïåðü ðåøèì çàäà÷ó ïðèíàäëåæíîñòè. Ïî âõîäíîé ãðóïïå hAi = G 6 Sym(Ω) è
g ∈ Sym(Ω) íàäî îïðåäåëèòü, âåðíî ëè óòâåðæäåíèå g ∈ G.
Ýòà ïðîáëåìà ÿâíî ñâîäèòñÿ ê ïðîáëåìå âû÷èñëåíèÿ ïîðÿäêà ãðóïïû, çàäàííîé íàáîðîì ïîðîæäàþùèõ (äëÿ ïðîâåðêè g ìîæíî äîáàâèòü g â íàáîð ïîðîæäàþùèõ è ïðîâåðèòü,
104

Àëãåáðà è òåîðèÿ ÷èñåë
èçìåíèëñÿ ëè ïîðÿäîê). Ìû ïîïðîáóåì èñïîëüçîâàòü ïîäõîä ¾ðàçäåëÿé è âëàñòâóé¿ äëÿ
ðåøåíèÿ ýòîé çàäà÷è.
Íàì ïðèãîäèòñÿ ôîðìóëà |G| = |Gα ||αG |. Ìû çíàåì, êàê ýôôåêòèâíî âû÷èñëÿòü
G
α , è ñëåäîâàòåëüíî, ìîæåì ñâåñòè çàäà÷ó ê ìåíüøåé ïîäãðóïïå Gα . Îñòàëîñü íàéòè
íåáîëüøîé íàáîð ïîðîæäàþùèõ äëÿ Gα .

Ïóñòü hAi = G è H 6 G. Ïóñòü R áóäåò ìíîæåñòâîì ðàçëè÷íûå ïðåäñòàâèòåëè ñìåæíûõ êëàññîâ H , òî åñòü
Òåîðåìà 3.83 (Schreier).

G=

çàòåì
ãåíåðèðóåò H

G

Hr

r∈R

B = {r1 ar2−1 | a ∈ A; r1 , r2 ∈ R} ∩ H

Äîêàçàòåëüñòâî. Äëÿ ëþáûõ çàäàííûõ r1 ∈ R è a ∈ A ñóùåñòâóåò åäèíñòâåííûé
r2 òàêîé, ÷òî r1 ar2−1 ∈ H (ïîòîìó ÷òî Hr1 a = Hr2 ).

RA
⇒ RAA



BR(r1 a = (r1 ar2−1 )r2 )



hBiR



hBiRA



hBihBiR = hBiR

⇒ ∀t ≥ 0, RAt



hBiR

⇒G

=

hBiR

Òåïåðü, òàê êàê G ìîæíî ðàçáèòü íà ñìåæíûå êëàññû H è åñòü ðàçëè÷íûå ïðåäñòàâèòåëè
êàæäîãî ñìåæíîãî êëàññà â R, åñëè òîëüêî íå ïîëó÷èëîñü, ÷òî hBi = H , hBiR íå ìîãóò
ïîêðûòü âñþ ãðóïïó. Ñëåäîâàòåëüíî, hBi = H .

Çàòåì ìîæíî ïîñìîòðåòü íà H = Gα , ïðåäñòàâèòåëåé ñìåæíûõ êëàññîâ èìåþò âèä
gβ : α 7→ β è ìîãóò áûòü íàéäåíû âû÷èñëåíèåì îðáèòû. Íî ýòî âñå íå äàåò æåëàåìîå ðåøåíèå, òàê êàê ìîùíîñòü íàáîðà ïîðîæäàþùèõ áûñòðî ðàñòåò (|B| = |R||H|), è ñëîæíîñòü
â èòîãå áóäåò ýêñïîíåíöèàëüíîé ïî n. Íî ñóùåñòâóåò áîëåå îïòèìàëüíûé àëãîðèòì.
Èäåÿ ñîñòîèò â ñëåäóþùåì: äëÿ ëþáûõ äâóõ ýëåìåíòîâ π è ψ â B , åñëè 1π = 1ψ (è π ,
è ψ îòîáðàæàþò 1 â îäèí è òîò æå ýëåìåíò), çàìåíèì {π, ψ} íà {π, π −1 ψ}. Òàêèì îáðàçîì
ìû ïîëó÷èì äâà ýëåìåíòà, îòîáðàæàþùèå 1 â ðàçíûå ýëåìåíòû. Ïîâòîðÿÿ ýòîò ïðîöåññ
çàìåíû, ìû ìîæåì ãàðàíòèðîâàòü, ÷òî ýëåìåíòû B íèêîãäà íå áîëüøå n2 .
Äëÿ äàííîé ïîäãðóïïû G (çàäàííîé ìàëûì ïîðîæäàþùèì ìíîæåñòâîì, ñêàæåì,
G = A ) ãðóïïû ïåðåñòàíîâîê Sn è ïåðåñòàíîâêè g ∈ Sn , ïðîáëåìà ïðèíàäëåæíîñòè
ñîñòîèò â òîì, ÷òîáû ðåøèòü, èñòèííî ëè óòâåðæäåíèå g ∈ G. Åñëè îòâåò ¾äà¿, ìû òàêæå
çàõîòåëè áû ïðåäñòàâèòü g êàê ïðîèçâåäåíèå ïîðîæäàþùèõ. Íàñêîëüêî äëèííûì áûëî áû
105

Àëãåáðà è òåîðèÿ ÷èñåë
ïðåäñòàâëåíèå g = ai1 ai2 . . . aiN êàê ñëîâà îò îáðàçóþùèõ â õóäøåì ñëó÷àå? Ìû ìîæåì
óáåäèòüñÿ, ÷òî N 6 |G| − 1: ðàññìîòðèì ïðîèçâåäåíèÿ
s1 = ai1 , s2 = ai1 ai2 , . . . , sN = ai1 ai2 . . . aiN .

Åñëè N > |G| − 1, òî ëèáî sj = e, â ýòîì ñëó÷àå ìû ìîæåì íàïèñàòü g = aij+1 . . . aiN , ëèáî
sj = sk äëÿ íåêîòîðûõ j è k, è â ýòîì ñëó÷àå ìû ìîæåì íàïèñàòü g = ai1 . . . aij aik+1 . . . aiN ,
ïîýòîìó â ëþáîì ñëó÷àå äëèíó ïðåäñòàâëåíèÿ ìîæíî óìåíüøèòü.
Òåì íå ìåíåå N ìîæåò áûòü î÷åíü áîëüøèì. Íàïðèìåð, ïóñòü n = p1 + p2 + · · · + pm ,
ãäå pi ÿâëÿþòñÿ ðàçëè÷íûìè ïðîñòûìè ÷èñëàìè, òîãäà ðàññìîòðèì öèêëè÷åñêóþ ãðóïïó,
ïîðîæäàåìóþ
a = (1, 2 . . . , p1 )(p1 + 1 . . . , p1 + p2 )(. . . )

...

(. . . ) = C1 C2 . . . Cm .

Çäåñü Ci  íåïåðåñåêàþùèåñÿ öèêëû ñ äëèíàìè pi , ïîýòîìó ïîðÿäîê a ðàâåí M = p1 p2 . . . pm .
Ãðóïïà ÿâëÿåòñÿ G = {a} = {1, a, a2 , . . . , aM −1 }, â íåé aM −1 ìîæíî çàïèñàòü òîëüêî êàê
ïðîèçâåäåíèå M −1 ðàç a. Èòàê, çäåñü N = p1 p2 . . . pm −1 > 2m −1, è ïî òåîðåìå î ïðîñòûõ
÷èñëàõ ìû çíàåì, ÷òî m = Ω( lnppmm ). Äàëåå, ïîñêîëüêó
ïîëó÷àåì pm >



n = p1 + p2 + · · · + pm 6 1 + 2 + 3 + · · · + pm 6 pm 2 ,
n, ïîýòîìó
N > 2 c√n − 1,
log n

òî åñòü íå ïîëèíîìèàëüíà ïî n.
Òàêèì îáðàçîì, ìû íå ìîæåì íàéòè çà ïîëèíîìèàëüíîå âðåìÿ ïðåäñòàâëåíèå ýëåìåíòà êàê ïðîèçâåäåíèå ïîðîæäàþùèõ, ïðåäñòàâëåíèå äîëæíî áûòü ñõåìîé íà A.  ïðèâåäåííîì âûøå ïðèìåðå aM −1 ìîæåò áûòü âû÷èñëåíî çà ïîëèíîìèàëüíîå âðåìÿ ñ ïîìîùüþ
áûñòðîãî óìíîæåíèÿ. Íàø àëãîðèòì äàñò àíàëîãè÷íîå õîðîøåå ïðåäñòàâëåíèå.
Ïðîâåðêà ïðèíàäëåæíîñòè ñâîäèòñÿ ê çàäà÷å
, êàê g ∈ G ⇐⇒
|G| = |G∪g|. Èäåÿ ðåøåíèÿ ïîñëåäíåé çàäà÷è, êàê ìû âèäåëè, ñîñòîèò â òîì, ÷òîáû íàéòè
áàøíþ ïîäãðóïï
G = G(0) > G(1) > · · · > G(n−1) = {1}
òàê, ÷òîáû ëåãêî áûëî âû÷èñëèòü èíäåêñ [Gi−1 : Gi ] äëÿ êàæäîãî i. Òîãäà ìîæíî âîñQ
i−1
ïîëüçîâàòüñÿ ôîðìóëîé |G| = n−1
: Gi ].
i=1 [G
Ðàññìîòðèì ïîòî÷å÷íûå ñòàáèëèçàòîðû è âçãëÿíåì íà áàøíþ ïîäãðóïï

âû÷èñëåíèÿ ïîðÿäêà

G(i) = {g ∈ G | j g = j äëÿ âñåõ j, 1 6 j 6 i}

Çäåñü [Gi−1 : Gi ] 6 n − i äëÿ êàæäîãî i (ïîñêîëüêó ïðè ôèêñèðîâàííîì i − 1 îñòàåòñÿ
n − i âûáîðîâ äëÿ èíäåêñà i), è íàø àëãîðèòì áóäåò âû÷èñëÿòü åãî ïóòåì íàõîæäåíèÿ
ñèñòåìû ïðåäñòàâèòåëåé ñìåæíûõ êëàññîâ äëÿ íåãî. Àëãîðèòì òàêæå äàñò íàì íîâûé
ïîðîæäàþùèé íàáîð äëÿ G; åãî ìîæíî èñïîëüçîâàòü, ÷òîáû íå ïåðåñ÷èòûâàòü íàáîð
ïîðîæäàþùèõ ïðè ïîâòîðíûõ ïðîâåðêàõ ïðèíàäëåæíîñòè.
106

Àëãåáðà è òåîðèÿ ÷èñåë
Êàê íàéòè ïðåäñòàâèòåëåé ñìåæíûõ êëàññîâ ïî G(1) â G? Ïóñòü X1  îðáèòà 1 ïîä
äåéñòâèåì G è äëÿ ëþáîãî k ∈ X1 ïóñòü g1k  ýëåìåíò, êîòîðûé îòîáðàæàåò íà íåãî 1
(òî åñòü 1g1k = k). Òîãäà
G = ∪k∈X1 G(1) g1k
Ïîçæå ìû óâèäèì, êàê íàéòè íåáîëüøîé ïîðîæäàþùèé äëÿ G(1) . Ïðåäïîëàãàÿ, ÷òî ìû
ìîæåì ñäåëàòü ýòî, ìû ìîæåì àíàëîãè÷íûì îáðàçîì íàéòè X2 , îðáèòó 2 ïîä äåéñòâèåì
G(1) , íàéòè g2k òàêèå, ÷òî k = 2g2k , è àíàëîãè÷íî íàéòè ïðåäñòàâèòåëåé ñìåæíûõ êëàññîâ
G(2) â G(1) .
 îáùåì, äëÿ êàæäîãî i îò 1 äî n ìû íàõîäèì Xi  îðáèòó i ïîä äåéñòâèåì G(i−1) ,
à òàêæå äëÿ êàæäîãî ýëåìåíòà k ∈ Xi  ýëåìåíò gik òàêîé, ÷òî igik = k. Çàòåì G(i−1) =
∪k∈X G(i) gik
Âçÿâ îáúåäèíåíèå íàáîðîâ ïðåäñòàâèòåëåé ñìåæíûõ êëàññîâ, ìû ïîëó÷àåì ïîðîæäàþùèé íàáîð äëÿ G.

Îïðåäåëåíèå 3.84. Ïóñòü Ω  óïîðÿäî÷åííîå ìíîæåñòâî {ω1 , ω2 , . . . , ωn }, à G 6 Sym(Ω).

Ñèëüíûé ïîðîæäàþùèé íàáîð îòíîñèòåëüíî ýòîãî óïîðÿäî÷åíèÿ  îáúåäèíåíèå ìíîæåñòâà ïðåäñòàâèòåëåé ïðàâûõ ñìåæíûõ êëàññîâ äëÿ G(i) â G(i−1) äëÿ 0 6 i 6 n − 1.

Äëÿ äàííîãî g ∈ G ïîëîæèì k1 = 1g . Åñëè k ∈
/ X1 , ìû íåìåäëåííî äåëàåì âûâîä,
−1
÷òî g ∈
/ G. Èíà÷å ïóñòü g (1) = gg1k
. Ïî ïîñòðîåíèþ g (1) ∈ G(1) . Çàòåì, äîïóñòèâ, ÷òî
(1)
/ X2 , ìû ìîæåì îñòàíîâèòüñÿ è âûäàòü g ∈
/ G; èíà÷å ïîëîæèì
k2 = 2g ïðè óñëîâèè k2 ∈
−1 −1
g (2) = gg1k
g
è
ïðîäîëæèì
àíàëîãè÷íûì
îáðàçîì.
Äðóãèìè
ñëîâàìè,
äëÿ êàæäîãî i
2k
1
2
îò 1 äî n ìû ïîëîæèì ki = iG(i−1) , ïðåðâàòüñÿ â ñëó÷àå åñëè ki ∈
/ Xi è óñòàíîâèòü
g (i) = g (i−1) giki â ïðîòèâíîì ñëó÷àå, òîãäà g (i) ãàðàíòèðîâàííî íàõîäèòñÿ â G(i) . Åñëè â
ëþáîé ìîìåíò
−1 −1
−1
g (r) = gg1k
g
. . . grk
= 1,
r
1 2k2
òîãäà ìû èìååì ïðåäñòàâëåíèå g êàê ïðîèçâåäåíèå ýëåìåíòîâ G. Åñëè g ∈ G, òî òàêîå
ïðåäñòàâëåíèå ãàðàíòèðîâàíî áóäåò íàéäåíî çà êîíå÷íîå âðåìÿ, èáî åñëè ìû íå ïðåðâàëèñü ê ìîìåíòó, êîãäà i ïðèíèìàåò çíà÷åíèå n, òî g (n−1) ∈ G(n−1) = {1}.

Ëåììà Øðàéåðà. Íàø àëãîðèòì âûøå äëÿ íàõîæäåíèÿ ñèëüíîãî ïîðîæäàþùåãî
ìíîæåñòâà çàâèñèò îò âîçìîæíîñòè íàéòè ïîðîæäàþùèé íàáîð äëÿ G(i) , åñëè èçâåñòíî
ìíîæåñòâî ïîðîæäàþùèõ äëÿ G(i−1) . Ýòî âîçìîæíî áëàãîäàðÿ ëåììå Øðàéåðà.
Äëÿ êàæäîãî r1 è a ñóùåñòâóåò åäèíñòâåííûé r2 òàêîé, ÷òî r1 ar2−1 = h, äëÿ ëþáîãî
h â H , ïîýòîìó ìû çíàåì, ÷òî |B| 6 |R||A|. Îäíàêî îäíîãî ýòîãî íåäîñòàòî÷íî, ÷òîáû
ïîñòðîèòü ïîëèíîìèàëüíûé àëãîðèòì  ðàçìåð ìíîæåñòâà ïîðîæäàþùèõ ìîæåò óâåëè÷èâàòüñÿ íà Θ(n) êàæäûé ðàç. ×òîáû èçáåæàòü ýòîãî, íàì íóæíî óáåäèòüñÿ, ÷òî ìû
ìîæåì ñîõðàíèòü ìàëåíüêîå ïîðîæäàþùåå ìíîæåñòâî.
Òåîðåìà 3.85. Äëÿ ëþáîé ãðóïïû G 6 S ìû ìîæåì íàéòè ïîðîæäàþùèé åå íàáîð
ýëåìåíòîâ ðàçìåðîì íå áîëåå n .
n

2

107

Àëãåáðà è òåîðèÿ ÷èñåë
Èäåÿ ñîñòîèò â òîì, ÷òîáû óäàëèòü êîëëèçèè. Ïðåäïîëîæèì, π è ψ  äâà ýëåìåíòà
ïîðîæäàþùåãî ìíîæåñòâà, êîòîðûå îòîáðàæàþò 1 â îäèí è òîò æå ýëåìåíò, òî åñòü 1π =
1ψ . Ìû çàìåíèì {π, ψ} íà {π, ψπ −1 }. Ýòî ãàðàíòèðóåò, ÷òî îäèí èç ýëåìåíòîâ ôèêñèðóåò
1, è ó÷èòûâàåòñÿ íà ïîñëåäóþùèõ óðîâíÿõ.
Ëó÷øèé ñïîñîá ñìîòðåòü íà ýòî  ðàññìîòðåòü òàáëèöó, â êîòîðîé ñòðîêà i ïðåäñòàâëÿåò G(i) . Íà÷íåì ñ íèæíåé ñòðîêè, ïðåäñòàâëÿþùåé G(0) = G. Äëÿ êàæäîãî ýëåìåíòà
π ∈ B , åñëè 1π = 1, ïåðåìåñòèì åãî â ñòðîêó G(1) , èíà÷å ïîìåñòèì åãî â ñòîëáåö 1π .
Âñÿêèé ðàç, êîãäà âîçíèêàþò êîëëèçèè, ïðîäåëàåì óêàçàííîå âûøå ñîêðàùåíèå è îòïðàâèì ýëåìåíò, êîòîðûé ñîõðàíÿåò 1, íà ñëåäóþùóþ ñòðî÷êó. Ïîñëå çàâåðøåíèÿ ñòðîêè 1
áîëüøå íåò ñòîëêíîâåíèé ïåðåéäåì ê ñëåäóþùåé ñòðîêå è ïîâòîðèìýòîò ïðîöåññ.
Èíûìè ñëîâàìè, ìû ïðîäåëûâàåì ñëåäóþùèé àëãîðèòì.
1: procedure Reduce(B )
2:
B0 = B
3:
A[][], ïóñòîé ìàññèâ n × n
4:
for i = 0to n − 1 do
5:
for ψ ∈ Bi do
6:
j = iψ
7:
if A[i][j] = ∅ then
8:
if j = i then
9:
Bi+1 = Bi+1 ∪ {ψ}
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
1:
2:
3:
4:
5:
6:

else

A[i][j] = ψ

end if
else

π = A[i][j]
Bi+1 = Bi+1 ∪ {π · ψ −1 }

end if
end for
end for

âûáðîñèòü âñå òðèâèàëüíûå ýëåìåíòû èç ∪Bi

return ∪Bi
end procedure
procedure Membership(g ∈ Symn , i, A  ìíîæåñòâî ïîðîæäàþùèõ äëÿ G(i) 6 Symn )
if g = id then
return true
end if

Xi = (i + 1)Gi
âû÷èñëèòü ìíîæåñòâî R ïðåäñòàâèòåëåé ðàçëè÷íûõ êëàññîâ ñìåæíîñòè G(i+1) â

G(i)

108

Àëãåáðà è òåîðèÿ ÷èñåë
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

k = (i + 1)g

if k ∈/ Xi then
return false
else

âû÷èñëèòü ìíîæåñòâî ïîðîæäàþùèõ B äëÿ G(i+1) ïî ëåììå Øðàéåðà

Reduce(B )

âçÿòü gik ∈ R, ïðåäñòàâèòåëü êëàññà ñìåæíîñòè ïî G(i)
−1
g 0 = g · gik
return Membership(g 0 ,B , i + 1)

end if
end procedure

Ôèëüòð Äæåððàìà
Ìû óæå óñòàíîâèëè, ÷òî ìîæíî ïîñòðîèòü ìíîæåñòâî ïîðîæäàþùèõ ïîäãðóïïû G ⊂
Symn ìîùíîñòè íå áîëåå n2 . Òåì íå ìåíåå, åñòü ãîðàçäî áîëåå ñèëüíûå ðåçóëüòàòû.

Ïðè n > 3 êàæäàÿ ïîäãðóïïà â Sym ìîæåò áûòü ïîðîæäåíà ìíîæåñòâîì èç íå áîëåå b c ýëåìåíòîâ.

Òåîðåìà 3.86 (Neumann).
Îöåíêà

n
2

n

n
2

â ïðèâåäåííîé âûøå òåîðåìå òî÷íà îöåíêó. Ðàññìîòðèì
Ω = {a1 , a2 , · · · , am , b1 , · · · , bm }

è ïóñòü G  ãðóïïà, ïîðîæäàåìàÿ òðàíñïîçèöèÿìè {(ai , bi ) | 1 6 i 6 m}. Ýòîò ïîðîæäàþùèé íàáîð èìååò ðàçìåð n2 ; ïîñêîëüêó G èçîìîðôíà Fm
2 , ýòî ñîîòâåòñòâóåò íèæíåé
ãðàíèöå ÷èñëà ïðîæäàþùèõ.
Îäíàêî äëÿ àëãîðèòìè÷åñêîãî âû÷èñëåíèÿ ïîðîæäàþùèõ íàì ïðèãîäèòñÿ íåìíîãî
áîëåå ñëàáàÿ îöåíêà.

Ëþáàÿ ïîäãðóïïà G èç Sym èìååò ïîðîæäàþùèé íàáîð ðàçìåðîì (n − 1). Áîëåå òîãî, ïî äàííîé ãðóïïå G = A ìû ìîæåì âû÷èñëèòü ìíîæåñòâî
ïîðîæäàþùèõ ìîùíîñòè (n − 1) çà ïîëèíîìèàëüíîå âðåìÿ.
Òåîðåìà 3.87 (Jerram).

n

Äîêàçàòåëüñòâî. Îïðåäåëèì ãðàô XA = {[n], EA } ñëåäóþùèì îáðàçîì: äëÿ êàæäîãî g ∈ A, ïóñòü ig ∈ [n] áóäåò íàèìåíüøåé òî÷êîé, ñäâèíóòîé íà g . Äîáàâèì ðåáðî
eg = {ig , igg } äî EA . Òåïåðü ó íàñ åñòü íåîðèåíòèðîâàííûé ãðàô íà n âåðøèíàõ. Ìû ïîêàæåì, ÷òî ìîæíî çà ïîëèíîìèàëüíîå ÷èñëî èòåðàöèé èçìåíèòü A òàêèì îáðàçîì, ÷òîáû
ïîëó÷èòü â èòîãå àöèêëè÷åñêèé ãðàô XA0 (è, êîíå÷íî, G = A0 ), îòêóäà áóäåò ñëåäîâàòü
óòâåðæäåíèå òåîðåìû.
Äëÿ ëþáîé
ïåðåñòàíîâêè T ∈ Symn îïðåäåëèì âåñ ãðàôà XT (îáîçíà÷àåòñÿ ÷åðåç
P
w(T )) êàê g∈T ig . Î÷åâèäíî, ÷òî w(T ) 6 |T |n. Àëãîðèòì, êîòîðûé ìû ïðåäúÿâèì, áóäåò

109

Àëãåáðà è òåîðèÿ ÷èñåë
îíëàéí-àëãîðèòìîì, îí ðàáîòàåò ñî ìíîæåñòâîì A ïåðåñòàíîâîê, äëÿ êîòîðîãî XA ÿâëÿåòñÿ àöèêëè÷åñêèì è ïî ìåðå âêëþ÷åíèÿ íîâîãî ýëåìåíòà g îí èçìåíÿåò A äëÿ ðàçìåùåíèÿ
g è ïîääåðæàíèÿ àöèêëè÷íîñòè ñîîòâåòñòâóþùåãî ãðàôà.
Ïðåäïîëîæèì, ÷òî ó íàñ óæå åñòü ìíîæåñòâî S , äëÿ êîòîðîãî XS àöèêëè÷åí; äîáàâèì
g . Åñëè äàæå ïðè äîáàâëåíèè eg ãðàô îñòàåòñÿ àöèêëè÷íûì, äîáàâèì eg â ãðàô, à g  ê
ìíîæåñòâó S .
 ïðîòèâíîì ñëó÷àå â XS∪{g} ñóùåñòâóåò åäèíñòâåííûé öèêë, ñîäåðæàùèé ðåáðî eg .
Òåïåðü êàæäîå ðåáðî öèêëà ïîìå÷åíî ýëåìåíòîì S (äëÿ êàæäîãî ðåáðà èç-çà íåîïðåäåëåííîñòè íàïðàâëåíèÿ ýòî èëè gk , èëè gk−1 , îáû÷íî îáîçíà÷àåòñÿ êàê gk , ãäå  ìîæåò áûòü
èëè 1, èëè −1). Ïóñòü i  íàèìåíüøàÿ òî÷êà â ýòîì öèêëå. Òàê êàê i ÿâëÿåòñÿ ÷àñòüþ
öèêëà, îäíî èç äâóõ ðåáåð, ñìåæíûõ ñ i â öèêëå, äîëæíî áûòü ïîìå÷åíî êàê g0 , ÷òî
i = ig0 . Îáîéäåì â ýòîì íàïðàâëåíèè îò i âîêðóã ïîëíîãî öèêëà äî i; îáõîäó åñòåñòâåííî
ñîîòâåòñòâóåò ïðîèçâåäåíèå g0 g11 g22 · · · gkk = h. Åñëè h íå òðèâèàëåí, çàìåíèì g0 íà h âî
ìíîæåñòâå S (åñëè æå h = e, â êîòîðîì îòêëîíèì åãî).
Òàêîå ïðåîáðàçîâàíèå íå ìåíÿåò ãðóïïó, ïîðîæäåííóþ èìåþùèìñÿ ìíîæåñòâîì, íî
ñ äðóãîé ñòîðîíû, âûáîð h òðåáóåò, ÷òîáû j h = h äëÿ âñåõ 1 6 j 6 i è, ñëåäîâàòåëüíî,
ñòàíîâèòñÿ ôèêñèðîâàííûì èíîãäà çà i. È òàê êàê ìû âûáðàëè i êàê íàèìåíüøèé ýëåìåíò
öèêëà, âåñ ãðàôà óâåëè÷èâàåòñÿ, êîãäà ìû çàìåíèì g0 íà h. Ðàçìåð íàøåãî ìíîæåñòâà
îñòàëñÿ ïðåæíèì, íî â ñèëó âûáîðà h âåñ âûðîñ. Ñëåäîâàòåëüíî, çà ïîëèíîìèàëüíîå êîëè÷åñòâî øàãîâ ìû òî÷íî äîñòèãíåì âåðõíåé ãðàíèöû è, ñëåäîâàòåëüíî, â êîíå÷íîì èòîãå
ïîëó÷èì àöèêëè÷åñêèé ãðàô (íåêîòîðûå h ìîãóò ñòàòü òðèâèàëüíûìè â ïðîöåññå).
Ïîâòîðÿÿ ïðîöåññ ñî âñåìè ýëåìåíòàìè A, ìû ïîëó÷èì ìíîæåñòâî ïîðîæäàþùèõ A0 ,
äëÿ êîòîðûõ XA0 àöèêëè÷åñêèé, è, ñëåäîâàòåëüíî, |A| 6 n − 1.

 îðèãèíàëüíîì àëãîðèòìå Reduce, êîòîðûé ïîðîæäàþùèé íàáîð ìîùíîñòè íå áîëåå n2 , ìû ðàçðåøàëè êîëëèçèè, êîòîðûå â ñåòòèíãå Äæåððàìà ñîîòâåòñòâóþò 2-öèêëàì â
XA . Ñëåäîâàòåëüíî, ôèëüòð Äæåððàìà òàêæå ìîæíî ñ÷èòàòü îáîùåíèåì îðèãèíàëüíîãî
Reduce, íî ðàññìàòðèâàþùèé âåñü ãðàô, à íå òîëüêî 2-öèêëû.

Çàäà÷à

graph-iso

è òåîðåòèêî-ãðóïïîâûå àëãîðèòìû

Ìîæíî ïîêàçàòü, ÷òî çàäà÷à èçîìîðôèçìà ãðàôîâ ÿâëÿåòñÿ â îáùåì ñëó÷àå NPïîëíîé. Âðÿä ëè ñóùåñòâóåò ýôôåêòèâíûé àëãîðèòì äëÿ graph-iso, íî íåêîòîðûå ÷àñòíûå ñëó÷àè ýòîãî ìîãóò áûòü ðåøåíû çà ïîëèíîìèàëüíîå âðåìÿ. Ìû ðàññìîòðèì äâà
òàêèõ ñëó÷àÿ [äîñòàòî÷íî øèðîêèõ]  öâåòíûå ãðàôû ñ îãðàíè÷åííûìè öâåòîâûìè êëàññàìè è êóáè÷åñêèì ãðàôîì.

Îãðàíè÷åííàÿ êðàòíîñòü öâåòà graph-iso: BCGIb . Îïðåäåëèì BCGIb êàê ìíîæåñòâî íåîðèåíòèðîâàííûõ ðàñêðàøåííûõ ãðàôîâ òàêèõ, ÷òî â êàæäûé öâåò ðàñêðàøåíî íå áîëåå b âåðøèí. Ìû èùåì ïîëèíîìèàëüíûé àëãîðèòì äëÿ çàäà÷è èçìîðôèçìà â
110

Àëãåáðà è òåîðèÿ ÷èñåë
BCGIb : äëÿ äàííûõ ãðàôîâ X1 , X2 ∈ BCGIb îïðåäåëèòü, ÿâëÿþòñÿ ëè îíè èçîìîðôíûìè. Áåç îãðàíè÷åíèÿ îáùíîñòè ìîæíî ñ÷èòàòü, ÷òî X1 è X2 ñâÿçíû (â ïðîòèâíîì ñëó÷àå
ðàññìîòðèì èõ äîïîëíåíèÿ). Ðàññìîòðèì ãðàô (V, E) = X = X1 t X2 , â òàêîì ñëó÷àå
ïðîâåðêà èçîìîðôíîñòè ñâîäèòñÿ ê âû÷èñëåíèþ ãðóïïû àâòîìîðôèçìîâ X  åñëè èçåñòíà ãðóïïà àâòîìîðôèçìîâ ãðàôà X , ãäå êàæäûé ýëåìåíò çàäàí êàê ïåðåñòàíîâêà âåðøèí
ãðàôà, òî äîñòàòî÷íî âû÷èñëèòü îðáèòó îäíîé âåðøèíû ãðàôà è ïðîâåðèòü, íåïóñòî ëè
åå ïåðåñå÷åíèå ñ îáîèìè êîìïîíåíòàìè ñâÿçíîñòè.
N Äîïîëíèòåëüíàÿ öâåòîâàÿ ñòðóêòóðà
íàêëàäûâàåò îãðàíè÷åíèå íà òî, ÷òî Aut(X) 6
Sym(Ci ), ãäå Ci  ìíîæåñòâî âåðøèí,
ðàñêðàøåííûõ â öâåò i. Èäåÿ ñîñòîèò â òîì, ÷òî ìû èñïîëüçóåì ñîêðàùåíèå set-stab â
ýòîì ñëó÷àå è ïîêàæåì, ÷òî ìû ìîæåì ýôôåêòèâíî âû÷èñëèòü íåîáõîäèìûé ñòàáèëèçàòîð.

Eij = E ∩
Ïóñòü Ei = E ∩ C2i äëÿ êàæäîãî öâåòà i (íàáîð îäíîöâåòíûõ ðåáåð) èN
(Ci × Cj ) äëÿ ïàð öâåòîâ i 6= j (ðàçíîöâåòíûå ðåáðà). ßñíî, ÷òî ëþáîé π ∈
Sym(Ci )
π
= ij . Òàêèì îáðàçîì,
ÿâëÿåòñÿ ñîõðàíÿþùèì öâåò àâòîìîðôèçìîì òèòòê Eiπ = Ei è Eij
òåïåðü ìû ïîëó÷èëè
N åãî â ôîðìó set-stab.
Ïóñòü G =
SymCi = A , âûáðàâ òðàíñïîçèöèè êàê ïîðîæäàþùèå. Òåïåðü îïðåäåëèì



Ω = (∪Ci ) ∪ ∪2(Ci ) ∪ ∪2Ci ×Cj ,
2
â êîòîðîì ïîäìíîæåñòâà Ei è Eij ÿâëÿþòñÿ òî÷êàìè. Èç îãðàíè÷åíèÿ íà ìîùíîñòè êëàññîâ Ci ïîëó÷àåì
!
b
2
r
(
)
|Ω| 6 n + r2 2 +
2b ,
2

ãäå r  êîëè÷åñòâî öâåòîâ, è òàê êàê b  êîíñòàíòà, à r 6 n, òî |Ω| = poly(n).
G ìîæåò áûòü åñòåñòâåííûì îáðàçîì ðàñøèðåíà äëÿ äåéñòâèÿ íà Ω (ðàñøèðåíèå â
íàèáîëåå î÷åâèäíîì ñìûñëå, åñëè i 7→ i0 , j 7→ j 0 , òî Ei j 7→ Ei0 j 0 ). È òåïåðü Aut(X) 
ïîäãðóïïà, êîòîðàÿ ïîòî÷å÷íî ñòàáèëèçèðóåò êëàñòåðû Ei è Eij , ýòî ìîæíî ñäåëàòü ñ
ïîìîùüþ íàøåãî ñèëüíîãî ìíîæåñòâà ïîðîæäàþùèõ. Íåòðóäíî âèäåòü, ÷òî âðåìÿ âûïîëíåíèÿ ðàâíî poly(|Ω|) è, ñëåäîâàòåëüíî, ïîëèíîìèàëüíî ïî |X|.

Êóáè÷åñêèå ãðàôû. Äðóãèì îãðàíè÷åíèåì, êîòîðîå ìû ìîæåì íàëîæèòü íà ãðàôû, ÿâëÿåòñÿ ñòåïåíü êàæäîé âåðøèíû; ïðåäïîëîæèì, íàì äàíî, ÷òî ñòåïåíü êàæäîé
âåðøèíû îãðàíè÷åíà êîíñòàíòîé d, ìîæåì ëè ìû ðåøèòü graph-iso çà ïîëèíîìèàëüíîå
âðåìÿ?
Ñëó÷àè ïðè d 6 2 íåñëîæíû. Ïåðâûé èíòåðåñíûé ñëó÷àé, êîãäà d = 3, ñîîòâåòñòâóþùàÿ çàäà÷à íàçûâàåòñÿ
. Íàì äàíû äâà ãðàôà X1 è X2 ,
ñòåïåíè âåðøèí êîòîðûõ îãðàíè÷åíû 3, ìû äîëæíû ïðîâåðèòü èõ íà èçîìîðôíîñòü. Âîïåðâûõ, îáðàòèìâíèìàíèå, ÷òî ìû ìîæåì ïðåäïîëîæèòü, ÷òî îáà îíè ñâÿçíû, òàê êàê â
ïðîòèâíîì ñëó÷àå ìû ìîæåì îãðàíè÷èòüñÿ íà ñâÿçíûå êîìïîíåíòû è ðàáîòàòü ñî âñåìè

èçîìîðôèçì êóáè÷åñêîãî ãðàôà

111

Àëãåáðà è òåîðèÿ ÷èñåë
âîçìîæíûìè ïàðàìè êîìïîíåíò ñâÿçíîñòè ïåðâîãî ãðàôà è âòîðîãî. Ïðîâåðêà èçîìîðôíîñòè X1 è X2 ýêâèâàëåíòíà âû÷èñëåíèþ ãðóïïû àâòîìîðôèçìîâ X1 t X2 .
Ïðåäïîëîæèì, ÷òî ìû óæå âûäåëèëè ðåáðî, è íàñ èíòåðåñóþò òîëüêî àâòîìîðôèçìû,
êîòîðûå ñîõðàíÿþò ýòî ðåáðî. Îêàçûâàåòñÿ, äîñòàòî÷íî âû÷èñëèòü èìåííî òàêèå ãðóïïû.
Çàôèêñèðóåì íåêîòîðîå ðåáðî euv ∈ X1 . Äëÿ êàæäîãî epq ∈ X2 äîáàâèì íîâîå ðåáðî,
êîòîðîå ¾ñîåäèíÿåò¿ euv è epq (äîáàâèì ñåðåäèíû êàê äðóãèå äâå âåðøèíû è ñîåäèíèì
èõ). Òàêèì îáðàçîì, åñëè èçîìîðôèçì ïîìåíÿë ìåñòàìè euv è epq , îí ñîõðàíÿåò e. À òàêæå
òàê êàê ìû äåëàåì ýòî ïî âñåì ðåáðàì epq , äîñòàòî÷íî íàó÷èòüñÿ ýôôåêòèâíî âû÷èñëÿòü
ãðóïïó Aute (X)  ãðóïïó àâòîìîðôèçìîâ ãðàôà, ñîõðàíÿþùèõ ðåáðî e.
Àëãîðèòì ðàáîòàåò ïóòåì ïîñòðîåíèÿ ãðóïï àâòîìîðôèçìîâ ñ ïîìîùüþ àïïðîêñèìàöèé Aute (Xr ), ãäå êàæäûé Xr ÿâëÿåòñÿ ïîäãðàôîì X . Äëÿ êàæäîãî r îïðåäåëèì Xr
êàê ñîñòîÿùèé èç âñåõ âåðøèí è ðåáåð, êîòîðûå ïîÿâëÿþòñÿ â ïóòÿõ äëèíîé íå áîëåå r,
ïðîõîäÿùèõ ÷åðåç . Ýòî ñëîè X îòíîñèòåëüíî ðàññòîÿíèÿ îò e.
È ÿñíî, ÷òî, ïîñêîëüêó e ÿâëÿåòñÿ âûäåëåííûì ðåáðîì, ëþáîé π ∈ Aute (X) äîëæåí
ñîõðàíÿòü ýòè ñëîè.

Åñëè X  ñâÿçíûé êóáè÷åñêèé ãðàô, à e  ëþáîå ðåáðî â X ,
òîãäà Aut (X) ÿâëÿåòñÿ 2-ãðóïïîé.

Òåîðåìà 3.88 (Tutte).
e

Äîêàçàòåëüñòâî. Îñíîâíàÿ èäåÿ çàêëþ÷àåòñÿ â òîì, ÷òî ãðóïïû àâòîìîðôèçìîâ
ÿâëÿþòñÿ ïîñëåäîâàòåëüíûìè àïïðîêñèìàöÿìè è êàæäîå ðàçëîæåíèå ïðîõîäèò ïîñðåäñòâîì 2-ãðóïïû.
Äîêàçàòåëüñòâî ïðîâåäåì èíäóêöèåé ïî i. Ïðåäïîëîæèì, ÷òî Aute (Xi )  2-ãðóïïà.
Ïîñêîëüêó ëþáîé àâòîìîðôèçì, ñîõðàíÿþùèé e, äîëæåí ñîõðàíÿòü ñëîè, ó íàñ åñòü åñòåñòâåííûé ãîìîìîðôèçì φ : Aute (Xi+1 ) −→ Aute (Xi ), êîòîðûé ÿâëÿåòñÿ ôóíêöèåé ïðîåêöèè (Aute (Xi+1 ) ñîõðàíÿåò ñëîè äî Xi+1 ).
Ñëåäîâàòåëüíî, |Aute (Xi+1 )| = |φ(Aute (Xi+1 ))| · | ker φ| è òàê êàê φ(Aute (Xi+1 )) ÿâëÿåòñÿ ïîäãðóïïîé â Aute (Xi ), ýòî 2-ãðóïïà. Ñëåäîâàòåëüíî, îñòàåòñÿ òîëüêî ïðîâåðèòü,
÷òî ker φ òàêæå ÿâëÿåòñÿ 2-ãðóïïîé. Ìû çàèíòåðåñîâàíû â ïîäñ÷åòå π ∈ Aute (Xi+1 ), êîòîðûé ôèêñèðóåò Xi ïîòî÷å÷íî. Åñëè V = V (Xi+1 ) \ V (Xi ), òî ëþáîé íåòðèâèàëüíûé π
äîëæåí ÷òî-òî äåëàòü òîëüêî íà V . Îäíàêî ãðàô X êóáè÷åñêèé è, ñëåäîâàòåëüíî, ëþáîé
u ∈ V (Xi ) ìîæåò áûòü ñâÿçàí íå áîëåå ÷åì ñ 2 âåðøèíàìè â V è, ñëåäîâàòåëüíî, ëþáîé àâòîìîðôèçì Xi+1 , êîòîðûé ôèêñèðóåò Xi , ìîæåò ïîìåíÿòü ìåñòàìè äâóõ ñîñåäåé u.
Òàêèì îáðàçîì, ëþáîé π ∈ ker φ óäîâëåòâîðÿåò óñëîâèþ π2 = id è, ñëåäîâàòåëüíî, ker φ
òàêæå ÿâëÿåòñÿ 2-ãðóïïîé.


Ìû õîòèì âû÷èñëèòü Aute (X), è ìû ñäåëàåì ýòî, èñïîëüçóÿ áàøíþ, êîìïîíåíòû
êîòîðîé èíäóöèðîâàíû ðàçíûìè ñëîÿìè Xr . Îáùàÿ ôèëîñîôèÿ òàêîâà: åñëè φ : G −→ H
 ãîìîìîðôèçì, è ó íàñ åñòü ïîðîæäàþùèé íàáîð äëÿ ker φ = {k1 , k2 , · · · , kn } è φ(H) =
{φ(g1 ), φ(g2 ), · · · , φ(gm )}, çàòåì ìû ìîæåì ýôôåêòèâíî íàéòè ïîðîæäàþùåå ìíîæåñòâî
äëÿ G.
112

Àëãåáðà è òåîðèÿ ÷èñåë
Ìû áóäåì èñïîëüçîâàòü ãîìîìîðôèçìû φ : Aute (Xr+1 ) −→ Aute (Xr ), ÷òîáû ïîäíÿòüñÿ ïî ýòàæàì áàøíè è, íàêîíåö, äîáðàòüñÿ äî ïîðîæäàþùåãî ìíîæåñòâà äëÿ Aute (X).
Íàì íóæíî íàéòè
(1) ïîðîæäàþùåå ìíîæåñòâî äëÿ ker φ,
(2) ïîðîæäàþùåå ìíîæåñòâî äëÿ φ(Aute (Xr−1 ))
Àëãîðèòì äëÿ ïîèñêà ïîðîæäàþùåãî ìíîæåñòâà äëÿ ker φ íàì äàåò äîêàçàòåëüñòâî
äîêàçàòåëüñòâà òåîðåìû Òàòòà. Çàìåòèì, ÷òî êàæäàÿ âåðøèíà v ∈ Xr ñìåæíà ñ íå áîëåå
÷åì äâóìÿ âåðøèíàìè Xr+1 \ Xr , è àâòîìîðôèçì ìîæåò ïîìåíÿòü ìåñòàìè ýòè äâà ñîñåäà
v . Ýòî áóäåò íåâîçìîæíî èìåííî òîãäà, êîãäà îêðåñòíîñòè äâóõ âåðøèí íå ñîâïàäàþò.
Òàêèì îáðàçîì, åñëè w1 , w2 ∈ Xr+1 \Xr ÿâëÿþòñÿ ñîñåäÿìè v ∈ Xr , òðàíñïîçèöèÿ (w1 , w2 )
áóäåò äåéñòâèòåëüíûì àâòîìîðôèçìîì, ôèêñèðóþùèì Xr òèòòê Γ(w1 ) = Γ(w2 ). È ýòî
ìîæåò áûòü ëåãêî ïðîâåðåíî. Òàêèì îáðàçîì, çà ëèíåéíîå âðåìÿ ìû ìîæåì ïîëó÷èòü
ìíîæåñòâî ïîðîæäàþùèõ (íàáîð íåïåðåñåêàþùèõñÿ òðàíñïîçèöèé) äëÿ ker φ.
Ãîðàçäî ñëîæíåå íàéòè ïîðîæäàþùèé íàáîð äëÿ φ(Aute (Xr+1 )). Áóäåì â äàëüíåéøåì
ñ÷èòàòü Vr = Xr+1 \ Xr . Çàìåòèì, ÷òî êàæäàÿ âåðøèíà v ∈ Vr ñâÿçàíà ñ 1 èëè 2 èëè
3 ñîñåäÿìè Xr . Ïóñòü A áóäåò ñîâîêóïíîñòüþ âñåõ ïîäìíîæåñòâ Xr ðàçìåðîì 1 èëè 2
èëè 3. Òîãäà ó íàñ åñòü ñëåäóþùåå îòîáðàæåíèå îêðåñòíîñòåé Γr : Vr → A, êîòîðàÿ
ñîïîñòàâëÿåò êàæäîé âåðøèíå ìíîæåñòâî åå ñîñåäåé â ãðàôå Xr+1 . Îáðàòèòå âíèìàíèå,
÷òî äëÿ êàæäîãî àâòîìîðôèçìà σ ∈ Aute (Xr+1 ) èìååò ìåñòî Γr (σ(v)) = σ(Γr (v)), è â
ÿäðå ïîëó÷èëîñü áû Γr (v) = σ(Γr (v)). Íàçîâåì äâå âåðøèíû v1 , v2 ∈ Vr
, åñëè
Γr (v1 ) = Γr (v2 ).
Ñëåäîâàòåëüíî, ëþáîé σ ∈ φ(Aute (Xr+1 )) äîëæåí ñòàáèëèçèðîâàòü íàáîð ïðåäêîâ ñ
òîëüêî îäíèì ïîòîìêîì.

áëèçíåöàìè

A1 = {a ∈ A | a = Γr (v)äëÿ íåêîòîðîãî åäèíñòâåííîãîv ∈ Vr }
σ òàêæå äîëæåí ñòàáèëèçèðîâàòü ìíîæåñòâî ïðåäêîâ áëèçíåöîâ,
A2 = {a ∈ A | a = Γr (v1 ) = Γr (v2 ), vi 6= vj }

È êðîìå äîñòèæåíèÿ âåðøèí Vr ñëåäóþùèé ñëîé òàêæå èíäóöèðóåò ðåáðà ìåæäó âåðøèíàìè Xr , è ëþáîé àâòîìîðôèçì äîëæåí ñîõðàíÿòü èõ.
A3 = {{w1 , w2 } ∈ A | (w1 , w2 ) ∈ Xr+1 }

Íà ñàìîì äåëå, âñå ýòîãî äîñòàòî÷íî, ÷òîáû óáåäèòüñÿ â òîì, ÷òî σ ∈ Aute (Xr ) ëåæèò
â φ(Aute (Xr+1 )).

Îáðàç φ(Aut (X ))  êàê ðàç â òî÷íîñòè òå àâòîìîðôèçìû
, êîòîðûå ñòàáèëèçèðóþò ìíîæåñòâà A , A è A .

Óòâåðæäåíèå 3.89.
σ ∈ Aute (Xr )

e

r+1

1

2

3

Äîêàçàòåëüñòâî. Íàì íóæíî ïîêàçàòü, ÷òî åñëè σ ñòàáèëèçèðóåò òðè ìíîæåñòâà,
òî ìû ìîæåì ïðîäîëæèòü åãî äî àâòîìîðôèçìà Xr+1 . Ïðîäîëæåíèå ïîñòðîåíî ñëåäóþùèì îáðàçîì:

113

Àëãåáðà è òåîðèÿ ÷èñåë
• Äëÿ êàæäîãî îòäåëüíîãî ïîòîìêà v , äëÿ êîòîðîãî Γr (v) ∈ A1 , òàê êàê σ(Γr (v)) ∈
A1 , îòîáðàçèì v â åäèíñòâåííîãî ïîòîìêà Σ(Γr (v)).
• Äëÿ êàæäîé ïàðû áëèçíåöîâ v1 , v2 , äëÿ êîòîðûõ Γr (v1 ) = Γr (v2 ) ∈ A2 , òàê êàê
σ(Γr (v)) ∈ A2 , ñîïîñòàâèì {v1 , v2 } ñûíîâåé σ(Γr (v1 )) â ëþáîì ïîðÿäêå.
Ïîñòðîåííîå îòîáðàæåíèå óâàæàåò ðåáðà, ñîåäèíÿþùèå Xr è Vr . È ïîñêîëüêó îí
òàêæå ñòàáèëèçèðóåò A3 , òî σ òàêæå óâàæàåò ðåáðà ìåæäó âåðøèíàìè Xr , êîòîðûå áûëè
äîïîëíèòåëüíî ïîñòðîåíû. Ñëåäîâàòåëüíî, σ äåéñòâèòåëüíî ìîæåò áûòü ïðîäîëæåíî äî
àâòîìîðôèçìà Xr+1 .


114

×àñòü 4

Ãðàôû è àëãîðèòìû

Êðàòêîå ââåäåíèå â òåîðèþ ãðàôîâ  ÷àñòü ìàòôàêîâñêîãî êóðñà äèñêðåòíîé ìàòåìàòèêè, ïîâòîðèòü åå ìîæíî ïî êíèæêàì [pras, 35, 4, 15, 26, 29].
Äîãîâîðèìñÿ î ñïîñîáàõ õðàíåíèÿ ãðàôîâ:

: |V |, ÷èñëî âåðøèí, è |E| óïîðÿäî÷åííûõ ïàð (xi , yi ), êàæäàÿ èç
êîòîðûõ êîäèðóåò ðåáðî.

: |V |, ÷èñëî âåðøèí, è A1 , . . . A|V |  ñïèñêè ñìåæíîñòè, òî
åñòü Ai = j ∈ [1; |V |] | (ij) ∈ E .

: A ∈ Mat|V |×|V | (Q)
äëÿ íåîðèåíòèðîâàííîãî çàäàÄëÿ îðèåíòèðîâàííîãî çàäàåòåòñÿ òàê:
ñÿ òàê:
(


(ij) ∈ E
1, (ij) ∈ E
1,
Aij =
Aij = −1, (ji) ∈ E
0, (ij) ∈
/E


0,
èíà÷å

ñïèñîê ðåáåð
ñïèñêè ñìåæíîñòè
ìàòðèöà ñìåæíîñòè

Ìàòðè÷íûé âèä óäîáåí òåì, ÷òî åñëè A  ìàòðèöà ñìåæíîñòè íåîðèåíòèðîâàííîãî
ãðàôà, òî (Ak )ij åñòü ÷èñëî ïóòåé äëèíû k èç âåðøèíû i â âåðøèíó j .

Òåîðåìà 4.1. Ãðàô G èìååò ýéëåðîâ ïóòü òèòòê âñå âåðøèíû, êðîìå, âîçìîæíî, íå
áîëåå äâóõ, èìåþò ÷åòíóþ ñòåïåíü.
Äîêàçàòåëüñòâî.

Ñì. êíèãó [35].



Íà îñíîâå äîêàçàòåëüñòâà ýòîé òåîðåìû ìîæíî ïîñòðîèòü àëãîðèòì, íàõîäÿùèé ýéëåðîâ öèêë â ýéëåðîâîì ãðàôå çà ëèíåéíîå âðåìÿ. Íà âõîä ìû áóäåì ïîäàâàòü ãðàô â
âèäå ñïèñêà ñìåæíîñòè {Av | v ∈ V }. Íàì ïîíàäîáèòñÿ äâóñâÿçíûé ñïèñîê.
1: procedure Euler(G, s)
2:
L ← {s}, K ← ∅
3:
while E 6= ∅ do
4:
âçÿòü ïåðâóþ v èç As , E ← E \ {sv}, äîáàâèòü v â L
5:
while v 6= s do
6:
âçÿòü ïåðâóþ u èç Av , E ← E \ {vu}, äîáàâèòü u â L
7:
8:
9:
10:
11:
12:
13:
14:

end while
for v ∈ L do

Kv = Euler(G, v )
çàìåíèòü v íà Kv â L

end for
end while
return K
end procedure

Ãðàôû è àëãîðèòìû
Íåòðóäíî âèäåòü, ÷òî ýòîò àëãîðèòì êîððåêòåí: G áåç ïîëó÷åííîãî ïîñëå öèêëà

while(v 6= s) . . . end while ðàñïàäàåòñÿ íà êîíå÷íîå ÷èñëî êîìïîíåíò ñâÿçíîñòè, åñëè

êàæäûé Kv ÿâëÿåòñÿ ýéëåðîâûì öèêëîì â ýòèõ êîìïîíåíòàõ ñâÿçíîñòè, òî ïîäñòàíîâêà
Kv íà ìåñòî L äàåò ýéëåðîâ îáõîä áîëüøîãî ãðàôà. Íåòðóäíî òàêæå âèäåòü, ÷òî âðåìÿ
ðàáîòû àëãîðèòìà

Depth-rst search
Î÷åíü ÷àñòî â çàäà÷àõ íà ãðàôû (îïðåäåëåíèå ñâÿçíîñòè, íàëè÷èÿ ïóòè, öèêëà èòä.)
íåîáõîäèìî ¾îáîéòè¿ ãðàô. Îäèí èç ñïîñîáîâ ýòî ñäåëàòü  îáîéòè åãî â ãëóáèíó (depthrst search): èç óæå äîñòèãíóòîé âåðøèíû v1 ïðîéòè â ñìåæíóþ è åùå íå ïîñåùåííóþ
âåðøèíó v2 , èç íåå  â äðóãóþ ñìåæíóþ è åùå íå ïîñåùåííóþ âåðøèíó v3 è òàê äàëåå;
åñëè âäðóã âñå ñìåæíûå ñ vi âåðøèíû ïîñåùåíû, âåðíóòüñÿ ê vi−1 è ïðîéòè â ñìåæíóþ è
åùå íå ïîñåùåííóþ âåðøèíó, îòëè÷íóþ îò vi .
Íà âõîä ïîäàåòñÿ ãðàô â âèäå ñïèñêà ñìåæíîñòè. Â ðåàëèçàöèè íèæå ìû ñòðîèì
äåðåâî ïðåäøåñòâîâàíèÿ p (ôîðìàëüíî p : V → V ñîïîñòàâëÿåò âåðøèíå v âåðøèíó
p(v), èç êîòîðîé v áûëà âïåðâûå ïîñåùåíà) è nr : V → N  ôóíêöèþ, ñîïîñòàâëÿþùóþ
âåðøèíå v åå ïîðÿäêîâûé íîìåð ïðè ïîñåùåíèè (åñëè nr(v) = k, òî äî v áûëî ïîñåùåíî
k − 1 âåðøèíà).  ïðèíöèïå íàì íåîáÿçàòåëüíî âû÷èñëÿòü p(·) è nr(·)  ýòî ïîëåçíûå
ìåëî÷è, êîòîðûå ïðèãîäÿòñÿ íàì äëÿ ïðèëîæåíèé DFS.
1: procedure DFS(G = (V, E), s)
2:
for v ∈ V do
3:
nr(v) ← 0, p(v) ← 0
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

end for
for e ∈ E do
u(e) ← false
end for

i ← 1, v ← s, nr(s) ← 1
while v 6= s èëè ∃w ∈ As , u(sw) = false do
while ∃w ∈ Av : u(vw) = false do
âûáðàòü w ∈ Av : u(vw) = false
u(vw) = true
if nr(w) = 0 then
p(w) ← v , i ← i + 1, nr(w) = i, v ← w

end if
end while
v ← p(v)

end while
return p, nr
end procedure
117

Powered by TCPDF (www.tcpdf.org)

Ãðàôû è àëãîðèòìû
Ìû ïîëàãàåì, ÷òî V ëèíåéíî óïîðÿäî÷åíî, òî åñòü V = {v1 , . . . v|V | }, è ýòà íóìåðàöèÿ
âåðøèí èíäóöèðóåòñÿ íà âñå ñïèñêè ñìåæíîñòè, òî åñòü äëÿ ëþáîé âåðøèíû v ïîëó÷àåì
Av = {vi1 , . . . videg v }, ãäå 1 6 i1 < . . . < ideg v 6 |V |. Âåðøèíû â öèêëå while(∃w ∈ Av :
u(vw) = false)...end while âûáèðàþòñÿ ïî ïîðÿäêó.

Ïðèìåð 4.2. Ïðîäåìîíñòðèðóåì ðàáîòó

DFS

Çäåñü ïîðÿäîê âåðøèí òàêîé: s, a, b, c, d, e, f, g, h.
a
s

d
c

a

h
s

f

íà ãðàôå, èçîáðàæåííîì íà êàðòèíêå 1.

d
c

a

h
s

f

d
c

h
f

b

e

g

b

e

g

b

e

g

a

d

h

a

d

h

a

d

h

s

c

s

f

c

s

f

c

f

b

e

g

b

e

g

b

e

g

a

d

h

a

d

h

a

d

h

s

c

s

f

c

s

f

c

f

b

e

g

b

e

g

b

e

g

a

d

h

a

d

h

a

d

h

s

c

s

f

c

s

f

c

f

b

e

g

b

e

g

b

e

g

a

d

h

a

d

h

a

d

h

s

c

s

f

c

s

f

c

f

b

e

g

b

e

g

b

e

g

a

d

h

a

d

h

a

d

h

s

c
b

s

f
e

g

c
b

s

f
e

g

c
b

f
e

g

[Îêîí÷àíèå  íà ñëåäóþùåé ñòðàíèöå]. Ðûæèì öâåòîì îòìå÷åíà ñêàíèðóåìàÿ âåðøèíà è ïðîâåðÿåìîå ðåáðî. Ïîñåùåííûå âåðøèíû v , òî åñòü òå, äëÿ êîòîðûõ nr(v) 6= 0,
118

Ãðàôû è àëãîðèòìû
îòìå÷åíû ñâåòëî-ñèíèì öâåòîì. Ðåáðà e, äëÿ êîòîðûõ u(e) = true, âûäåëåíû æèðíûì,
ðåáðà âèäà p(v)v  êðàñíûå, îñòàëüíûå ïîñåùåííûå  ñåðûå. [Åñòü ïðîäîëæåíèå íà ñëåäóþùåé ñòðàíèöå.] Íà ðàñêàäðîâêå îïóùåíû êàäðû ñ ïðîâåðêîé óæå ïîñåùåííûõ ðåáåð.
a
s

d
c

b

s

f
e

a

h

g

d
c

b

s

f
e

a

h

g

d
c

b

h
f

e

g

Êàæäîå ðåáðî â êîìïîíåíòå ñâÿçíîñòè G, ñîäåðæàùåé s, èñïîëüçóåòñÿ
ðîâíî îäèí ðàç â êàæäîì íàïðàâëåíèè ïðè âûïîëíåíèè àëãîðèòìà DFS.  ÷àñòíîñòè,
àëãîðèòì DFS èìååò ñëîæíîñòü O(|E|) äëÿ ñâÿçíûõ ãðàôîâ.
Òåîðåìà 4.3.

Äîêàçàòåëüñòâî. Ìîæíî ñ÷èòàòü, ÷òî G ñâÿçåí. Íà øàãå 11 äëÿ ïåðåõîäà èç v â w
èñïîëüçóåòñÿ ðåáðî e = vw (ãäå èçíà÷àëüíî v = s); åñëè nr(w) = 0, òî w åùå íå ïîñåùåíà
è v çàìåíÿåòñÿ íà w. Åñëè nr(w) 6= 0, òî w óæå ïîñåùåíà è ðåáðî e èñïîëüçóåòñÿ äëÿ
ïðîõîäà â îáðàòíîì íàïðàâëåíèè äëÿ ïåðåõîäà îò w ê v , è àëãîðèòì ïðèñòóïàåò (åñëè
âîçìîæíî) ê îáðàáîòêå äðóãîãî ðåáðà, èíöèäåíòíîãî ñ v , êîòîðîå åùå íå èñïîëüçîâàëîñü.
Åñëè òàêîãî ðåáðà íåò, òî åñòü åñëè âñå ðåáðà, èíöèäåíòíûå v , èñïîëüçîâàëèñü ïî ðåáðîíåé
ìåðå îäèí ðàç  ðåáðî p(v)v , êîòîðîå èñïîëüçîâàëîñü äëÿ äîñòèæåíèÿ v èç p(v), ïðîõîäèòñÿ
â îáðàòíîì íàïðàâëåíèè, è v çàìåíÿåòñÿ íà p(v). Òàêèì îáðàçîì, àëãîðèòì äåéñòâèòåëüíî
ñòðîèò îáõîä ãðàôà G.
Òåïåðü ìû ïîêàæåì, ÷òî íè îäíî ðåáðî íå ìîæåò áûòü èñïîëüçîâàíî äâàæäû â îäíîì
è òîì æå íàïðàâëåíèè. Ïðåäïîëîæèì îáðàòíîå, òîãäà ñóùåñòâóåò ðåáðî e = vw, êîòîðîå
èñïîëüçóåòñÿ äâàæäû â îäíîì è òîì æå íàïðàâëåíèè. Ïîëîæèì, ÷òî e âïåðâûå èñïîëüçóåòñÿ äëÿ ïðîõîäà îò v ê w, òîãäà â òàêîì íàïðàâëåíèè ïðîéòè ìîæíî ðîâíî îäèí ðàç 
êîãäà u(e) = false. Òàê ÷òî äâàæäû e ìîæåò áûòü ïðîéäåíî òîëüêî âî âðåìÿ âûïîëíåíèÿ
øàãà 16, çàìåíû w ← v = p(w).  òàêîì ñëó÷àå âñå ðåáðà, èíöèäåíòíûå ñ v , äîëæíû áûòü
ïðîéäåíû ðàíåå [u(e) = true]. Òàêèì îáðàçîì, èç âåðøèíà áûëà ïîñåùåíà õîòÿ áû
degv + 1 ðàç [âûõîä ñîâåðøàåòñÿ ïî âñåì ðåáðàì, à ïî vp(v)  äâàæäû]; ïîýòîìó êàêîå-òî
ðåáðî uv äîëæíî èñïîëüçîâàòüñÿ äâàæäû äëÿ ïðîõîäà îò u äî v , ÷òî íåâîçìîæíî, êàê ìû
ïîêàçàëè ÷óòü âûøå.
Èç ïðåäûäóùèõ ñîîáðàæåíèé ñëåäóåò, ÷òî àëãîðèòì çàâåðøàåò ðàáîòó çà êîíå÷íîå
âðåìÿ. Áîëåå òîãî, îòñþäà ñëåäóåò, ÷òî ñëîæíîñòü DFS ðàâíà O(|E|).
Òåïåðü äîêàæåì, ÷òî êàæäîå ðåáðî G èñïîëüçóåòñÿ â îáîèõ âîçìîæíûõ íàïðàâëåíèÿõ.
Ïóñòü S  ìíîæåñòâî âåðøèí v , äëÿ êîòîðûõ êàæäîå ðåáðî, èíöèäåíòíîå ñ v , èñïîëüçóåòñÿ â îáîèõ íàïðàâëåíèÿõ. Êîãäà DFS çàâåðøàåòñÿ, îí äîëæåí äîñòèãíóòü âåðøèíû v ñ
p(v) = 0, äëÿ êîòîðîãî íåò èíöèäåíòíîãî ðåáðà ñ v , íà êîòîðîì u(·) ïðèíèìàåò çíà÷åíèå
false. Ýòî ìîæåò ïðîèçîéòè òîëüêî äëÿ v = s; áîëåå òîãî, âñå ðåáðà, èíöèäåíòíûå ñ s,

119

Ãðàôû è àëãîðèòìû
äîëæíû áûëè èñïîëüçîâàòüñÿ äëÿ ïåðåìåùåíèÿ îò s ê äðóãîé âåðøèíå. Íî òîãäà âñå ýòè
ðåáðà òàêæå äîëæíû áûëè áûòü èñïîëüçîâàíû äëÿ äîñòèæåíèÿ s, ïîñêîëüêó íè îäèí èç
íèõ íå èñïîëüçîâàëñÿ äâàæäû â îäíîì è òîì æå íàïðàâëåíèè. Òàêèì îáðàçîì, s ∈ S , è S
íåïóñòî.
Òåïåðü ïîêàæåì S = V . Ïðåäïîëîæèì îáðàòíîå. Ïîñêîëüêó G ñâÿçíûé [ïî ïðåäïîëîæåíèþ], ñóùåñòâóþò ðåáðà, ñîåäèíÿþùèå S ñ V \ S ; ðàññìîòðèì ïåðâîå ïîñåùåííîå
àëãîðèòìîì DFS òàêîå ðåáðî e = vw, ãäå v ∈ S è w ∈ V \ S . Êàæäîå ðåáðî, ñîåäèíÿþùåå
S è V \ S , èñïîëüçóåòñÿ â îáîèõ íàïðàâëåíèÿõ. Êàê ìû äîñòèãàåì âåðøèíû w â ïåðâûé
ðàç, ïåðåõîäÿ ïî îò v äî w, èìååì nr(w) = 0. Çàòåì ïîëîæèì v = p(w), è u(e) = true.
Òåïåðü ìû ìîæåì èñïîëüçîâàòü e ñíîâà òîëüêî ïðè ïåðåõîäå îò w ê v . Â ýòîò ìîìåíò âñå
ðåáðà, ñâÿçàííûå ñ w, äîëæíû áûëè ïîìå÷åíû êàê ïðîéäåííûå. Ïîñêîëüêó êàæäîå ðåáðî, èíöèäåíòíîå ñ w, ìîæåò èñïîëüçîâàòüñÿ íå áîëåå îäíîãî ðàçà â êàæäîì íàïðàâëåíèè,
êàæäîå èç ýòèõ ðåáåð äîëæíî áûëî èñïîëüçîâàòüñÿ â îáîèõ íàïðàâëåíèÿõ, òàê ÷òî w ∈ S
ïðîòèâîðå÷èå.

Íåòðóäíî âèäåòü, ÷òî åñëè âõîäíîé ãðàô G ñâÿçåí, ïîëó÷åííîå â DFS äåðåâî p ÿâëÿåòñÿ îñòîâíûì äëÿ G. Òàêèì îáðàçîì, ñ ïîìîùüþ DFS ëåãêî ïðîâåðÿòü ñâÿçíîñòü ãðàôà
 äîñòàòî÷íî ïðîâåðèòü, âñå ëè âåðøèíû âõîäÿò â ïîëó÷åííîå ñ ïîìîùüþ DFS îñòîâíîå
äåðåâî [ïî-àíãëèéñêè ôîðìàëüíî íå tree è íå rooted tree, à arborescence  êîðíåâîå äåðåâî, â êîòîðîì íåò âåðøèí, âõîäÿùèõ â êîðåíü]. Ïî óìîë÷àíèþ îðèåíòàöèÿ íà DFS-äåðåâå
p ìû çàäàäèì îò ïðåäêîâ ê ïîòîìêàì, òî åñòü ðåáðà áóäóò èìåòü âèä p(v)v .

Îïðåäåëåíèå 4.4.

DFS-äåðåâîì ñâÿçíîãî ãðàôà G = (V, E) áóäåì íàçûâàòü äåðåâî
(V, {p(v)v | v ∈ V }) ,

ãäå p  ôóíêöèÿ, âû÷èñëåííàÿ

DFS.

 ïðèìåðå 4.2 ðåáðà DFS-äåðåâà îòìå÷åíû êðàñíûì öâåòîì.

Îïðåäåëåíèå 4.5. Ðåáðà âèäà p(v)v [îðèåíòèðîâàííûå] ìû áóäåì íàçûâàòü äðåâåñíûìè

ðåáðàìè, îñòàëüíûå [â òîì ÷èñëå è vp(v)] ìû áóäåì íàçûâàòü çàäíèìè ðåáðàìè.

Åñëè æå ãðàô G íåñâÿçåí, òî ïîëó÷åííîå T áóäåò îñòîâíûì ëåñîì  êàæäàÿ êîìïîíåíòà ñâÿçíîñòè T áóäåò îñòîâíûì äåðåâîì íåêîòîðîé êîìïîíåíòû ñâÿçíîñòè G.
Òåïåðü ðàññìîòðèì âåðñèþ DFS íà îðèåíòèðîâàííûõ ãðàôàõ. Òåïåðü ðåáðî vw ïîíèìàåòñÿ êàê îðèåíòèðîâàííîå v → w, îò v ê w. Ñàì àëãîðèòì âûïîëíÿåòñÿ êàê è ïðåæäå,
òàê ÷òî åäèíñòâåííîå îòëè÷èå îò âåðñèè äëÿ íåîðèåíòèðîâàííûõ ãðàôîâ ìîæíî èñïîëüçîâàòü íåïðîéäåííûå ðåáðà òîëüêî â îäíîì íàïðàâëåíèè.
Äàæå åñëè G ñâÿçåí, ìû ìîæåì íå äîñòè÷ü âñåõ âåðøèí G, ïðèìåð  íåêîòîðûå
âåðøèíû ìîãóò áûòü íåäîñòèæèìû èç ñòàðòîâîé âåðøèíû. Íà÷èíàÿ ñ âåðøèíû s, DFS
îáîéäåò âñå âåðøèíû, â êîòîðûå ìîæíî ïîïàñòü ïî îðèåíòèðîâàííîìó ïóòè èç s. Òàê æå,
êàê è â ñëó÷àå íåîðèåíòèðîâàííîãî ãðàôà, DFS ïîñòðîèò îñòîâíûé ëåñ, è âñå îöåíêè íà
ñëîæíîñòü îñòàþòñÿ òàêèìè æå.
120

Ãðàôû è àëãîðèòìû

Ïîèñê òî÷åê ñî÷ëåíåíèÿ
Òåïåðü ïåðåéäåì ê ìåíåå î÷åâèäíûì ïðèìåíåíèÿì ïîèñêà â ãëóáèíó.  ýòîì ðàçäåëå
ñ÷èòàåì ãðàôû íåîðèåíòèðîâàííûìè.

Îïðåäåëåíèå 4.6.

Òî÷êà ñî÷ëåíåíèÿ ãðàôà G  âåðøèíà v òàêàÿ, ÷òî G\v èìååò áîëüøå

êîìïîíåíò ñâÿçíîñòè, ÷åì G.

Îïðåäåëåíèå 4.7. Ñâÿçíûé ãðàô, ñîäåðæàùèé òî÷êè ñî÷ëåíåíèÿ, áóäåì íàçûâàòü ðàçäåëèìûì. Ìàêñèìàëüíûé èíäóöèðîâàííûé ïîäãðàô G, íå ÿâëÿþùèéñÿ ðàçäåëèìûì, íàçûâàåòñÿ áëîêîì.
Áóäåì ñ÷èòàòü ãðàô G = (V, E) ñâÿçíûì. Ïðåäïîëîæèì, ÷òî ìû, âûçâàâ DFS, ïîñòðîèëè îñòîâíîå äåðåâî T äëÿ G ñ êîðíåì s; òåïåðü áóäåì èñïîëüçîâàòü ôóíêöèè nr(·) è
p(·) äëÿ îïðåäåëåíèÿ òî÷åê ñî÷ëåíåíèÿ G (è, ñëåäîâàòåëüíî, áëîêîâ). Îïðåäåëèì ôóíêöèþ L : V → N ñëåäóþùèì îáðàçîì: ïóñòü Bv  ìíîæåñòâî âåðøèí, â êîòîðûå ìîæíî
ïîïàñòü èç v ïî ïóòè, ãäå âñå ðåáðà, êðîìå, âîçìîæíî, ïîñëåäíåãî  äðåâåñíûå, òîãäà
L(v) = minu∈Bvnr(u).

Ïðèìåð 4.8. Ðàññìîòðèì ãðàô èç ïðèìåðà 4.2. Âåðøèíû ïîìå÷åíû íîìåðàìè, êîòîðûå
èì ïðèñâîåíû âî âðåìÿ

DFS;

÷èñëà â ñêîáêàõ ÿâëÿþòñÿ çíà÷åíèÿìè ôóíêöèè L.

2(1)

1(1)

5(2)

4(1)

3(1)

9(9)

7(5)

6(3)

8(6)

Ïóñòü G  ñâÿçíûé ãðàô, s  âåðøèíà G, T  îñòîâíîå äåðåâî G, âû÷èñëåííîå àëãîðèòìîì DFS. Âåðøèíà u 6= s ÿâëÿåòñÿ òî÷êîé ñî÷ëåíåíèÿ òèòòê ñóùåñòâóåò
äðåâåñíîå ðåáðî e = uv, óäîâëåòâîðÿþùåå L(v) > nr(u), ãäå L  ôóíêöèÿ, îïðåäåëåííàÿ
âûøå.
Ëåììà 4.9.

Äîêàçàòåëüñòâî.

ùåñòâóåò ðàçáèåíèå

Ñíà÷àëà ïðåäïîëîæèì, ÷òî u  òî÷êà ñî÷ëåíåíèÿ G. Òîãäà ñóV \ u = V1 ∪ . . . ∪ Vk ,

k > 2,

121

Ãðàôû è àëãîðèòìû
äëÿ êîòîðîãî âñå ïóòè, ñîåäèíÿþùèå äâå âåðøèíû â ðàçëè÷íûõ Vi , äîëæíû ïðîõîäèòü
÷åðåç u. Ïîëîæèì, ÷òî s ∈ V1 . Ïóñòü e áóäåò ïåðâûì ïðîéäåííûì DFS äðåâåñíûì ðåáðîì
e = uv , äëÿ êîòîðîãî v 6∈ V1 ; ñêàæåì, v ∈ V2 . Ïîñîêîëüêó íåò ðåáåð, ñîåäèíÿþùèõ âåðøèíó
â V2 ñ âåðøèíîé â V \ (V2 ∪ {u}), à âñå âåðøèíû, äîñòèæèìûå èç v ïî äðåâåñíûì ðåáðàì,
òàêæå ëåæàò â V2 (è ïîòîìó äîñòèãàþòñÿ àëãîðèòìîì ïîçæå u), ìû çàêëþ÷àåì, ÷òî L(v) >
nr(u).
Òåïåðü ïóñòü e = uv  äðåâåñíîå ðåáðî, äëÿ êîòîðîãî L(v) > nr(u). Ââåäåì S 
ìíîæåñòâî âåðøèí íà ïóòè èç s â u â T (âêëþ÷àÿ s, íî íå u), è ïóñòü T 0  ïîääåðåâî T ñ
êîðíåì v [òî åñòü T 0 ñîñòîèò èç ïîòîìêîâ v ]. Ïîñêîëüêó ëþáàÿ âåðøèíà â T 0  ïîòîìîê
v , íå ñóùåñòâóåò ðåáðà xy , ãäå x ∈ T 0 , y ∈ V \ S ∪ T 0 ∪ {u}. Áîëåå òîãî, íåò ðåáåð xy , ãäå
x ∈ T 0 , y ∈ S : òàêîå ðåáðî áóäåò çàäíèì, îòêóäà ñëåäóåò, ÷òî ñóùåñòâóåò ïóòü, ïðîõîäÿùèé
ñíà÷àëà èç v â x ïî äðåâåñíûì ðåáðàì T 0 , çàòåì ïî ðåáð xy , îòêóäà
L(v) 6 nr(y) < nr(u)

Çíà÷èò, êàæäûé ïóòü, ñîåäèíÿþùèé âåðøèíó â T 0 ñ âåðøèíîé â S äîëæíà ñîäåðæàòü u,
òàê ÷òî u ÿâëÿåòñÿ òî÷êîé ñî÷ëåíåíèÿ.


 óñëîâèÿõ ïðîøëîé ëåììû êîðåíü DFS-äåðåâà s  òî÷êà îòñå÷åíèÿ
òèòòê s ïðèíàäëåæèò õîòÿ áû íà äâóõ äðåâåñíûõ ðåáðàõ.
Ëåììà 4.10.

Äîêàçàòåëüñòâî.

Ïóñòü s  òî÷êà ñî÷ëåíåíèÿ, à
V \ u = V1 ∪ . . . ∪ Vk ,

k > 2,

ðàçáèåíèå V \ s, äëÿ êîòîðûõ âñå ïóòè, ñîåäèíÿþùèå äâå âåðøèíû â ðàçëè÷íûõ êîìïîíåíòàõ ðàçäåë äîëæåí ïðîéòè ÷åðåç s. Êðîìå òîãî, ïóñòü e = sv áóäåò ïåðâûì äðåâåñíûì
ðåáðîì, ïðîéäåííûì DFS; ñêàæåì, v ∈ V1 . Òîãäà íèêàêàÿ âåðøèíà âíå V1 íå äîñòèæèìà
èç v â T , òàê ÷òî s äîëæíà áûòü èíöèäåíòíà ñ åùå îäíèì äðåâåñíûì ðåáðîì.
Íàîáîðîò, ïóñòü sv è sw  äðåâåñíûå ðåáðà, è ïóñòü T 0  ïîääåðåâî T ñ êîðíåì v .
Íåòðóäíî âèäåòü, ÷òî íåò ðåáåð, ñîåäèíÿþùèõ âåðøèíó èç T 0 ñ âåðøèíîé èç V \ (T 0 ∪ {s}).
Ïîñêîëüêó ïî ïðåäïîëîæåíèþ ìíîæåñòâî V \ (T 0 ∪ {s})  îíî ñîäåðæèò w  òî s  òî÷êà
ñî÷ëåíåíèÿ.

Åñëè ìû ñìîæåì âî âðåìÿ îáõîäà â ãëóáèíó âû÷èñëèòü L(·), òî ñìîæåì çà O(|E|),
ïîëüóÿñü äâóìÿ äîêàçàííûìè òîëüêî ÷òî ëåììàìè, îïðåäåëèòü âñå òî÷êè ñî÷ëåíåíèÿ. Ïî
îïðåäåëåíèþ ôóíêöèè L(·) ïîëó÷àåì
L(v) = min{nr(u) | u = v èëè vu  çàäíèé ðåáðî â G},

åñëè v  ëèñò äåðåâà T , è
L(v) = min ({nr(u) | u = v èëè vu  çàäíèé ðåáðî â G} ∪ {L(u) | vu ∈ T })

â èíîì ñëó÷àå.
122

Ãðàôû è àëãîðèòìû
 ñëó÷àå ëèñòà ìû çàìåíÿåì L(v) íà min{L(v), nr(u)}, êàê òîëüêî àëãîðèòì èñïîëüçóåò çàäíåå ðåáðî vu, òî åñòü êîãäà nr(u) 6= 0 âî âðåìÿ ïðîâåðêè vu. Êîãäà àëãîðèòì
âîçâðàùàåòñÿ îò v ê p(v), âñå çàäíèå ðåáðà áûëè ïðîâåðåíû, òàê ÷òî L(v) ïðèíÿë íóæíîå
çíà÷åíèå.  ïðîòèâíîì ñëó÷àå ìû äîëæíû çàìåíèòü L(v) íà min{L(v), L(u)}, êàê òîëüêî
äðåâåñíîå ðåáðî vu èñïîëüçóåòñÿ âî âòîðîé ðàç, à èìåííî îò u äî v . Íåòðóäíî óáåäèòüñÿ
[èíäóêöèåé ïî ìèíèìàëüíîìó ðàññòîÿíèþ îò ëèñòüåâ], ÷òî ïîñëå ïðîâåðêè L(u) ïðèíÿë
ïðàâèëüíîå çíà÷åíèå
1: procedure Block-Cut(G = (V, E), s)
2:
for v ∈ V do
3:
nr(v) ← 0, p(v) ← 0
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:

end for
for e ∈ E do
u(e) ← false
end for

i ← 1, v ← s, nr(s) ← 1, C ← ∅, k ← 0, L(s) ← 1
ñîçäàòü ñòåê S , ñîäåðæàùèé åäèíñòâåííûé ýëåìåíò s
while v 6= s èëè ∃w ∈ As u(sw) = false do
while ∃w ∈ Av : u(vw) = false do
âûáðàòü w ∈ Av : u(vw) = false
u(vw) = true
if nr(w) = 0 then
p(w) ← v , i ← i + 1, nr(w) = i, L(w) ← i, äîáàâèòü w â S , v ← w

else

L(v) ← min{L(v), nr(u)}

end if
end while
if p(v) 6= s then
if L(v) < nr(p(v)) then

L(p(v)) ← min{L(p(v)), L(v)}

else

C ← C ∪ {p(v)}, k ← k + 1
ñîçäàòü ñïèñîê Bk = S ∪ {v}, îïóñòîøèòü S , äîáàâèòü p(v) â Bk

end if
else
if ∃w ∈ As : u(sw) = false then
C ← C ∪ {s}

end if

ñîçäàòü ñïèñîê Bk = S ∪ {v}, îïóñòîøèòü S , äîáàâèòü p(v) â Bk

end if

123

Ãðàôû è àëãîðèòìû
33:
34:
35:
36:

v ← p(v)

end while
return B1 , . . . Bk , C
end procedure

Íåçàâèñèìî îò âûáîðà s ∈ V ìíîæåñòâî C , ïîëó÷åííîå àëãîðèòìîì
, åñòü ìíîæåñòâî ðàçðåçîâ, ìíîæåñòâà B , . . . B  ìíîæåñòâà âåðøèí
áëîêîâ. Âðåìÿ ðàáîòû àëãîðèòìà Block-Cut ñîñòàâëÿåò O(|E|).

Òåîðåìà 4.11.
Block-Cut

1

k

Äîêàçàòåëüñòâî. Êàê è â îðèãèíàëüíîì DFS, êàæäîå ðåáðî èñïîëüçóåòñÿ ðîâíî
îäèí ðàç â êàæäîì íàïðàâëåíèè, êðîìå òîãî, äëÿ êàæäîãî ðåáðà âûïîëíÿåòñÿ íå áîëåå ÷åì
ïîñòîÿííîå ÷èñëî øàãîâ êàçíåíû. Ñëåäîâàòåëüíî, ñëîæíîñòü ðàâíà O(|E|). Ñîîáðàæåíèÿ
âûøå ïîêàçûâàþò, ÷òî L(v) ïðèíèìàåò ïðàâèëüíîå çíà÷åíèå â òîò ìîìåíò, êîãäà àëãîðèòì
çàêàí÷èâàåò ïðîâåðêó v . Ôîðìàëüíîå äîêàçàòåëüñòâî ýòîãî ôàêòà ìîæåò áûòü äàíî ñ
èñïîëüçîâàíèåì èíäóêöèè íà nr(v) (â ïîðÿäêå óáûâàíèÿ). Îáðàòèòå âíèìàíèå, ÷òî ðåáðî
vw, âûáðàííîå íà øàãå (12), ÿâëÿåòñÿ çàäíèì òèòòê êîãäà nr(w) 6= 0, è ÷òî èñïîëüçóåòñÿ
äðåâåñíîå ðåáðî p(v)v íà ýòàïå (21) äëÿ îáíîâëåíèÿ çíà÷åíèÿ L(p(v)) ïîñëå îïðåäåëåíèÿ
L(v) (åñëè ýòî îáíîâëåíèå íå ÿâëÿåòñÿ èçáûòî÷íûì èç-çà óñëîâèÿ L(v) > nr(p(v)) >
L(p(v))).
Îñòàëîñü ïîêàçàòü, ÷òî òî÷êè ñî÷ëåíåíèÿ è áëîêè îïðåäåëåíû ïðàâèëüíî. Ïîñëå òîãî, êàê àëãîðèòì çàêîí÷èë îáðàáîòêó âåðøèíû v , â ñòðî÷êå (20) èëè (27) ïðîâåðÿåòñÿ,
ÿâëÿåòñÿ ëè p(v) òî÷êîé ñî÷ëåíåíèÿ. Ñíà÷àëà ïðåäïîëîæèì, ÷òî p(v) 6= s. Åñëè óñëîâèå â
(20) âûïîëíåíî, çíà÷åíèå L(v) èñïîëüçóåòñÿ äëÿ îáíîâëåíèÿ L(p(v)); â ïðîòèâíîì ñëó÷àå
p(v) ÿâëÿåòñÿ òî÷êîé ñî÷ëåíåíèÿ, êàê ìû ïîêàçàëè âûøå.  ýòîì ñëó÷àå p(v) äîáàâëÿåòñÿ ê ìíîæåñòâó òî÷åê ñðåçà C . Âåðøèíû â S äî v (âêëþ÷àÿ v ) ÿâëÿþòñÿ ïîòîìêàìè
v â T , ãäå T  DFS-äåðåâî. Ýòè âåðøèíû  íå îáÿçàòåëüíî âñå ïîòîìêè v: âîçìîæíî,
÷òî íåêîòîðûå ïîòîìêè áûëè âûðåçàíû ðàíåå; ñðåäè íèõ ìîãëè áûòü òî÷êè ñî÷ëåíåíèÿ.
Òåì íå ìåíåå, èíäóêöèåé ïî ìèíèìàëüíîìó ðàññòîÿíèþ äî ëèñòüåâ ìîæíî ïîêàçàòü, ÷òî
íè îäèí ñîáñòâåííûé ïîòîìîê òàêèõ òî÷åê ñî÷ëåíåíèÿ [òî åñòü íå ñîâïàäàþùèé ñ ýòèìè
òî÷êàìè] íå ñîäåðæèòñÿ â S ê ýòîìó ìîìåíò. Ñëåäîâàòåëüíî, ìíîæåñòâî Bk íà øàãå (24)
äåéñòâèòåëüíî ÿâëÿåòñÿ áëîêîì.
Òåïåðü ïðåäïîëîæèì, ÷òî p(v) = s. Åñëè óñëîâèå íà ýòàïå (27) âûïîëíåíî, s ÿâëÿåòñÿ
òî÷êîé ñî÷ëåíåíèÿ. Êàê ïîêàçàíî âûøå, Bk ÿâëÿåòñÿ áëîêîì G.  ÷àñòíîñòè, s äîáàâëÿåòñÿ â C òèòòê íå âñå ðåáðà, èíöèäåíòíûå ñ s, áûëè îáðàáîòàíû, êîãäà âïåðâûå ñòàëî
âûïîëíÿòüñÿ ðàâåíñòâî p(v) = s.
 îáîèõ ñëó÷àÿõ v çàìåíÿåòñÿ â ýòîé òî÷êå åãî ïðåäøåñòâåííèêîì p(v). Ïî äîêàçàííûì âûøå ëåììàì âñå òî÷êè ñî÷ëåíåíèÿ áûëè íàéäåíû ïîñëå çàâåðøåíèÿ ðàáîòû
àëãîðèòìà (ïîñëå òîãî, êàê âñå ðåáðà áûëè èñïîëüçîâàíû â îáîèõ íàïðàâëåíèÿõ).


124

Ãðàôû è àëãîðèòìû

Êîìïîíåíòû ñèëüíîé ñâÿçíîñòè
Ïî àíàëîãèè ñ ïîíÿòèåì áëîêîâ â íåîðèåíòèðîâàííîì ãðàôå ìíîæåñòâî âåðøèí ìîæíî îïðåäåëèòü êîìïîíåíòû ñèëüíîé ñâÿçíîñòè â îðèåíòèðîâàííûõ ãðàôàõ. Â ýòîé ñåêöèè
ãðàôû ïîëàãàþòñÿ îðèåíòèðîâàííûìè.

Îïðåäåëåíèå 4.12. Ñêàæåì, ÷òî îðèåíòèðîâàííûé ãðàô G = (V, E)

ñèëüíî ñâÿçíûé,

åñëè äëÿ ëþáîé ïàðû âåðøèí v è u åñòü îðèåíòèðîâàííûé ïóòü èç v â u è èç u â v .

Ìîæíî ïîñòðîèòü àëãîðèòì ïîèñêà êîìïîíåíò ñèëüíîé ñâÿçíîñòè, àíàëîãè÷íûé BlockÌû ðàññìîòðèì áîëåå ïðîñòîé àëãîðèòì Kosaraju-Sharir, çàïóñêàþùèé DFS äâàæäû  íà G è íà îðãðàôå, ïîëó÷åííîì èç G îáðàùåíèåì îðèåíòàöèè.
Ñíà÷àëà íåìíîãî ìîäèöèðóåì DFS.
1: procedure DFSM(G = (V, E), s)
2:
for v ∈ V do
3:
nr(v) ← 0, p(v) ← 0

Cut.

4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

end for
for e ∈ E do
u(e) ← false
end for

i ← 1, v ← s, nr(s) ← 1, N r(s) ← |V |
while v 6= s èëè ∃w ∈ As u(sw) = false do
while ∃w ∈ Av : u(vw) = false do
âûáðàòü w ∈ Av : u(vw) = false, u(vw) = true
if nr(w) = 0 then
p(w) ← v , i ← i + 1, nr(w) = i, v ← w

end if
end while

j ← j + 1, N r(v) ← j , v ← p(v)

end while
return p, nr, N r
end procedure

Çäåñü N r(·)  íóìåðàöèÿ âåðøèí â ïîðÿäêå, â êîòîðîì îíè áûëè ïîëíîñòüþ ïðîñìîòðåíû (òî åñòü åñëè N r(v) = i, òî äî v ðîâíî i−1 âåðøèíà áûëà ïîëíîñòüþ ïðîñêàíèðîâàíà
DFS).
1: procedure Kosaraju-Sharir(G = (V, E), s)
2:
p, nr, N r = DFSM(G = (V, E), s)
3:
H = (V ∗ , E ∗ )  ãðàô, ïîëó÷åííûé èç G îáðàùåíèåì îðèåíòàöèè
4:
while V ∗ 6= ∅ do
5:
âçÿòü u ∈ V ∗ òàêóþ, ÷òî N r(u) ìàêñèìàëüíî
6:
k ←k+1
125

Ãðàôû è àëãîðèòìû
n
fr, pe = DFS(H, u)
Ck ← {v ∈ V ∗ | n
fr(v) 6= 0}
óäàëèòü èç H âåðøèíû Ck è ñìåæíûå ñ Ck ðåáðà

7:
8:
9:
10:
11:
12:

end while
return C1 , . . .
end procedure
Ïðèìåð 4.13. Ðàññìîòðèì ãðàô íà èçîáðàæåíèè íèæå ñëåâà.
a(8)
s(9)

d(5)
c(6)

b(7)

h(4)
f (2)

e(3)

a(8)
s(9)

g(1)

d(5)
c(6)

b(7)

h(4)
f (2)

e(3)

g(1)

Ðèñ. 6. Ñëåâà  çíà÷åíèÿ N r íà îðèãèíàëüíîì ãðàôå G. Ñïðàâà  H ,
ïîëó÷åííûé èç G îáðàùåíèåì ðåáåð

[Ýòîò ãðàô áåç îðèåíòàöèè áûë â ïðèìåðå 4.2.] Íåòðóäíî óáåäèòüñÿ, ÷òî DFS ïîñåùàåò âåðøèíû çäåñü â òîì æå ïîðÿäêå, ÷òî è â ïðèìåðå 4.2.  ñêîáêàõ óêàçàíû çíà÷åíèÿ
N r.
Òåïåðü îáðàòèì îðèåíòàöèþ è çàïóñòèì DFS. Íà÷èíàåì ñ âåðøèíû s  ó íåå N r
ìàêñèìàëüíûé. Èëëþñòðàöèÿ ??  íà ñëåäóþùåé ñòðàíèöå.
 èòîãå ìû ïîëó÷àåì C1 = {s, a, b}, C2 = {c, d, e, f, g}, C3 = {h}. Íåòðóäíî âèäåòü,
÷òî ýòè ìíîæåñòâà  êîìïîíåíòû ñèëüíîé ñâÿçíîñòè ãðàôà G.

Ïóñòü G  îðãðàô ñ êîðíåì s. Òîãäà Kosaraju-Sharir âû÷èñëÿåò êîìïîíåíòû ñèëüíîé ñâÿçíîñòè è èìååò ñëîæíîñòü O(|E|).
Òåîðåìà 4.14.

Äîêàçàòåëüñòâî. Ñíà÷àëà ìû äîëæíû ïîêàçàòü, ÷òî ìíîæåñòâà âåðøèí C1 , . . . , Ck ,
êîòîðûå âû÷èñëÿþòñÿ â êàæäîé èòåðàöèè áîëüøîãî öèêëà, åñòü íàáîð êîìïîíåíò ñèëüíîé
ñâÿçíîñòè G. Ïóñòü v è w  äâå âåðøèíû â îäíîé è òîé æå êîìïîíåíòå ñèëüíîé ñâÿçíîñòè
G. Òîãäà ñóùåñòâóþò îðèåíòèðîâàííûå ïóòè èç v â w è èç w â v â G, à ñëåäîâàòåëüíî,
òàêæå è â H . Ìîæíî ïðåäïîëîæèòü, ÷òî v äîñòèãàåòñÿ ðàíüøå w âî âðåìÿ ðàáîòû DFS
íà H . Êðîìå òîãî, ïóñòü Ti  îðèåíòèðîâàííîå äåðåâî, ñîäåðæàùåå v , à x  êîðåíü Ti .
Òàê êàê w äîñòèæèìà èç v â H è íå ðàññìàòðèâàëàñü ðàíåå, w äîëæåí òàêæå ñîäåðæàòüñÿ
â Ti : íåòðóäíî âèäåòü, ÷òî w äîñòèãàåòñÿ âî âðåìÿ âûïîëíåíèÿ DFS ñ êîðíåì x.
Íàîáîðîò, ïóñòü v è w äâå âåðøèíû, ñîäåðæàùèåñÿ â îäíîì è òîì æå îðèåíòèðîâàííîì
äåðåâå i (íà Ci ). Îïÿòü æå, ïóñòü x áóäåò êîðíåì Ti ; ìû ìîæåì ïðåäïîëîæèòü, ÷òî v 6=

126

Ãðàôû è àëãîðèòìû
a
s

d
c

a

h
s

f

d
c

a

h
s

f

d
c

h
f

b

e

g

b

e

g

b

e

g

a

d

h

a

d

h

a

d

h

s

c

s

f

c

s

f

c

f

b

e

g

b

e

g

b

e

g

a

d

h

a

d

h

a

d

h

s

c

s

f

c

s

f

c

f

b

e

g

b

e

g

b

e

g

a

d

h

a

d

h

a

d

h

s

c

s

f

c

s

f

c

f

b

e

g

b

e

g

b

e

g

a

d

h

a

d

h

a

d

h

s

c
b

s

f
g

e
a
s

Ðèñ. 7.

d

e

g
a

h
s

f
g

s

f
e

b

c
b

c

d

f
e

b

c
b

c

g

h
f

e

Âòîðîé çàïóñê DFS íà ãðàôå â àëãîðèòìå

g
Kosaraju-Sharir.

. Ïîñêîëüêó v  ïîòîìîê x â Ti , ñóùåñòâóåò îðèåíòèðîâàííûé ïóòü èç x â v â H è,
ñëåäîâàòåëüíî, è â G. Òåïåðü v åùå íå áûë ïîëíîñòüþ ïðîñêàíèðîâàí âî âðåìÿ DFS íà
H ñ êîðíåì x, òàê ÷òî N r(v) < N r(x). Òàêèì îáðàçîì, v áûëà ïîëíîñòüþ ïðîñìîòðåíà
ðàíüøå, ÷åì x. Íî òàê êàê äîñòèæèìà èç V â G, v íå ìîæåò áûòü äîñòèãíóòà ðàíüøå,
÷åì x. Îòñþäà ñëåäóåò, ÷òî v äîëæíî áûòü ïîòîìêîì x â ñâÿçóþùåì äåðåâå T äëÿ G.
Ñëåäîâàòåëüíî, òàêæå ñóùåñòâóåò íàïðàâëåííûé ïóòü îò x äî v â G, è x è v ñîäåðæàòñÿ
127

Ãðàôû è àëãîðèòìû
â òîì æå ñèëüíîì êîìïîíåíòå. Àíàëîãè÷íî w äîëæåí ñîäåðæàòüñÿ â òîé æå êîìïîíåíòå
ñèëüíîé ñâÿçíîñòè.
Òî, ÷òî ñëîæíîñòü Kosaraju-Sharir åñòü O(|E|), î÷åâèäíî  DFSM ðàáîòàåò çà
O(|E|), à DFS íà êàæäîé èòåðàöèè îñíîâíîãî öèêëà îáðàáàòûâàåò êîìïîíåíòó ñâÿçíîñòè
íåêîòîðîé âåðøèíû, òî åñòü çà âñå èòåðàöèè DFS ñîâåðøàåò O(|E|) îïåðàöèé.

Àëãîðèòì ïîèñêà êîìïîíåíò ñèëüíîé ñâÿçíîñòè èìååò ïðèìåíåíèå â ÷àñòíîì ñëó÷àå
êëàññè÷åñêîé çàäà÷è ðàçðåøåíèÿ ÊÍÔ. Íàïîìíèì, ÷òî 2-SAT  ÿçûê 2-ÊÍÔ [òî åñòü
±
áóëåâûõ ôîðìóë âèäà φ1 ∧ . . . ∧ φn , ãäå φi = x±
i,1 ∨ xi,2 ], êîòîðûå âûïîëíåíû õîòÿ áû íà
îäíîì íàáîðå çíà÷åíèé ïåðåìåííûõ.

Òåîðåìà 4.15.

ßçûê 2-SAT ïðèíàäëåæèò êëàññó P.

Äîêàçàòåëüñòâî. Ðàññìîòðèì ãðàô íà 2n âåðøèíàõ, ñîîòâåòñòâóþùèõ ïàðàì ëèòåðàëîâ, êîòîðûå âñòðå÷àþòñÿ â ôîðìóëå. Äëÿ ëþáîãî äèçúþíêòà âèäà a ∨ b, âñòðå÷àþùåãîñÿ â ôîðìóëå, ïðîâåä¼ì äâà îðèåíòèðîâàííûõ ðåáðà: ¬a → b è ¬b → a (îïèðàåìñÿ íà
òîò ôàêò, ÷òî a ∨ b ýêâèâàëåíòíî (¬a → b) ∧ (¬b → a); ñì. ðèñóíîê 1). Ñìûñë â òîì, ÷òî
åñëè b íå ðàâíÿåòñÿ åäèíèöå, òî a ðàâíÿåòñÿ åäèíèöå (è íàîáîðîò); çäåñü íà ðåáðî ìîæíî
ñìîòðåòü êàê íà èìïëèêàöèþ. Âî-ïåðâûõ, â ïîëó÷åííîì ãðàôå ñóùåñòâóåò ïóòü èç âåðøèíû a â âåðøèíó b òîãäà è òîëüêî òîãäà, êîãäà ñóùåñòâóåò ïóòü èç ¬b â ¬a. Äåéñòâèòåëüíî,
åñëè åñòü ïóòü a → a1 → . . . → ak → b, òî åñòü è ïóòü ¬b → ¬ak → . . . → ¬a1 → ¬a, òàê
êàê ïîñòðîåíèþ äëÿ ëþáîãî ðåáðà a → b åñòü ðåáðî ¬b → ¬a.

x

¬x

y

¬z

z
Ðèñ. 8.

128

¬y

Ãðàô, ïîñòðîåííûé ïî ôîðìóëå (¬x ∨ y) ∧ (¬y ∨ z) ∧ (x ∨ ¬z) ∧ (z ∨ y)

Ãðàôû è àëãîðèòìû
Òåïåðü ïîêàæåì, ÷òî èñõîäíàÿ ÊÍÔ âûïîëíèìà òîãäà è òîëüêî òîãäà, êîãäà íå ñóùåñòâóåò ïóòè èç x â ¬x è íå ñóùåñòâóåò ïóòè èç ¬x â x îäíîâðåìåííî äëÿ íåêîòîðîé ïåðåìåííîé x. Ïóñòü â ãðàôå åñòü ïóòü èç x â ¬x è ïóòü èç ¬x â x. Ïðåäïîëîæèì, ÷òî ñóùåñòâóåò âûïîëíÿþùèé íàáîð. Òîãäà, åñëè x = 1 â ýòîì íàáîðå, òî â ïóòè
x → x1 → . . . → xl−1 → xl → ¬x âñå ëèòåðàëû äîëæíû ïðèíåìàòü çíà÷åíèå ðàâíîå åäèíèöå (â ñèëó òîãî, ÷òî ðåáðó α → β ñîîòâåòñâòóåò èìïëèêàöèÿ α → β , êîòîðàÿ ýêâèâàëåíòíà
äèçúþíêòó ¬α∨β , êîòîðûé â ñâîþ î÷åðåäü ðàâåí íóëþ òîëüêî íà íàáîðå α = 1, β = 0). Íî
òîãäà x = ¬x = 1, ïðîòèâîðå÷èå. Åñëè æå x = 0, òî ¬x = 1, è, àíàëîãè÷íî ðàññìàòðèâàÿ
ïóòü ¬x → y1 → . . . → yt−1 → yt → x, ïîëó÷àåì ïðîòèâîðå÷àùåå ðàâåíñòâî ¬x = x = 1.
 îáðàòíóþ ñòîðîíó: ïóñòü äëÿ ëþáîé ïåðåìåííîé x èç âåðøèíû x íåëüçÿ äîñòè÷ü
¬x è èç âåðøèíû ¬x íåëüçÿ äîñòè÷ü x îäíîâðåìåííî. Ïîêàæåì, ÷òî òîãäà ñóùåñòâóåò
âûïîëíÿþùèé íàáîð. Íå óìàëÿÿ îáùíîñòè, ïóñòü èç x íå äîñòèæèìà âåðøèíà ¬x. Òîãäà
íå ñóùåñòâóåò òàêîé âåðøèíû y , ÷òî èç x äîñòèæèìà âåðøèíà y , èç êîòîðîé äîñòèæèìà
¬y . Äåéñòâèòåëüíî, åñëè áû òàêàÿ âåðøèíà ñóùåñòâîâàëà, òî ñóùåñòâîâàë áû è ïóòü èç
¬y â ¬x, êàê ìû îòìåòèëè ðàíåå. Íî òîãäà ìîæíî áûëî áû èç x ïîïàñòü â âåðøèíó y ,
çàòåì â ¬y , à ïîòîì â ¬x, òî åñòü ñóùåñòâîâàë áû ïóòü èç x â ¬x. Ïðîòèâîðå÷èå. Òîãäà âûïîëíÿþùèé íàáîð ìîæíî ïîñòðîèòü ñëåäóþùèì ñïîñîáîì: ðàññìîòðèì ëèòåðàë x
òàêîé, ÷òî èç x íå äîñòèæèì ¬x. Äàëåå ðàññìîòðèì âñå âåðøèíû, äîñòèæèìûå èç âåðøèíû x (âêëþ÷àÿ x) è ïðèñâîèì ñîîòâåòñòâóþùèì ëèòåðàëàì çíà÷åíèå 1. Êîíôëèêòîâ
âîçíèêíóòü íå ìîæåò, ò.ê. åñëè èç x äîñòèæèì è y è ¬y , òî åñòü ïóòü èç x â y , à çàòåì
èç y â ¬x, òî åñòü ïóòü èç x â ¬x. À òàêèõ ïóòåé äëÿ âåðøèíû x íåò ïî ïðåäïîëîæåíèþ.
Òàêèì îáðàçîì ìû ïîëó÷èì ìíîæåñòâî ëèòåðàëîâ Ax , çíà÷åíèÿ êîòîðûõ ðàâíû åäèíèöå
è êîòîðûå äîñòèæèìû èç x. Ýòîìó ìíîæåñòâó ëèòåðàëîâ òàêæå ñîîòâåòñòâóåò ìíîæåñòâî
ëèòåðàëîâ Bx , ñîñòîÿùåå èç îòðèöàíèé ëèòåðàëîâ ìíîæåñòâà Ax . Çíà÷èò, âî ìíîæåñòâå
Bx âñå ëèòåðàëû ðàâíû íóëþ, êîíôëèêòîâ áûòü íå ìîæåò. Ïðè ýòîì âî ìíîæåñòâî Bx
áîëüøå íå âõîäèò íèêàêèõ ð¼áåð íå èç ìíîæåñòâà Bx , à èç ìíîæåñòâà Ax íå âûõîäÿò ð¼áðà
â âåðøèíû íå èç ìíîæåñòâà Ax . Ýòî îçíà÷àåò, ÷òî ìû ÷àñòè÷íî (âîçìîæíî è ïîëíîñòüþ)
ïðèñâîèëè çíà÷åíèÿ ëèòåðàëàì òàê, ÷òî ïîëó÷èëñÿ ãðàô, ó êîòîðîãî èç ïðèñâîåííûõ âåðøèí âûõîäèò ðåáðî ëèáî â ïðèñâîåííûå âåðøèíû, à â íåïðèñâîåííûå âåðøèíû âûõîäèò
ðåáðî òîëüêî èç íóëåâûõ âåðøèí; àíàëîãè÷íî, ð¼áðî âõîäèò â ïðèñâîåííóþ âåðøèíó, åñëè
åé ïðèñâîåíî çíà÷åíèå 1, ëèáî åñëè ýòî ðåáðî ïðîâåäåíî èç äðóãîé ïðèñâîåííîé âåðøèíû.
Èíûìè ñëîâàìè, ìû ìîæåì îòáðîñèòü ïðèñâîåííûå âåðøèíû (âìåñòå ñ ð¼áðàìè âõîäÿùèìè è èñõîäÿùèìè èç íèõ) è ïðèñâàèâàòü îñòàâøèìñÿ âåðøèíàì çíà÷åíèÿ ïî àíàëîãèè
ñ òåì, êàê ìû ýòî ñäåëàëè äëÿ âåðøèíû x. Ïðè ýòîì êîíôëèêòîâ, ñâÿçàííûõ ñ ð¼áðàìè,
êîòîðûå ìû îòêèíóëè íå áóäåò: ìû îòáðîñèëè ð¼áðà, ñîîòâåòñòâóþùèå èìïëèêàöèÿì âèäà
a → 1 è 0 → b, êîòîðûå âñåãäà âûïîëíåíî, âíå çàâèñèìîñòè îò a è b. Òàêèìè äèéñòâèÿìè
ìû ïîëó÷èì íàáîð, êîòîðûé âûïîëíÿåò âñå èìïëèêàöèè, êîòîðûå ñîîòâåòñòâóþò ð¼áðàì,
à çíà÷èò, è âñå äèçúþíêòû â èñõîäíîé ôîðìóëå.

129

Ãðàôû è àëãîðèòìû
Ïîýòîìó äîñòàòî÷íî ïðîâåðèòü, ÷òî â ãðàôå íåò ïóòåé ìåæäó x è ¬x, ¬x è x äëÿ
êàæäîé ïåðåìåííîé, âñòðå÷àþùåéñÿ â ôîðìóëå. Ýòî ìîæíî ñäåëàòü, íàéäÿ êîìïîíåíòû
ñèëüíîé ñâÿçíîñòè.


Breadth-rst search
Òåïåðü ïåðåéäåì ê èçó÷åíèþ àëãîðèòìîâ ïîèñêà êðàò÷àéøèõ ïóòåé. Íà÷íåì ñ ôóíäàìåíòàëüíîãî àëãîðèòìà  ïîèñêà â øèðèíó. Íà÷èíàÿ ñ âåðøèíû s, àëãîðèòì ñêàíèðóåò
ñíà÷àëà 1-îêðåñòíîñòü s, çàòåì 2-îêðåñòíîñòü èòä. Êàê è DFS, ïîèñê â øèðèíó ìîæíî
îäèíàêîâûì îáðàçîì çàïóñêàòü è íà ãðàôàõ [íåîðèåíòèðîâàííûõ], è íà îðãðàôàõ.
Ìû áóäåì âû÷èñëÿòü d : V → N  äëèíó êðàò÷àéøåãî ïóòè îò äàííîé âåðøèíû äî s.
Âíà÷àëå íàì íóæíî ñîçäàòü î÷åðåäü Q  ëèíåéíî óïîðÿäî÷åííîå ìíîæåñòâî, äîáàâëÿòü
ýëåìåíò â êîòîðîå ìîæíî òîëüêî â êîíåö, à óäàëÿòü  òîëüêî ïåðâûé [rst in  rst out].
1: procedure BFS(G = (V, E), s)
2:
Q ← ∅, d(s) ← 0
3:
while Q 6= ∅ do
4:
èçâëå÷ü ïåðâûé ýëåìåíò v èç Q
5:
for w ∈ Av do
6:
if d(w) íå îïðåäåëåíî then
7:
d(w) ← d(v) + 1
8:
äîáàâèòü w â Q
9:
10:
11:
12:
13:

end if
end for
end while
return d
end procedure

Ïðèìåð 4.16. Ïðîäåìîíñòðèðóåì ðàáîòó
Q = {s}.

a
s

c

a

h
s

f

íà ãðàôå èç ïðèìåðà 4.2. Èçíà÷àëüíî

d
c

a

h
s

f

d
c

h
f

b

e

g

b

e

g

b

e

g

a

d

h

a

d

h

a

d

h

s

c
b

130

d

BFS

s

f
e

g

c
b

s

f
e

g

c
b

f
e

g

Ãðàôû è àëãîðèòìû
Çäåñü ïîêàçàíû äâà øàãà  ïîñëå ïåðâîãî øàãà Q = {a, b, c}, ïîýòîìó íà âòîðîì
øàãå ðàññìàòðèâàåòñÿ âåðøèíà a. Òóò ïîëó÷àåì Q = {b, c, d}. Ïðîäîëæàÿ â òîì æå äóõå,
ïîëó÷èì îñòîâíîå äåðåâî ñ ðèñóíêà íà ñëåäóþùåé ñòðàíèöå.
a

s

d

c

h

f

e

b
Ðèñ. 9.

g

BFS-äåðåâî.

Òåîðåìà 4.17. Àëãîðèòì BFS èìååò ñëîæíîñòü O(|E|). Äëÿ êàæäîé âåðøèíû v âû÷èñëåííîå çíà÷åíèå d(v), åñëè îíî îïðåäåëåíî, ðàâíî äëèíå êðàò÷àéøåãî ïóòè îò s äî
v.
Äîêàçàòåëüñòâî. Î÷åâèäíî, ÷òî êàæäîå ðåáðî ïðîâåðÿåòñÿ íå áîëåå äâóõ ðàç BFS
(â ñëó÷àå îðèåíòèðîâàííîãî òîëüêî îäèí ðàç)  êàæäàÿ âåðøèíà, èç êîòîðîé âûõîäèò
ðåáðî, ðàññìàòðèâàåòñÿ îäíàæäû (â ìîìåíò âû÷èñëåíèÿ d), ÷òî äàåò óòâåðæäåíèå î ñëîæíîñòè. Áîëåå òîãî, d(s, v) íå îïðåäåëåíî òèòòê v íå äîñòèæèìà èç s, è, òàêèì îáðàçîì, d(v)
îñòàåòñÿ íåîïðåäåëåííûì íà ïðîòÿæåíèè ðàáîòû àëãîðèòìà. Ïóñòü òåïåðü v  âåðøèíà,
äëÿ êîòîðîé d(s, v) îïðåäåëåíî. Òîãäà d(s, v) 6 d(v), òàê êàê ñóùåñòâóåò ïóòü èç s â v
äëèíû d(v)  v ñìåæíà ñ íåêîòîðîé âåðøèíîé v1 , äëÿ êîòîðîé d(v1 ) = d(v) − 1, äëÿ v1
àíàëîãè÷íî íàéäåì v2 , ïðîäîëæàÿ òàêèì îáðàçîì, íàéäåì ïóòü. Ïîêàæåì èíäóêöèåé ïî
d(s, v), ÷òî âûïîëíÿåòñÿ ðàâåíñòâî. Äëÿ d(s, v) = 0 ïîëó÷àåì s = v , ðàâåíñòâî òðèâèàëüíî.
Òåïåðü ïðåäïîëîæèì, ÷òî d(s, v) = n + 1 è ïóñòü (s, v1 , ..., vn , v)  êðàò÷àéøèé ïóòü îò
s äî v . Òîãäà (s, v1 , ..., vn )  êðàò÷àéøèé ïóòü èç s ê vn è, ñîãëàñíî íàøåìó ïðåäïîëîæåíèþ èíäóêöèè, d(s, vn ) = n = d(vn ). Ñëåäîâàòåëüíî, d(vn ) = d(s, vn ) < d(s, v) = d(v),
è, òàêèì îáðàçîì, BFS îáðàáàòûâàåò vn ðàíüøå v . Ñ äðóãîé ñòîðîíû, G ñîäåðæèò ðåáðî
vn v , òàê ÷òî BFS äîñòèãàåò v ïðè ðàññìîòðåíèè ñïèñêà ñìåæíîñòè vn (åñëè íå ðàíüøå).
Ýòî ïîêàçûâàåò d(v) 6 n + 1 è, ñëåäîâàòåëüíî, d(v) = n + 1.


Íåòðóäíî ìîäèôèöèðîâàòü BFS òàê, ÷òîáû âû÷èñëÿòü îñòîâíîå äåðåâî. Ïî àíàëîãèè
ìû áóäåì íàçûâàòü òàêîå äåðåâî
.
Òåïåðü ïîñòðîèì ëèíåéíûé ïî |E| àëãîðèòì ïðîâåðêè äâóäîëüíîñòè íåîðèåíòðîâàííîãî ãðàôà.
ñ

DFS

BFS-äåðåâîì

131

Ãðàôû è àëãîðèòìû
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

procedure Bipart(G = (V, E), s)
Q ← ∅, d(s) ← 0, bip ← true, S ← ∅
while Q 6= ∅ è bip = true do
èçâëå÷ü ïåðâûé ýëåìåíò v èç Q
for w ∈ Av do
if d(w) íå îïðåäåëåíî then
d(w) ← d(v) + 1
äîáàâèòü w â Q

else
if d(v) = d(w) then
bip ← false
end if
end if
end for
if bip = true then
for v ∈ V do
if d(v) = 0 mod 2 then
S ← S ∪ {v}

end if
end for

T ←V \S

end if
end while
return S, T , bip
end procedure

Òåîðåìà 4.18. Ãðàô G ÿâëÿåòñÿ äâóäîëüíûì òîãäà è òîëüêî òîãäà, êîãäà îí íå ñîäåðæèò öèêëû íå÷åòíîé äëèíû.
Äîêàçàòåëüñòâî. Ñíà÷àëà ïðåäïîëîæèì, ÷òî G äâóäîëüíûé, è ïóñòü V = S ∪ T 
ñîîòâåòñòâóþùåå ðàçáèåíèå åãî ìíîæåñòâà âåðøèí. Ðàññìîòðèì ïðîèçâîëüíûé çàìêíóòûé ïóòü â G, ñêàæåì

v1

v2

...

vn

v1

Ìîæíî ñ÷èòàòü, ÷òî v1 ∈ S . Òîãäà v2 ∈ T, v3 ∈ S, v4 ∈ T, . . . , vn ∈ T, v1 ∈ S , ëþáîå ðåáðî
ñîåäèíÿåò îäíó âåðøèíó èç S ñ îäíîé âåðøèíîé èç T . Ñëåäîâàòåëüíî, n äîëæíî áûòü
÷åòíûì.
Òåïåðü ïðåäïîëîæèì, ÷òî G íå ñîäåðæèò öèêëîâ íå÷åòíîé äëèíû. Ìîæíî ñ÷èòàòü,
÷òî G ñâÿçåí. Âûáåðèòå íåêîòîðóþ âåðøèíó x0 . Ïóñòü S áóäåò ìíîæåñòâî âñåõ âåðøèí x,
èìåþùèõ ÷åòíîå ðàññòîÿíèå d(x, x0 ) îò x0 , è ïóñòü T = V \S . Ïðåäïîëîæèì òåïåðü, ÷òî â G
132

Ãðàôû è àëãîðèòìû
åñòü ðåáðî xy ñ x, y ∈ S . Ïóñòü Wx è Wy  êðàò÷àéøèå ïóòè èç x0 â x è y ñîîòâåòñòâåííî.
Ïî îïðåäåëåíèþ S îáà ýòè ïóòè èìåþò ÷åòíóþ äëèíó. Îáîçíà÷èì ïîñëåäíþþ îáùóþ
âåðøèíó Wx è Wy ïî z (ïåðåñåêàåò îáà ïóòè, íà÷èíàÿ ñ x0 ), à èõ ïîñëåäíèå ÷àñòè (âåäóùèå
îò z ê x è y ñîîòâåòñòâåííî)  Wx0 è Wy0 . Òîãäà ëåãêî óâèäåòü, ÷òî ïóòü
Wx0

Wy0

xy

x −−− z −−− y −−− x

îáðàçóåò öèêë íå÷åòíîé äëèíû â G, ïðîòèâîðå÷èå. Òî÷íî òàê æå G íå ìîæåò ñîäåðæàòü
ðåáðî xy , ãäå x, y ∈ T . Îòñþäà S ∪T ÿâëÿåòñÿ ðàçáèåíèåì V òàêèì, ëþáîå ðåáðî ñîåäèíÿåò
îäíó âåðøèíó èç S ñ îäíîé âåðøèíîé èç T . Ñëåäîâàòåëüíî, ãðàô G äâóäîëüíûé.


Óòâåðæäåíèå 4.19. Bipart îïðåäåëÿåò äâóäîëüíîñòü âõîäíîãî ãðàôà çà O(|E|). Åñëè
ãðàô äâóäîëüíûé, Bipart òàêæå âû÷èñëÿåò ñîîòâåòñòâóþùåå ðàçáèåíèå.
Äîêàçàòåëüñòâî. Çíà÷åíèå bip ïîìåíÿåòñÿ íà false òèòòê d(v) = d(w) äëÿ íåêîòîðîé ïàðû ñìåæíûõ âåðøèí v è w; ñîãëàñíî òåîðåìå 4.18, ýêâèâàëåíòíî íàëè÷èþ â ãðàôå
öèêëà íå÷åòíîé äëèíû. Òàêèì îáðàçîì, àëãîðèòì êîððåêòíî îïðåäåëÿåò äâóäîëüíîñòü
ãðàôà. Íåòðóäíî òàêæå âèäåòü, ÷òî âñå âåðøèíû, äëÿ êîòîðûõ d(v) ÷åòíî, îáðàçóþò
îäíó äîëþ ãðàôà. Äåéñòâèòåëüíî, åñëè âåðøèíû v1 è v2 , äëÿ êîòîðûõ d(v1 ) = 2k1 è
d(v2 ) = 2k2 , ñîåäèíåíû ðåáðîì, òî ðàññóæäåíèÿìè, àíàëîãè÷íûìè òåîðåìå 4.18, ïîëó÷àåì öèêë íå÷åòíîé äëèíû, êîòîðîãî íåò. Íåòðóäíî òàêæå âèäåòü, ÷òî ñëîæíîñòü äàííîãî
àëãîðèòìà O(|E|).


Ïîèñê êðàò÷àéøèõ ïóòåé
BFS ïîçâîëÿåò íàõîäèòü íàèìåíüøèå ïî êîëè÷åñòâó ð¼áåð ïóòè èç çàäàííîé âåðøèíû âî âñå âåðøèíû, â êîòîðûå èç íå¼ ìîæíî ïîïàñòü. Èíûìè ñëîâàìè, ïîèñê â øèðèíó
ðåøàåò çàäà÷ó î ïîèñêå êðàò÷àéøèõ ïóòåé èç äàííîé âåðøèíû âî âñå îñòàëüíûå âåðøèíû äëÿ ãðàôîâ, ó êîòîðûõ âñå ð¼áðà ðàâíîöåííû (èìåþò îäèíàêîâûé âåñ). Íî åñëè ãðàô
ìîäåëèðóåò, íàïðèìåð, êàðòó àâòîìîáèëüíûõ äîðîã (âåðøèíû ñîîòâåòñòâóþò íàñåë¼ííûì
ïóíêòàì, ð¼áðà  äîðîãàì), òî äëÿ íàõîæäåíèÿ êðàò÷àéøåãî (â æèòåéñêîì ñìûñëå) ïóòè ìåæäó äâóìè ïóíêòàìè èìååò ñìûñë ðàçëè÷àòü ð¼áðà ìåæäó ñîáîé. Îáû÷íî â òàêèõ
ñëó÷àÿõ ââîäÿò
w : E → R, êîòîðàÿ êàæäîìó ðåáðó ãðàôà ñòàâèò â
ñîîòâåòñòâèå íåêîòîðîå
÷èñëî.  ñëó÷àå ïðèìåðà ñ êàðòîé àâòîìîáèëüíûõ
äîðîã ðàçóìíî âûáðàòü âåñîâóþ ôóíêöèþ êàê äëèíó ñîîòâåòñòâóþùåé äîðîãè â íåêîòîðûõ åäèíèöàõ èçìåðåíèÿ äëèíû  â òàêîì ñëó÷àå âåñîâàÿ ôóíêöèÿ áóäåò ïîëîæèòåëüíîé. Îäíàêî ìû äîïóñêàåì, ÷òî îíà ìîæåò áûòü è îòðèöàòåëüíîé äëÿ íåêîòîðûõ ãðàôîâ.
Òàêàÿ îáùàÿ ïîñòàíîâêà ðàññìàòðèâàåòñÿ íå ñëó÷àéíî: ãðàô ìîæåò çàäàâàòü ñîñòîÿíèÿ
íåêîòîðîé ôèðìû; ïðè ïåðåõîäå îò îäíîãî ñîñòîÿíèÿ ê äðóãîìó ôèðìà, ñêàæåì, çàêëþ÷àåò ñäåëêó; îò ñäåëêè îíà ìîæåò íåñòè óáûòêè èëè, íàîáîðîò, ïîëó÷àòü ïðèáûëü.  òàêîé

âåñîâóþ ôóíêöèþ
âåùåñòâåííîå

133

Ãðàôû è àëãîðèòìû
ïîñòàíîâêå ñòàíîâèòñÿ ïîíÿòíî, ÷òî åñëè ìû ñîáèðàåìñÿ ââåñòè âåñîâóþ ôóíêöèþ, òî îíà
äîëæíà èìåòü âîçìîæíîñòü ïðèíèìàòü çíà÷åíèÿ îáîèõ çíàêîâ.
p = (v0 , v1 , . . . , vk ) íàçûâàåòñÿ ñëåäóþùàÿ ñóììà:

Âåñîì ïóòè

w(p) =

k
X

w(vi−1 , vi ).

i=1

Âåñîì êðàò÷àéøåãî ïóòè èç âåðøèíû u â âåðøèíó v áóäåì íàçûâàòü ñëåäóþùóþ âåëè-

÷èíó

(
min{w(p) | u
δ(u, v) =


p

v},

åñëè ñóùåñòâóåò ïóòü èç u â v,
èíà÷å.

Âàæíî ïîíèìàòü, ÷òî åñëè ìû äîïóñêàåì íàëè÷èå ð¼áåð îòðèöàòåëüíîãî âåñà, òî
çàäà÷à èìååò ñìûñë òîëüêî â òîì ñëó÷àå, åñëè íåò öèêëîâ îòðèöàòåëüíîãî âåñà (èëè èõ
íåò íà ëþáîì ïóòè ìåæäó äâóìÿ èíòåðåñóþùèìè íàñ âåðøèíàìè). Äåéñòâèòåëüíî, ïî
öèêëó îòðèöàòåëüíîãî âåñà ìîæíî ïðîéòè ñêîëüêî óãîäíî ðàç, òåì ñàìûì êàæäûé ðàç
óìåíüøàÿ âåñ ïóòè íà íåêîòîðóþ ïîëîæèòåëüíóþ êîíñòàíòó, òî åñòü âåñ êðàò÷àéøåãî
ïóòè áóäåò íåîïðåäåë¼í (â òàêîì ñëó÷àå ãîâîðÿò, ÷òî îí ðàâåí (−∞)).
Êðîìå òîãî, ìû áóäåì ðàññìàòðèâàòü çàäà÷è, â êîòîðûõ íàì íóæíî íàéòè êàêîé-òî
êðàò÷àéøèé ïóòü (êðàò÷àéøèõ ïóòåé èç îäíîé âåðøèíû â äðóãóþ ìîæåò áûòü íåñêîëüêî,
íî äëÿ íàñ îíè âñå áóäóò ðàâíîöåííû). Ïîýòîìó â ðàññìàòðèâàåìûõ íàìè ïðîöåäóðàõ
ìû áóäåì çàïîìèíàòü íåêîòîðîãî ïðåäøåñòâåííèêà äëÿ êàæäîé âåðøèíû (êàê ýòî ìû
äåëàëè â àëãîðèòìàõ ïîèñêà â øèðèíó è â ãëóáèíó).  òå÷åíèè ðàáîòû ðàññìàòðèâàåìûå
íàìè àëãîðèòìû áóäóò ñòðîèòü òàê íàçûâàåìûå ïîäãðàôû ïðåäøåñòâîâàíèÿ. Äîïóñòèì,
ìû õîòèì íàéòè êðàò÷àéøèå ïóòè èç âåðøèíû s âî âñå îñòàëüíûå âåðøèíû.
Gπ = (Vπ , Eπ ) îïðåäåëÿåòñÿ ñëåäóþùè îáðàçîì: Vπ  ýòî òå âåðøèíû,
ó êîòîðûõ ïðåäøåñòâåííèê îòëè÷åí îò NIL, è ñòàðòîâàÿ âåðøèíà, òî åñòü

Ïîäãðàôîì

ïðåäøåñòâîâàíèÿ

Gπ = {v ∈ V | π[v] 6= NIL} ∪ {s};

ð¼áðà Gπ  ýòî ð¼áðà èç π[v] 6= NIL â v :
Eπ = {(π[v], v) ∈ E | v ∈ Vπ \ {s}}.

Âî-ïåðâûõ, çàôèêñèðóåì ïðîñòîå, íî âàæíîå ñâîéñòâî: ëþáàÿ ÷àñòü êðàò÷àéøåãî ïóòè
åñòü êðàò÷àéøèé ïóòü. Ôîðìàëüíî ýòî ìîæíî çàïèñàòü â âèäå ñëåäóþùåé òåîðåìû.

Ïóñòü G = (V, E)  âçâåøåííûé îðèåíòèðîâàííûé ãðàô ñ âåñîâîé ôóíêöèåé w : E → R. Åñëè p = (v , v , . . . , v )  êðàò÷àéøèé ïóòü èç v â v è 1 6 i 6 j 6 k,
òî p = (v , v , . . . , v )  êðàò÷àéøèé ïóòü èç v â v .

Òåîðåìà 4.20.

1

ij

i

i+1

j

2

1

k

i

Èç íåãî ñëåäóþò åù¼ äâà ïîëåçíûõ äëÿ íàñ ôàêòà.
134

j

k

Ãðàôû è àëãîðèòìû

Âûâîä 4.21. Ïóñòü G = (V, E)  âçâåøåííûé îðèåíòèðîâàíííûé ãðàô ñ âåñîâîé ôóíêöèåé w : E → R. Ðàññìîòðèì êðàò÷àéøèé ïóòü p èç s â v . Ïóñòü u → v  ïîñëåäíåå ðåáðî
â ýòîì ïóòè (p åñòü s

p0

u → v ). Òîãäà δ(s, v) = δ(s, u) + w(u, v).

Âûâîä 4.22. Ïóñòü G = (V, E)  âçâåøåííûé îðèåíòèðîâàíííûé ãðàô ñ âåñîâîé ôóíêöèåé w : E → R; ïóñòü s ∈ V . Òîãäà äëÿ âñÿêîãî ðåáðà (u, v) ∈ E èìååì δ(s, v) 6
δ(s, u) + w(u, v).

ðåëàêñàöèè
îöåíêà êðàò÷àéøåãî ïóòè

Òåïåðü îáñóäèì òåõíèêó
. Èäåÿ ñîñòîèò â òîì, ÷òîáû äëÿ êàæäîé âåðøèíû
v ∈ V õðàíèòü íåêîòîðîå ÷èñëî d[v], ÿâëÿþùååñÿ âåðõíåé îöåíêîé âåñà êðàò÷àéøåãî ïóòè
èç âåðøèíû s â âåðøèíó v (
).  íà÷àëå ðàáîòû àëãîðèòìîâ
ïîèñêà êðàò÷àéøèõ ïóòåé ìû áóäåì âûçûâàòü ôóíêöèþ Initialize-Single-Source(G, s),
êîòîðàÿ äëÿ êàæäîé âåðøèíû v ∈ V äåëàåò äâà ïðèñâàèâàíèÿ: d[v] ← ∞, π[v] ← NIL;
çàòåì äëÿ âåðøèíû s ìû êëàä¼ì d[s] ← 0. Ðåëàêñàöèÿ ðåáðà (u, v) ñîñòîèò â ñëåäóþùåì:
åñëè d[v] > d[u] + w(u, v), òî d[v] ← d[u] + w(u, v), òàê êàê ìû ìîæåì ïîïàñòü â âåðøèíó
v ÷åðåç âåðøèíó u. Ýòó íåçàòåéëèâóþ ïðîöåäóðó ìû áóäåì îáîçíà÷àòü Relax(u, v, w).
Îòìåòèì, ÷òî ñðàçó ïîñëå âûçîâà Relax(u, v, w) áóäåò âûïîëíåíî íåðàâåíñòâî d[v] 6
d[u] + w(u, v).
Êðîìå òîãî, åñëè ìû ñíà÷àëà âûçîâåì ïðîöåäóðó Initialize-Single-Source(G, s), à
çàòåì â íåêîòîðîì ïîðÿäêå áóäåì ðåëàêñèðîâàòü ð¼áðà, òî âñåãäà áóäåò âûïîëíåíî íåðàâåíñòâî d[u] > δ(s, u) äëÿ âñåõ u ∈ V . Åñëè â êàêîé-òî ìîìåíò äëÿ íåêîòîðîé âåðøèíû
v ∈ V áóäåò âûïîëíåíî ðàâåíñòâî d[v] = δ(s, v), òî îíî îñòàíåòñÿ âåðíûì è ïðè ïîñëåäóþùèõ ðåëàêñàöèÿõ ð¼áåð. Îòñþäà ñëåäóåò, ÷òî åñëè âåðøèíà v ∈ V íåäîñòèæèìà èç s, òî
ïðè ïðîèçâîëüíîé ïîñëåäîâàòåëüíîñòè ðåëàêñàöèè ð¼áåð çíà÷åíèå d[v] áóäåò îñòàâàòüñÿ
áåñêîíå÷íûì.
Íàêîíåö, åñëè â êàêîé-òî ìîìåíò áóäåò âûïîëíåíî d[u] = δ(s, u) è ìû ÷åðåç íåêîòîðîå
êîëè÷åñòâî øàãîâ ïðîðåëàêñèðóåì ðåáðî (u, v), òî â ñèëó Ñëåäñòâèÿ 1 ïîëó÷èì, ÷òî d[v] =
δ(s, v).
Òåïåðü ïîñìîòðèì, ÷òî ïðîèñõîäèò ñ ãðàôîì ïðåäøåñòâîâàíèÿ Gπ ïðè ïðîèçâîëüíîé
ïîñëåäîâàòåëüíîñòè ðåëàêñàöèé ð¼áåð ãðàôà G. Áóäåì ðàññìàòðèâàòü ãðàôû áåç öèêëîâ
îòðèöàòåëüíîãî âåñà, äîñòèæèìûõ èç íà÷àëüíîé âåðøèíû. Îêàçûâàåòñÿ, ÷òî â òàêîì ñëó÷àå ãðàô Gπ áóäåò âñåãäà ÿâëÿòüñÿ äåðåâîì ñ êîðíåì â âåðøèíå s. Çàôèêñèðóåì ýòîò ôàêò
â âèäå ñëåäóþùåé òåîðåìû.

Ïóñòü G = (V, E)  âçâåøåííûé îðèåíòèðîâàííûé ãðàô ñ âåñîâîé ôóíêöèåé w è ñòàðòîâîé âåðøèíîé s, ïðè÷¼ì â ãðàôå G íåò öèêëîâ îòðèöàòåëüíîãî âåñà,
äîñòèæèìûõ èç s. Òîãäà ïîñëå îïåðàöèè Initialize-Single-Source(G, s), çà êîòîðîé
ñëåäóåò ïðîèçâîëüíàÿ ïîñëåäîâàòåëüíîñòü ðåëàêñàöèé ð¼áåð ãðàôà G, ïîäãðàô ïðåäøåñòâåííèêîâ G ÿâëÿåòñÿ äåðåâîì ñ êîðíåì s.
Òåîðåìà 4.23.

π

135

Ãðàôû è àëãîðèòìû
Äîêàçàòåëüñòâî.  ãðàôå Gπ ïîñëå âûçîâà Initialize-Single-Source(G, s) íàõîäèòñÿ òîëüêî âåðøèíà s, òî åñòü â íà÷àëüíûé ìîìåíò ýòîò ïîäãðàô ÿâëÿåòñÿ äåðåâîì ñ
êîðíåì s. Ïîêàæåì èíäóêöèåé ïî êîëè÷åñòâó ðåëàêñàöèé ð¼áåð, ÷òî ýòî ñâîéñòâî ñîõðàíÿåòñÿ ïðè ïðîèçâîëüíîé ïîñëåäîâàòåëüíîñòè ðåëàêñàöèé ð¼áåð.
 ãðàôå Gπ ïîÿâëÿþòñÿ íîâûå âåðøèíû òîëüêî â òîì ñëó÷àå, åñëè ïðîèñõîäèò ðåëàêñàöèÿ íåêîòîðîãî ðåáðà (u, v), ïðè÷¼ì äî ýòîãî d[v] áûëî áåñêîíå÷íûì, à ïîñëå ðåëàêñàöèè
ñòàëî êîíå÷íûì (ýòî ïðîèñõîäèò òîëüêî â òîì ñëó÷àå, åñëè d[u] íà ìîìåíò ðåëàêñàöèè êîíå÷íî). Òîãäà π[v] ñòàíîâèòñÿ ðàâíûì u, òî åñòü ê äåðåâó Gπ äîáàâëÿåòñÿ ëèñò v , òî åñòü
Gπ îñòà¼òñÿ äåðåâîì.
Ïðîâåðèì òåïåðü ñèòóàöèþ, êîãäà ïðîèñõîäèò ðåëàêñàöèÿ íåêîòîðîãî ðåáðà (u, v), äëÿ
êîòîðîãî è d[u], è d[v] ÿâëÿþòñÿ êîíå÷íûìè âåëè÷èíàìè. Ýòî îçíà÷àåò, ÷òî âåðøèíû u è v
óæå íàõîäÿòñÿ â ãðàôå ïðåäøåñòâîâàíèÿ Gπ .  ñëó÷àå d[v] > d[u]+w(u, v) ïðè ðåëàêñàöèè
ðåáðà (u, v) ïîääåðåâî ñ êîðíåì v ãðàôà Gπ îòðåçàåòñÿ îò π[v] è ïðèñîåäèíÿåòñÿ ê âåðøèíå
u, òî åñòü π[v] ← u. Âîçíèêàåò ðåçîííûé âîïðîñ: à íå ïîÿâëîñü ëè ïîñëå òàêîé îïåðàöèè
â ãðàôå Gπ öèêëà? Åñëè öèêë âîçíèê ïîñëå ðåëàêñàöèè ðåáðà (u, v), òî èç ðàññóæäåíèé
âûøå ñëåäóåò, ÷òî âåðøèíà u îáÿçàíà áûòü ïîòîìêîì v . Ïîêàæåì, ÷òî òîãäà ýòîò öèêë
îáÿçàí èìåòü îòðèöàòåëüíûé âåñ, îòêóäà è ïîëó÷èì ïðîòèâîðå÷èå.
Èòàê, ïåðåä ðåêëàêñàöèåé ðåáðà (u, v) âûïîëíÿëîñü íåðàâåíñòâî d[v] > d[u] + w(u, v),
òî åñòü d[u]−d[v]+w(u, v) < 0. Ïîêàæåì, ÷òî ïóòü â ãðàôå Gπ îò âåðøèíû v äî âåðøèíû u
íå ïðåâîñõîäèò d[u] − d[v] (îòñþäà áóäåò ñëåäîâàòü, ÷òî âìåñòå ñ ðåáðîì (u, v) îí îáðàçóåò
öèêë îòðèöàòåëüíîãî âåñà). Äîñòàòî÷íî ýòî ïîêàçàòü äëÿ îäíîãî ðåáðà, òî åñòü ïîêàçàòü,
÷òî åñëè â êàêîé-òî ìîìåíò ðåáðî (x, y) ïðèíàäëåæèò ãðàôó Gπ , òî â ýòîò ìîìåíò

w(x, y) 6 d[y] − d[x].

Íåïîñðåäñòâåííî ïîñëå ðåëàêñàöèè (x, y) ýòî íåðàâåíñòâî îáðàùàåòñÿ â ðàâåíñòâî. Äàëåå
ìîãóò óìåíüøàòüñÿ çíà÷åíèÿ d[y] è d[x]. Åñëè óìåíüøàåòñÿ d[x], òî íåðàâåíñòâî îñòà¼òñÿ
âåðíûì. Åñëè æå óìåíüøàåòñ d[y], òî ýòî îçíà÷àåò, ÷òî ïðîèçîøëà ðåëàêñàöèÿ íåêîòîðîãî
ðåáðà (z, y), à çíà÷èò, òåïåðü π[y] = z è âûïîëíÿåòñÿ íåðàâåíñòâî w(z, y) 6 d[y] − d[z], à
ðåáðà (x, y) â ãðàôå Gπ áîëüøå íåò.

Èç äîêàçàííîé òåîðåìû ñëåäóåò, ÷òî åñëè â êàêîé-òî ìîìåíò ∀v ∈ V ,→ d[v] = δ(s, v),
òî ãðàô Gπ ÿâëÿåòñÿ
.

äåðåâîì êðàò÷àéøèõ ïóòåé

Àëãîðèòì Äåéêñòðû. Àëãîðèòì Äåéêñòðû ïîçâîëÿåò íàéòè êðàò÷àéøèå ïóòè èç
âåðøèíû s âî âñå äîñòèæèìûå èç íå¼ âåðøèíû äëÿ âçâåøåííîãî îðèåíòèðîâàííîãî ãðàôà
G = (V, E), â êîòîðîì
.
Èäåÿ àëãîðèòìà ñîñòîèò â ñëåäóþùåì: ïîääåðæèâàåòñÿ ìíîæåñòâî S , ñîñòîÿùåå èç
âåðøèí, äëÿ êîòîðûõ ìû óæå íàøëè êðàò÷àéøèå ïóòè (ò.å. d[u] = δ(s, u)). Äàëåå àëãîðèòì
äîáàâëÿåò ê S âåðøèíó v ∈ V \ S ñ íàèìåíüøèì d[v], à çàòåì ïðîèçâîäèò ðåëàêñàöèþ âñåõ
ð¼áåð, âûõîäÿùèõ èç v , ïîñëå ÷åãî öèêë ïîâòîðÿåòñÿ. Âåðøèíû, íå ëåæàùèå â S , õðàíÿòñÿ

âåñà âñåõ ð¼áåð íåîòðèöàòåëüíûå

136

Ãðàôû è àëãîðèòìû
â î÷åðåäè ñ ïðèîðèòåòàìè Q (ïðèîðèòåòû îïðåäåëÿþòñÿ çíà÷åíèÿìè d; ÷åì ìåíüøå d, òåì
áîëüøå ïðèîðèòåò). Êðîìå òîãî, ñ÷èòàåì, ÷òî ãðàô çàäàí ñïèñêîì ñìåæíûõ âåðøèí.
1: procedure Dijkstra(G, w, s)
2:
Initialize-Single-Source(G, s)
3:
S←∅
4:
Q ← V [G]
5:
while Q 6= ∅ do
6:
u ← Extract-Min(Q)
7:
S ← S ∪ {u}
8:
for (äëÿ) âñåõ âåðøèí v ∈ Adj[u] do
9:
Relax(u, v, w )
10:
11:
12:

end for
end while
end procedure

 ñòðîêå u ïðîèñõîäèò âûçîâ ïðîöåäóðû Extract-Min(Q), êîòîðàÿ èçâëåêàåò èç î÷åðåäè
ýëåìåíò ñ íàèìåíüøèv d. Äàëåå ìû îáñóäèì äåòàëè ðåàëèçàöèè î÷åðåäè ñ ïðèîðèòåòàìè,
à ïîêà ÷òî ðàçáåð¼ìñÿ, ïî÷åìó àëãîðèòì Äåéêñòðû êîððåêòíî âû÷èñëÿåò êðàò÷àéøèå
ðàññòîÿíèÿ.

Ïóñòü G = (V, E)  âçâåøåííûé îðèåíòèðîâàííûé ãðàô ñ íåîòðèöàòåëüíîé âåñîâîé ôóíêöèåé w : E → R è èñõîäíîé âåðøèíîé s. Òîãäà ïîñëå ïðèìåíåíèÿ
àëãîðèòìà Äåéêñòðû ê ýòîìó ãðàôó äëÿ âñåõ âåðøèí u ∈ V áóäóò âûïîëíÿòüñÿ ðàâåíñòâà d[u] = δ(s, u).
Òåîðåìà 4.24.

Äîêàçàòåëüñòâî. Ïîêàæåì, ÷òî ïîñëå ëþáîãî ÷èñëà èòåðàöèé öèêëà while âûïîëíåíû ñëåäóþùèå ñâîéñòâà:
à) äëÿ âåðøèí v ∈ S çíà÷åíèå d[v] ðàâíî δ(s, v), ïðè÷¼ì ñóùåñòâóåò êðàò÷àéøèé
ïóòü èç s â v , öåëèêîì ëåæàùèé âî ìíîæåñòâå S , êðîìå ïîñëåäíåé âåðøèíû;
á) äëÿ âåðøèí v ∈ Q = V \ S çíà÷åíèå d[v] ðàâíî íàèìåíüøåìó âåñó ïóòè èç s â
v ñðåäè òåõ ïóòåé, âñå âåðøèíû êîòîðûõ, êðîìå ïîñëåäíåé, ëåæàò â S (åñëè æå
òàêèõ ïóòåé íåò, òî d[v] = ∞).
Ïîñëå ïåðâîé èòåðàöèè öèêëà while â S ëåæèò òîëüêî âåðøèíà s è ïðîâåäåíû ðåëàêñàöèè
âñåõ ð¼áåð, âûõîäÿùèõ èç s. Òîãäà ñâîéñòâà a) è á) áóäóò âûïîëíåíû. Ïðîâåðèì, ÷òî îíè
íå íàðóøàòñÿ è íà ñëåäóþùèõ èòåðàöèÿõ.
Ïóñòü u  âåðøèíà èç Q ñ íàèìåíüøèì d. Åñëè d[u] = ∞, òî äëÿ âñåõ âåðøèí èç Q
çíà÷åíèå d ðàâíî ∞, à çíà÷èò, èç S íåëüçÿ ïîïàñòü âî ìíîæåñòâî V \ S . Ïîýòîìó ñâîéñòâà
à) è á) óæå âûïîëíåíû (ïî ïðåäïîëîæåíèþ èíäóêöèè).
Åñëè æå d[u] êîíå÷íî, òî ñóùåñòâóåò êðàò÷àéøèé ïóòü èç s â u, öåëèêîì ëåæàùèé
âî ìíîæåñòâå S , êðîìå ïîñëåäíåé âåðøèíû u. Äåéñòâèòåëüíî, åñëè åñòü êàêîé-òî äðóãîé
ïóòü èç s â u, íå óäîâëåòâîðÿþùèé îïèñàííîìó ñâîéñòâó, òî ïóñòü ïåðâàÿ âåðøèíà íà ýòîì

137

Ãðàôû è àëãîðèòìû
ïóòè, êîòîðàÿ íå ëåæèò â S åñòü y 6= u. Íî â ñèëó âûáîðà u ìû èìååì, ÷òî d[y] > d[u].
Ïî èíäóêòèâíîìó ïðåäïîëîæåíèþ a) âåñ ýòîãî ïóòè íå ìåíüøå d[y] (âåñà ð¼áåð íåîòðèöàòåëüíû). Íî òîãäà è âåñ âñåãî ïóòè íå ìåíüøå d[u]. Ñëåäîâàòåëüíî, óñëîâèå a) îñòàíåòñÿ
âåðíûì ïîñëå äîáàâëåíèÿ u êî ìíîæåñòâó S . Îñòàëîñü ïðîâåðèòü óñëîâèå á). Íî îíî áóäåò âûïîëíåíî ïîñëå ðåëàêñàöèè ð¼áåð, èñõîäÿùèõ èç u, òàê êàê âñå ïóòè, êîòîðûå ìû
äîáàâèëè â ðàññìîòðåíèå, ïðîõîäÿò ÷åðåç âåðøèíó u (îñòàëüíûå óæå áûëè ðàññìîòðåíû
íà ïðåäûäóùèõ øàãàõ). Ïîýòîìó, ïðîâåäÿ ðåëàêñàöèþ ð¼áåð, âûõîäÿùèõ èç u, çíà÷åíèÿ
d äëÿ âñåõ âåðøèí èç V \ S 0 , ãäå S 0 = S ∪ {u}, áóäóò ðàâíÿòüñÿ âåñàì íàèìåíüøèõ ïóòåé,
êîòîðûå öåëèêîì ëåæàò â S 0 , êðîìå ïîñëåäíåé âåðøèíû.

Èç Òåîðåìû 2 ñëåäóåò, ÷òî àëãîðèòì Äåéêñòðû ïîçâîëÿåò ïîñòðîèòü äåðåâî êðàò÷àéøèõ ïóòåé ñ êîðíåì â âåðøèíå s.

Ðèñ. 10.

Ïðèìåð ðàáîòû àëãîðèòìà Äåéêñòðû.

Îöåíèì âðåìÿ ðàáîòû àëãîðèòìà Äåéêñòðû. Äëÿ íà÷àëà ðàññìîòðèì ñëó÷àé, êîãäà î÷åðåäü ñ ïðèîðèòåòàìè çàäà¼òñÿ êàê îáû÷íûé ìàññèâ. Òîãäà ñòîèìîñòü îïåðàöèè
Extract-Min åñòü O(V ) (ýêâàèâàëåíòíî çàäà÷å ïîèñêà íàèìåíüøåãî ýëåìåíòà â ìàññèâå
äëèíû V ). Òàê íóæíî ñäåëàòü äëÿ êàæäîé âåðøèíû ðîâíî V ðàç, à çíà÷èò, ñóììàðíàÿ
ñòîèìîñòü âñåõ óäàëåíèé âåðøèí èç î÷åðåäè ðàâíà O(V 2 ). Êðîìå òîãî, êàæäàÿ âåðøèíà
äîáàâëÿåòñÿ êî ìíîæåñòâó S ðîâíî îäèí ðàç, è êàæäîå ðåáðî èç Adj[v] îáðàáàòûâàòñÿ
òîëüêî îäèí ðàç. Ñòîèìîñòü êàæäîé ðåëàêñàöèè åñòü O(1), ïîýòîìó îáùàÿ ñòîèìîñòü àëãîðèòìà åñòü O(V 2 + E) = O(V 2 ).
Îäíàêî åñëè ãðàô ÿâëÿåòñÿ ðàçðåæåííûì, òî âûãîäíåå ðåàëèçîâàòü î÷åðåäü ñ ïðèîðèòåòàìè ñ ïîìîùüþ äâîè÷íîé êó÷è. Êàê ýòî äåëàòü? Âî-ïåðâûõ, ìû áóäåì ïîääåðæèâàòü îñíîâíîå ñâîéñòâî êó÷è ñ îáðàòíûì çíàêîì, òî åñòü áóäåì ïîääåðæèâàòü A[i] >
138

Ãðàôû è àëãîðèòìû
A[Parent[i]] (ñðàâíèâàþòñÿ çíà÷åíèÿ d). Ïðîöåäóðà Extract-Min â òàêîì ñëó÷àå ðåàëèçóåòñÿ ïðîñòûì ñïîñîáîì: íóæíî âåðíóòü êîðíåâóþ âåðøèíó äâîè÷íîé êó÷è (òàì áóäåò
ìèíèìóì), à çàòåì ïîìåíÿòü â ìàññèâå ïåðâûé ýëåìåíò ñ ïîñëåäíèì, óìåíüøèòü ðàçìåð
êó÷è íà åäèíèöó è âûçâàòü ïðîöåäóðó Heapify(A, 1). Âðåìÿ ðàáîòû ïðîöåäóðû ExtractMin ñîñòàâëÿåò O(log V ). Ñòîèìîñòü ïîñòðîåíèÿ êó÷è (ñòðîêà 4) ñîñòàâëÿåò O(V ). Ïðèñâàèâàíèå d[v] ← d[u] + w(u, v) ìîæíî òàê æå ðåàëèçîâàòü çà O(log V ) (óìåíüøàåì êëþ÷ ó
âåðøèíû v äî çíà÷åíèÿ d[u] + w(u, v), à çàòåì ¾ïîäíèìàåì¿ å¼ íà íóæíûé óðîâåíü ââåðõ:
åñëè çíà÷åíèå êëþ÷à ó ðîäèòåëÿ áîëüøå, ÷åì ó äàííîé âåðøèíû, òî ìåíÿåì èõ ìåñòàìè, è òàê äàëåå). Âñåãî òàêèõ ïðèñâàèâàíèé áóäåò ïðîèçâåäåíî íå áîëåå E øòóê, òàê ÷òî
îáùàÿ ñòîèìîñòü àëãîðèòìà Äåéêñòðû, îñíîâàííîãî íà î÷åðåäÿõ ñ ïðèîðèòåòàìè, ðåàëèçîâàííûìè ïðè ïîìîùè äâî÷èíûõ êó÷, ñîñòàâëÿåò O((V + E) log V ). Åñëè ãðàô ñâÿçåí, òî
E > V − 1 è ïðåäûäóùàÿ îöåíêà çàïèñûâàåòñÿ â âèäå O(E log V ).

Àëãîðèòì Áåëëìàíà-Ôîðäà

Àëãîðèòì Áåëëìàíà-Ôîðäà.
ðåøàåò çàäà÷ó î ïîèñêå
êðàò÷àéøèõ ïóòÿõ èç îäíîé âåðøèíû äëÿ ñëó÷àÿ, êîãäà âåñà ð¼áåð ìîãóò áûòü îòðèöàòåëüíûìè, íî â ãðàôå íåò öèêëîâ îòðèöàòåëüíîãî âåñà, äîñòèæèìûõ èç s.  îòëè÷èå îò
àëãîðèòìà Äåéêñòðû äàííûé àëãîðèòì óìååò ðåøàòü çàäà÷ó è äëÿ ãðàôîâ ñ îòðèöàòåëüíûìè âåñàìè ð¼áåð. Áîëåå òîãî, îí ìîæåò îïðåäåëèòü, åñòü ëè â ãðàôå öèêë îòðèöàòåëüíîãî âåñà (åñëè íåò, òî àëãîðèòì âûäàñò True, à èíà÷å  False).
1: procedure Bellman-Ford(G, w, s)
2:
Initialize-Single-Source(G, s)
3:
for i ← 1 to |V (G)| − 1 do
4:
for (äëÿ) êàæäîãî ðåáðà (u, v) ∈ E(G) do
5:
Relax(u,v,w)
6:
7:
8:
9:
10:
11:
12:
13:
14:

end for
end for
for (äëÿ) êàæäîãî ðåáðà (u, v) ∈ E(G) do
if d[v] > d[u] + w(u, v) then
return False
end if
end for
return True
end procedure

Èíûìè ñëîâàìè, V − 1 ðàç ïðîèçâîäèòñÿ ðåëàêñàöèÿ âñåõ ð¼áåð ãðàôà G. Êàê ìû óâèäèì
äàëåå, ïîñëå òàêîé îïåðàöèè äëÿ âñåõ v ∈ V äîëæíî âûïîëíÿòüñÿ ðàâåíñòâî d[v] = δ(s, v),
åñëè â ãðàôå íåò öèêëîâ îòðèöàòåëüíîé äëèíû. Öèêë â ñòðîêàõ 8-12 ïðîâåðÿåò ãðàô G
íà îòñóòñòâèå öèêëîâ îòðèöàòåëüíîé äëèíû (ñì. Ñëåäñòâèå 2).
139

Ãðàôû è àëãîðèòìû
Âðåìÿ ðàáîòû àëãîðèòìà Áåëëìàíà-Ôîðäà åñòü O(V E), ïîñêîëüêó â ñòðîêàõ 3-7 âûïîëíÿåòñÿ O(V E) ðåëàêñàöèé ð¼áåð, âðåìÿ ðàáîòû ðåëàêñàöèè îäíîãî ðåáðà ðàâíÿåòñÿ
O(1), ñòðîêà 1 âûïîëíÿåòñÿ çà âðåìÿ O(V ), à öèêë â ñòðîêàõ 8-12  çà âðåìÿ O(E).

Ïóñòü G = (V, E)  âçâåøåííûé îðèåíòèðîâàííûé ãðàô ñ âåñîâîé ôóíêöèåé w : E → R è èñõîäíîé âåðøèíîé s, íå ñîäåðæàùèé öèêëîâ îòðèöàòåëüíîãî âåñà,
äîñòèæèìûõ èç s. Òîãäà ïîñëå ïðèìåíåíèÿ àëãîðèòìà Áåëëìàíà-Ôîðäà ê ýòîìó ãðàôó
äëÿ âñåõ âåðøèí u ∈ V áóäóò âûïîëíÿòüñÿ ðàâåíñòâà d[u] = δ(s, u).

Òåîðåìà 4.25.

Äîêàçàòåëüñòâî. Ðàññìîòðèì ïðîèçâîëüíûé êðàò÷àéøèé ïóòü s = v0 , v1 , . . . , vk =
v . Òàê êàê â ãðàôå íåò öèêëîâ îòðèöàòåëüíîé äëèíû, òî ìîæíî ñ÷èòàòü, ÷òî â ïóòè p
íåò öèêëîâ (öèêë íå óìåíüøàåò äëèíó ïóòè). Ïîýòîìó ìîæíî ñ÷èòàòü, ÷òî k 6 V − 1.
Ïîêàæåì èíäóêöèåé ïî i, ÷òî ïîñëå i-é èòåðàöèè öèêëà â ñòðîêàõ 3-7 áóäåò âûïîëíåíî
ðàâåíñòâî d[vi ] = δ(s, vi ) (åñëè ýòî äîêàçàòü, òî ïîëó÷èì, ÷òî ïîñëå V − 1 èòåðàöèè â
d[vk ] = d[v] áóäåò çàïèñàíî δ(s, v), à â ñèëó ïðîèçâîëüíîñòè âûáîðà v ýòî áóäåò âûïîëíåíî
è äëÿ âñåõ âåðøèí â ãðàôå G).
Ïðè i = 0 óòâåðæäåíèå âåðíî (d[s] = δ(s, s) = 0). Ïóñòü ïðè i > 0 ïîñëå (i − 1)-é
èòåðàöèè âûïîëíÿëîñü ðàâåíñòâî d[vi−1 ] = δ(s, vi−1 ). Òîãäà èç Ñëåäñòâèÿ 1 ïîëó÷àåì, ÷òî
ïîñëå i-é èòåðàöèè âûïîëíÿåòñÿ d[vi ] = δ(s, vi ), ïîñêîëüêó íà i-é èòåðàöèè ïðîèçîéä¼ò
ðåëàêñàöèÿ ðåáðà (vi−1 , vi ).


Èç Òåîðåìû 2 ñëåäóåò, ÷òî àëãîðèòì Áåëëìàíà-Ôîðäà ïîçâîëÿåò ïîñòðîèòü äåðåâî
êðàò÷àéøèõ ïóòåé ñ êîðíåì â âåðøèíå s.

Ðèñ. 11.

140

Ïðèìåð ðàáîòû àëãîðèòìà Áåëëìàíà-Ôîðäà.

Ãðàôû è àëãîðèòìû

Àëãîðèòì Ôëîéäà-Óîðøîëëà

Àëãîðèòì Ôëîéäà-Óîðøîëëà.
ðåøàåò çàäà÷ó ïîèñêà êðàò÷àéøèõ ïóòåé ìåæäó ëþáûìè äâóìÿ ïàðàìè âåðøèí îðèåíòèðîâàííîãî âçâåøåííîãî ãðàôà, ó êîòîðîãî íåò öèêëîâ îòðèöàòåëüíîãî âåñà. Ìû ïîêàæåì, ÷òî ýòîò ìåòîä
ðàáîòàåò çà âðåìÿ Θ(V 3 ), òî åñòü äëÿ ïëîòíûõ ãðàôîâ (êîãäà E = O(V 2 )) àëãîðèòìû
Ôëîéäà-Óîðøîëëà è Áåëëìàíà-Ôîðäà èìåþò îäèíàêîâóþ ñëîæíîñòü O(V 3 ).
Ïåðåéä¼ì ê îïèñàíèþ àëãîðèòìà.
âåðøèíîé ïðîñòîãî ïóòè v1 , v2 , . . . , vl
áóäå íàçûâàòü ëþáóþ èç âåðøèí v2 , v3 , . . . , vl−1 (íàïîìíþ, ÷òî ðàç ìû ðàáîòàåì ñ ãðàôàìè, â êîòîðûõ íåò öèêëîâ îòðèöàòåëüíîãî âåñà, òî ìîæåì ñ÷èòàòü, ÷òî êðàò÷àéøèé ïóòü
ìåæäó ëþáûìè äâóìÿ âåðøèíàìè íå ñîäåðæèò öèêëîâ, à çíà÷èò, êðàò÷àéøèé ïóòü ñîñòîèò íå áîëåå ÷åì èç V − 1 ðåáðà).
Áóäåì ñ÷èòàòü, ÷òî âåðøèíàìè ãðàôà G ÿâëÿþòñÿ ÷èñëà 1, 2, 3, . . . , n. Ðàññìîòðèì
ïðîèçâîëüíîå k 6 n. Äëÿ äàííîé ïàðû âåðøèí i, j ∈ V ðàññìîòðèì âñå ïóòè èç i â j , ó
êîòîðûõ âñå ïðîìåæóòî÷íûå âåðøèíû ëåæàò âî ìíîæåñòâå {1, 2, . . . , k}. Ïóñòü p  ïóòü
ìèíèìàëüíîãî âåñà ñðåäè âñåõ òàêèõ ïóòåé (îí áóäåò ïðîñòûì, êàê ìû óæå îáñóäèëè). Åñòü
äâå âîçìîæíîñòè. Åñëè k íå ÿâëÿåòñÿ ïðîìåæóòî÷íîé â ïóòè p, òî âñå ïðîìåæóòî÷íûå
âåðøèíû ïðèíàäëåæàò {1, 2, . . . , k − 1}, òî åñòü p áóäåò è êðàò÷àéøèì ïóò¼ì ìåæäó i
è j ñðåäè ïóòåé, ó êîòîðûõ ïðîìåæóòî÷íûå âåðøèíû ëåæàò âî ìíîæåñòâå {1, 2, . . . , k −
1}. Åñëè æå k ÿâëÿåòñÿ ïðîìåæóòî÷íîé âåðøèíîé â ïóòè p, òî îíà ðàçáèâàåò ïóòü p
p
p
íà äâå ÷àñòè p1 è p2 : i 1 k 2 j (âåðøèíà k âñòðå÷àåòñÿ ëèøü îäíàæäû, èáî ïóòü p
ÿâëÿåòñÿ ïðîñòûì). Íî òîãäà ïóòü p1 ÿâëÿåòñÿ êðàò÷àéøèì ïóò¼ì èç i â k ñðåäè ïóòåé
ñ ïðîìåæóòî÷íûìè âåðøèíàìè èç {1, 2, . . . , k − 1}, à ïóòü p2  êðàò÷àéøèì èç k â j ñ
ïðîìåæóòî÷íûìè âåðøèíàìè èç ìíîæåñòâà {1, 2, . . . , k − 1}.
Çàôèêñèðóåì ýòè ðàññóæäåíèÿ â âèäå ðåêóððåíòíîé ôîðìóëû. Ïóñòü d(k)
ij  âåñ êðàò÷àéøåãî ïóòè èç i â j ñ ïðîìåæóòî÷íûìè âåðøèíàìè èç {1, 2, . . . , k}. Òîãäà èç íàïèñàííîãî
âûøå ñëåäóåò, ÷òî
(
wij ,
åñëè k = 0,
(k)
dij =
(k−1)
(k−1)
(k−1)
min{dij
, dik
+ dkj }, åñëè k > 1.

Ïðîìåæóòî÷íîé

Ìàòðèöà D(n) = (d(n)
ij ) ñîäåðæèò èñêîìîå ðåøåíèå, ïîñêîëüêó ðàçðåøàþòñÿ ëþáûå ïðîìåæóòî÷íûå âåðøèíû.
Êðîìå òîãî, íàì õîòåëîñü áû óìåòü íàõîäèòü íå òîëüêî âåñà êðàò÷àéøèõ ïóòåé, íî
è ñàìè ïóòè. Ïîýòîìó íóæåí ñïîñîá âû÷èñëåíèÿ ïðåäøåñòâåííèêîâ. Ê ñ÷àñòüþ, ýòî òî(k)
æå ìîæíî çàäàòü ðåêóððåíòíîé ôîðìóëîé. Ïóñòü πij
 ýòî âåðøèíà, ïðåäøåñòâóþùàÿ
âåðøèíå j íà êðàò÷àéøåì ïóòè èç i â j ñ ïðîìåæóòî÷íûìè âåðøèíàìè èç ìíîæåñòâà
{1, 2, . . . , k}. Òîãäà
(
nil, åñëè i = j èëè wij = ∞,
(0)
πij =
i,
åñëè i 6= j è wij < ∞,
141

Powered by TCPDF (www.tcpdf.org)

Ãðàôû è àëãîðèòìû
è äëÿ k > 1

(
(k−1)
(k−1)
(k−1)
(k−1)
6 dik
+ dkj ,
, åñëè dij
πij
=
(k−1)
(k−1)
(k−1)
(k−1)
> dik
+ dkj .
πkj , åñëè dij
Íàïèøåì ïðîöåäóðó, êîòîðàÿ ïî ìàòðèöå âåñîâ ð¼áåð W âû÷èñëÿåò ìàòðèöó êðàò÷àéøèõ ðàññòîÿíèé D(n) .
1: procedure Floyd-Warshall(W )
2:
n ← rows[W ]
3:
Initialize Π(0)
4:
D(0) ← W
5:
for k ← 1 to n do
6:
for i ← 1 to n do
7:
for j ← 1 to n do
(k−1)
(k−1)
8:
if d(k−1)
6 dik
+ dkj
then
ij
(k)
πij

9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

(k)

(k−1)

(k)

(k−1)

(k)

(k−1)

(k)
πij

(k−1)
πkj

dij ← dij

πij ← πij

else

dij ← dik

end if
end for
end for
end for
return D(n)
end procedure



Ðèñ. 12.

142

(k−1)

+ dkj

Ïðèìåð ðàáîòû àëãîðèòìà Ôëîéäà-Óîðøîëëà.

Ãðàôû è àëãîðèòìû

Ìèíèìàëüíûå îñòîâíûå äåðåâüÿ
Îïðåäåëåíèå
P 4.26. Ïóñòü (G, w)  âçâåøåííûé ãðàô.
âàòü w(T ) =

e∈T

e ∈ T.

Âåñîì ïîäãðàôà T áóäåì íàçû-

Îïðåäåëåíèå 4.27. Îñòîâíûé ëåñ [äåðåâî] T ãðàôà G áóäåì íàçûâàòü ìèíèìàëüíûì
îñòîâíûì ëåñîì, åñëè ñðåäè âñåõ îñòîâíûõ ëåñîâ [lthtdmtd] îí îáëàäàåò ìèíèìàëüíûì
âåñîì.

Áóäåì ñ÷èòàòü G íåîðèåíòèðîâàííûì ãðàôîì. Åñëè âåñîâàÿ ôóíêöèÿ w ïîñòîÿííà,
êàæäîå îñòîâíîå äåðåâî ìèíèìàëüíî, åãî ìîæíî íàéòè ñî ñëîæíîñòüþ O(|E|) èñïîëüçîâàíèåì BFS èëè DFS. Äëÿ ñëó÷àÿ îáùåãî âçâåøåííîãî ãðàôà ïðîñòîé ïåðåáîð âñåâîçìîæíûõ äåðåâüåâ ñ ïîèñêîì ìèíèìàëüíîãî â ñèëó òåîðåìû Êýëè ìîæåò èìåòü íåïîëèíîìèàëüíóþ ñëîæíîñòü [äëÿ ïîëíîãî ãðàôà, íàïðèìåð]. Ìû ïðåäúÿâèì òðè íåïåðåáîðíûõ
àëãîðèòìà.
Íî ñíà÷àëà ìû õàðàêòåðèçóåì ìèíèìàëüíûå îñòîâíûå äåðåâüÿ. Ðàññìîòðèì îñòîâíîå
äåðåâî T è ðåáðî e ∈
/ T . Î÷åâèäíî, ÷òî ãðàô T ∪ {e} ñîäåðæèò åäèíñòâåííûé öèêë,
îáîçíà÷èì ýòîò öèêë ÷åðåç CT (e).

Ïóñòü (G, w)  ñåòü, ãäå G  ñâÿçíûé ãðàô. Îñòîâíîå äåðåâî T ãðóïïû
ìèíèìàëüíî òèòòê äëÿ ëþáîãî ðåáðà e â G \ T è f 6= e â C (e) âûïîëíÿåòñÿ

Òåîðåìà 4.28.
G

(25)

T

w(e) > w(f )

Äîêàçàòåëüñòâî. Ïðåäïîëîæèì ñíà÷àëà, ÷òî T ìèíèìàëüíî. Åñëè íåðàâåíñòâî 25
òåîðåìû íå âûïîëíÿåòñÿ, òî ñóùåñòâóåò ðåáðî e â G \ T è ðåáðî f â CT (e) ñ w(e) < w(f ).
Óäàëåíèå f ðàçáèâàåò T íà äâå êîìïîíåíòû ñâÿçíîñòè V1 è V2 , òàê êàê f ÿâëÿåòñÿ ìîñòîì
[f 6=e, ïîýòîìó ëåæèò â T ]. Åñëè ìû äîáàâèì ïóòü CT (e) \ {f } ê T \ {f }, êîìïîíåíòû
V1 è V2 ñíîâà ñâÿçíû. Ñëåäîâàòåëüíî, CT (e) \ {f } äîëæåí ñîäåðæàòü ðåáðî, ñîåäèíÿþùåå
âåðøèíó â V1 ñ âåðøèíîé â V2 , è ìîæåò áûòü òîëüêî . Òàêèì îáðàçîì, äîáàâëåíèå e ê
T \ {f } äàåò íîâîå äåðåâî T . Ïîñêîëüêó w(e) < w(f ), ýòî äåðåâî èìååò ìåíüøèé âåñ, ÷åì
T , ÷òî ïðîòèâîðå÷èò ìèíèìàëüíîñòè T .
Íàîáîðîò, ïðåäïîëîæèì, ÷òî T óäîâëåòâîðÿåò 25. Ïîêàæåì, ÷òî åãî âåñ ðàâåí âåñó
íåêîòîðîãî ìèíèìàëüíîãî äåðåâà Tb; ýòî ñäåëàåì èíäóêöèåé ïî ÷èñëó ðåáåð â Tb \T . Ñëó÷àé
k = 0 òðèâèàëåí; ïóñòü ïî ïðåäïîëîæåíèþ èíäóêöèè ëþáîå äåðåâî Tk , óäîâëåòâîðÿþùåå
25 è òàêîå, ÷òî â Tk \ T ðîâíî k ðåáåð, ÿâëÿåòñÿ ìèíèìàëüíûì, ïîêàæåì, ÷òî åñëè Tb \ T
ñîäåðæèò k + 1 ðåáðî, à óñëîâèå 25 âûïîëíåíî äëÿ Tb, òî è Tb ìèíèìàëüíî. Ðàññìîòðèì
ðåáðî eb â Tb \ . Ïðè óäàëåíèè eb äåðåâî Tb ðàñïàäàåòñÿ íà äâå êîìïîíåíòû ñâÿçíîñòè, Tb1
è Tb2 . Àíàëîãè÷íûìè ðàññóæäåíèÿìè ïîëó÷àåì, ÷òî ãðàô CT (b
e) \ {b
e} äîëæåí ñîäåðæàòü
ðåáðî e, ñîåäèíÿþùåå Tb1 è Tb2 . Îáðàòèòå âíèìàíèå, ÷òî e íå ìîæåò áûòü ðåáðîì Tb, òàê
êàê â ïðîòèâíîì ñëó÷àå Tb \ {b
e} áóäåò ñâÿçíûì. Îáîçíà÷èì Tbe = T1 ∪ T2 ∪ {e}.

143

Ãðàôû è àëãîðèòìû
Ìèíèìàëüíîå îñòîâíîå äåðåâî Tb óäîâëåòâîðÿåò 25 è, ñëåäîâàòåëüíî, w(e) > w(b
e).
Ñ äðóãîé ñòîðîíû, òàê êàê òàêæå óäîâëåòâîðÿåò óñëîâèþ 25, òî w(b
e) > w(e) è, ñëåäîâàòåëüíî, w(b
e) = w(e). Ñëåäîâàòåëüíî, w(Tbe ) = w(Tb), òàê ÷òî Tbe ñíîâà ìèíèìàëüíîå
îñòîâíîå äåðåâî. Ó Tb0 íà îäíî îáùåå ðåáðî áîëüøå, ÷åì ó Tb, ïî ïðåäïîëîæåíèþ èíäóêöèè
w(T ) = w(Tbe ), òàêèì îáðàçîì, w(T ) = w(Tbe ) = w(Tb).


Îïðåäåëåíèå 4.29. Ïóñòü G  ãðàô ñ ìíîæåñòâîì âåðøèí V .

Ðàçðåç S = {X, Y } 

ðàçáèåíèå V = X t Y íà äâà íåïóñòûõ íåïåðåñåêàþùèõñÿ ïîäìíîæåñòâà.

Ïóñòü S  ðàçðåç ãðàôà. Îáîçíà÷èì ìíîæåñòâî âñåõ ðåáåð, èíöèäåíòíûõ îäíîé âåðøèíå â X è îäíîé âåðøèíå â Y êàê E(S) èëè E(X, Y ). Èíîãäà [ïåðåãðóæàÿ îáîçíà÷åíèå]
ïîä ðàçðåçîì ìû áóäåì ïîíèìàòü E(X, Y ) âìåñòî {X, Y }.

Ëåììà 4.30. Ïóñòü G  ñâÿçíûé ãðàô, à T  îñòîâíîå äåðåâî ãðóïïû G. Äëÿ êàæäîãî
ðåáðà e â T ñóùåñòâóåò åäèíñòâåííûé ðàçðåç S (e) ãðàôà G òàêîé, ÷òî e ÿâëÿåòñÿ
åäèíñòâåííûì îáùèì ðåáðîì T è S (e).
T

T

Äîêàçàòåëüñòâî. Åñëè ìû óäàëèì e èç T , äåðåâî áóäåò ðàçäåëåíî íà äâå êîìïîíåíòû ñâÿçíîñòè, òàêèì îáðàçîì, ìû ïîëó÷àåì ðàçðåç ST (e). Î÷åâèäíî, ÷òî e ∈ ST (e) è
íèêàêîå äðóãîå ðåáðî äåðåâà T íå ìîæåò ëåæàòü â ðàçðåçå. Ëåãêî âèäåòü, ÷òî ðàçðåç ñ
èñêîìûì ñâîéñòâîì åäèíñòâåííûé  âåðøèíû x è y ðåáðà e äîëæíû ëåæàòü â ðàçíûõ
êîìïîíåíòàõ ðàçðåçà, âñå îñòàëüíûå ñìåæíûå â T âåðøèíû äîëæíû áûòü â îäíîé êîìïîíåíòå ðàçðåçà, òàêèì îáðàçîì, âñå âåðøèíû ïîääåðåâà ñ êîðíåì x è ïîääåðåâà ñ êîðíåì
y äîëæíû îáðàçîâûâàòü êîìïîíåíòû ðàçðåçà.


Ïóñòü (G, w)  âçâåøåííûé ãðàô è G  ñâÿçíûé. Îñòîâíîå äåðåâî T
ãðàôà G ìèíèìàëüíî òèòòê êîãäà äëÿ ëþáîãî ðåáðà e â T è f 6= e â S (e) âûïîëíÿåòñÿ

Òåîðåìà 4.31.

T

w(e) > w(f )
Äîêàçàòåëüñòâî. Äîïóñòèì, ÷òî T ìèíèìàëüíî. Åñëè â T åñòü ðåáðî e è ðåáðî f â
ST (e) òàêèå, ÷òî w(e) > w(f ), òî óäàëèâ èç è äîáàâèâ f , ìû ìîãëè áû ïîñòðîèòü îñòîâíîå
äåðåâî ìåíüøåãî âåñà, ÷åì [íîâûõ öèêëîâ íå ïîÿâèòñÿ ïî îïðåäåëåíèþ ST (e)].
Òåïåðü ïðåäïîëîæèì, ÷òî äëÿ ëþáîãî ðåáðà e â G \ T è f 6= e â ST (e) âûïîëíÿåòñÿ
w(e) > w(f ). Ðàññìîòðèì ðåáðî e â G \ T è f 6= e ðåáðî â CT (e). Î÷åâèäíî e ñîäåðæèòñÿ â
ST (f ), ñëåäîâàòåëüíî, íåðàâåíñòâî w(e) > w(f ) âëå÷åò 25, îòêóäà ïî òåîðåìå 4.28 ñëåäóåò,
÷òî T ìèíèìàëüíî.


Àëãîðèòìû Ïðèìà, Êðóñêàëà è Áîðóâêè
Òåîðåìû, ïðèâåäåííûå âûøå, ëåæàò â îñíîâå ñàìûõ ïîïóëÿðíûõ àëãîðèòìîâ ïîèñêà
îñòîâíûõ äåðåâüåâ. Èñòîðè÷åñêè àëãîðèòì Áîðóâêè áûë ïðåäúÿâëåí ïåðâûì, åùå â 1926
144

Ãðàôû è àëãîðèòìû
ãîäó  Áîðóâêå áûëà ïîðó÷åíà çàäà÷à íàõîæäåíèÿ íàèìåíåå çàòðàòíîãî ñïîñîáà ïðîëîæèòü ýëåêòðè÷åñêóþ ñåòü â Þæíîé Ìîðàâèè. Âïîñëåäñòâèè çàäà÷à ïîèñêà ìèíèìàëüíîãî
îñòîâíîãî äåðåâà ïîÿâëÿëàñü âî ìíîæåñòâå ðàçíûõ ñèòóàöèé, ñëåäóþùàÿ äèàãðàììà ïðèâåäåíà â ñòàòüå [13]:

Èñòîðèÿ ïîÿâëåíèÿ àëãîðèòìîâ íàõîæäåíèÿ ìèíèìàëüíîãî
îñòîâíîãî äåðåâà. Ïî ïîðÿäêó çäåñü çàíóìåðîâàíû àëãîðèòì Êðóñêàëà,
Ïðèìà è Áîðóâêè. Ïîñëåäíèå äâà àëãîðèòìà, 4 è 5  ìîäèôèêàöèè àëãîðèòìà Êðóñêàëà. Ðåáðî X → Y èíòåðïðåòèðóåòñÿ êàê ¾â ðàáîòå Y åñòü
ññûëêà íà ðàáîòó X ¿

Ðèñ. 13.

Ñïåðâà îïèøåì îáùèé ìåòîä, ñïåöèôèêàöèÿìè êîòîðîãî è ÿâëÿþòñÿ àëãîðèòìû Ïðèìà, Êðóñêàëà è Áîðóâêè.
1: procedure Mintree(G = ({1, . . . , n}, E), w : E → R)
2:
for i ∈ [1; n] do
3:
Vi ← {i}, Ti ← ∅
4:
5:
6:
7:

end for
for i ∈ [1; n − 1] do

âûáðàòü Vi ñ ïîìîùüþ Vi 6= ∅
âûáðàòü ðåáðî e = uv ñ u ∈ Vi , v ∈
/ Vi è w(e) 6 w(b
e) äëÿ âñåõ ðåáåð eb = u
bvb ñ
u
b ∈ Vi , vb ∈
/ Vi
8:
îïðåäåëèòü èíäåêñ j , äëÿ êîòîðîãî v ∈ Vj
9:
Vi ← Vi ∪ Vj , Vj ← ∅
145

Ãðàôû è àëãîðèòìû
10:
11:
12:
13:
14:
15:

Ti ← Ti ∪ Tj ∪ {e}, Tj ← ∅
if k = n − 1 then
T ← Ti

end if
end forreturn T
end procedure
Òåîðåìà 4.32. Ïðîöåäóðà

Mintree

íîå îñòîâíîå äåðåâî âõîäíîãî ãðàôà.

, îïèñàííàÿ âûøå êîððåêòíî âû÷èñëÿåò ìèíèìàëü-

Äîêàçàòåëüñòâî. Èíäóêöåé ïî t = |T1 |+. . .+|Tn | äîêàæåì ñëåäóþùåå óòâåðæäåíèå:
äëÿ ëþáîãî t ∈ {0, . . . , n − 1} ñóùåñòâóåò ìèíèìàëüíîå îñòîâíîå äåðåâî T ãðàôà G, ñîäåðæàùåå T1 , . . . , Tn . Èç èñòèííîñòè ýòîãî óòâåðæäåíèÿ äëÿ t = n − 1 ñëåäóåò êîððåêòíîñòü
àëãîðèòìà. ßñíî, ÷òî ïðè t = 0, òî åñòü ïåðåä âûïîëíåíèåì âòîðîãî öèêëà, ïîëó÷àåòñÿ
îñòîâíîå äåðåâî. Òåïåðü ïðåäïîëîæèì, ÷òî äëÿ t = k − 1, òî åñòü äî òîãî, êàê öèêë áóäåò
âûïîëíåí â k-é ðàç, ïîëó÷èëîñü îñòîâíîå äåðåâî. Ïóñòü = uv ñ u ∈ Vi  ðåáðî, ïîñòðîåííîå íà k-é èòåðàöèè. Åñëè ñîäåðæèòñÿ â ìèíèìàëüíîì îñòîâíîì äåðåâå T , ñîäåðæàùåì
T1 , . . . Tn ïðè t = k − 1, äîêàçûâàòü íå÷åãî. Òàêèì îáðàçîì, ìû ìîæåì ñ÷èòàòü, ÷òî e ∈
/ T.
Òîãäà T ∪ {e} ñîäåðæèò åäèíñòâåííûé öèêë C = CT (e); î÷åâèäíî, C äîëæåí ñîäåðæàòü
äðóãîå ðåáðî f = rs ñ r ∈ Vi è s ∈
/ Vi . Ïî òåîðåìå 4.28 w(e) > w(f ). Ñ äðóãîé ñòîðîíû, ïî
âûáîðó íà øàãå w(e) 6 w(f ). Ñëåäîâàòåëüíî, w(e) = w(f ) è T 0 = (T ∪ {e}) \ {f } ÿâëÿåòñÿ
ìèíèìàëüíûì îñòîâíûì äåðåâîì G, óäîâëåòâîðÿþùåå íàøèì óñëîâèÿì ïðè t = k.


Ñëîæíîñòü óêàçàííîé ïðöåäóðû çàâèñèò êàê îò âûáîðà èíäåêñà i, òàê è îò äåòàëåé
ðåàëèçàöèè. Òåïåðü ïåðåéäåì ê ñïåöèôèêàöèÿì ýòîé ïðîöåäóðû.
Íà÷íåì ñ
. Ïóñòü G  ñâÿçíûé ãðàô ñ ìíîæåñòâîì âåðøèí V =
{1, . . . , n} çàäàåòñÿ ñïèñêàìè ñìåæíîñòè Av , è ïóñòü w : E → R  âåñîâàÿ ôóíêöèÿ ãðàôà
G.
1: procedure Prim(G = (V, E), w )
2:
g(1) ← 0, S ← ∅, T ← ∅
3:
for i ∈ [2; n] do
4:
g(i) = ∞

àëãîðèòìà Ïðèìà

5:
6:
7:
8:
9:
10:
11:
12:
13:

146

end for
while S 6= V do

âûáðàòü i ∈ V \ S òàê, ÷òîáû g(i) áûëî ìèíèìàëüíûì, S ← S ∪ {i}

if i 6= 1 then

T ← T ∪ {e(i)}

end if
for j ∈ Ai ∩ (V \ S) do
if g(j) > w(ij) then

g(j) ← w(ij), e(j) ← ij

Ãðàôû è àëãîðèòìû

end if
end for
end while
end procedure
Ïðèìåð 4.33. Ïðèìåíèì àëãîðèòì Ïðèìà ê âçâåøåííîìó ãðàôó íà ðèñóíêå ??, ðàñ14:
15:
16:
17:

ïîëîæåííîì íèæå. Ìû ïîìå÷àåì ðåáðà ñëåäóþùèì îáðàçîì: e1 = {1, 5}, e2 = {6, 8}, e3 =

Ðèñ. 14.

Ïðèìåð ðàáîòû àëãîðèòìà Ïðèìà.

{1, 3}, e4 = {4, 5}, e5 = {4, 8}, e6 = {7, 8}, e7 = {6, 7}, e8 = {4, 7}, e9 = {2, 5}, e10 = {2, 4}, e11 =
{2, 6}, e12 = {3, 6}, e13 = {5, 6}, e14 = {3, 8}, 1 5 = {1, 2}. Òàêèì îáðàçîì, ðåáðà óïîðÿäî÷åíû â ñîîòâåòñòâèè ñ èõ âåñîì. Àëãîðèòì Prim ðàáîòàåò òàê, êàê ïîêàçàíî â òàáëèöå íèæå.
Ðåçóëüòèðóþùåå ìèíèìàëüíîå îñòîâíîå äåðåâî îáîçíà÷åíî æèðíûìè ðåáðàìè íà ðèñóíêå
??.
Èòåðàöèÿ 1: i = 1, S = {1}, T = ∅, g(2) = 28, e(2) = e15 , g(5) = 1, e(5) = e1 , g(3) =
2, (3) = e3 ,
Èòåðàöèÿ 2: i = 5, S = {1, 5}, T = {e1 }, g(2) = 8, e(2) = e9 , g(4) = 5, e(4) = e4 , g(6) =
26, e(6) = e13 ,
Èòåðàöèÿ 3: i = 3, S = {1, 5, 3}, T = {e1 , e3 }, g(6) = 24, e(6) = e12 , g(8) = 27, e(8) = e14 ,
Èòåðàöèÿ 4: i = 4, S = {1, 5, 3, 4}, T = {e1 , e3 , e4 }, g(7) = 8, e(7) = e8 , g(8) = 7, (8) = 5 ,
Èòåðàöèÿ 5: i = 8, S = {1, 5, 3, 4, 8}, T = {e1 , e3 , e4 , e5 }, g(6) = 1, e(6) = e2 , g(7) = 7, (7) =
6,
Èòåðàöèÿ 6: i = 6, S = {1, 5, 3, 4, 8, 6}, T = {e1 , e3 , e4 , e5 , e2 },
Èòåðàöèÿ 7: i = 7, S = {1, 5, 3, 4, 8, 6, 7}, T = {e1 , e3 , e4 , e5 , e2 , e6 },

147

Ãðàôû è àëãîðèòìû

Èòåðàöèÿ 8: i = 2, S = {1, 5, 3, 4, 8, 6, 7, 2}, T = {e1 , e3 , e4 , e5 , e2 , e6 , e9 },

Àëãîðèòì Ïðèìà êîððåêòíî íàõîäèò ìèíèìàëüíîå îñòîâíîå äåðåâî;
ñëîæíîñòü àëãîðèòìà Ïðèìà åñòü O(|V | ).
Òåîðåìà 4.34.

2

Äîêàçàòåëüñòâî. Ëåãêî âèäåòü, ÷òî àëãîðèòì Ïðèìà ÿâëÿåòñÿ ÷àñòíûì ñëó÷àåì
àëãîðèòìà Mintree: åñëè ìû âñåãäà âûáèðàåì V1 íà øàãå 5 àëãîðèòìà Mintree, ïîëó÷àåì àëãîðèòìà Ïðèìà. Ôóíêöèÿ g(i), ââåäåííàÿ çäåñü, èñïîëüçóåòñÿ äëÿ óïðîùåíèÿ
ïîèñêà êðàò÷àéøåãî ðåáðà, âûõîäÿùåãî èç V1 = S . Ñëåäîâàòåëüíî, ñîãëàñíî òåîðåìå 4.32.
Îöåíèâàÿ ñëîæíîñòü, çàìåòèì, ÷òî öèêë while âûïîëíÿåòñÿ |V | ðàç, êàæäàÿ èòåðàöèÿ
êîòîðîãî ïðîäåëûâàåòñÿ çà íå áîëåå ÷åì |V | − |S| ýëåìåíòàðíûõ îïåðàöèé, òàê ÷òî ìû
ïîëó÷àåì ñëîæíîñòü O(|V |2 ). Ïîñêîëüêó G  ïðîñòîé ãðàô, ýòî òàêæå îáùàÿ ñëîæíîñòü:
íà øàãå (11) êàæäîå ðåáðî G ðàññìàòðèâàåòñÿ ðîâíî äâàæäû.


àëãîðèòìó Êðóñêàëà

Òåïåðü ïåðåéäåì ê
. Ñíà÷àëà äàäèì íåñêîëüêî îáùóþ âåðñèþ.
Ïóñòü G = (V, E)  ñâÿçíûé ãðàô ñ V = {1, . . . , n}, w : E → R  âåñîâàÿ ôóíêöèÿ. Ðåáðà
G óïîðÿäî÷åíû â ñîîòâåòñòâèè ñ èõ âåñîì, òî åñòü E = {e1 , . . . , em } ñ w(e1 ) 6 . . . 6 w(em ).
1: procedure Kruskal(G = (V, E), w )
2:
T ←∅
3:
for k ∈ [1; m] do
4:
if ek íå îáðàçóåò öèêë âìåñòå ñ íåêîòîðûìè ðåáðàìè T then
5:
äîáàâèòü Ek ê T
6:
7:
8:
9:

end if
end for
return T
end procedure

Àëãîðèòì Êðóñêàëà ÿâëÿåòñÿ ÷àñòíûì ñëó÷àåì Minstree, â êîòîðîì Vi è e âûáðàíû
òàêèì îáðàçîì, ÷òîáû w(e) áûëî ìèíèìàëüíûì ñðåäè âñåõ åùå äîñòóïíûõ ðåáåð [êîòîðûå
íå ñîåäèíÿþò äâå âåðøèíû íåêîòîðîãî Vj è, ñëåäîâàòåëüíî, ñîçäàäóò öèêë]. Èç òåîðåìû
4.32 ñëåäóåò êîððåêòíîñòü àëãîðèòìà.
×òîáû ðàñïîëîæèòü ðåáðà â î÷åðåäè â ñîîòâåòñòâèè ñ èõ âåñîì, ìû èñïîëüçóåì ñòðóêòóðó äàííûõ
 ìíîæåñòâî ïàð (x, p) [ãäå p ∈ R 
,
x  êëþ÷] ñ îïåðàöèÿìè ¾äîáàâèòü íîâûé ýëåìåíò¿ è ¾èçâëå÷ü ìèíèìàëüíûé ýëåìåíò¿
[â íàøåì ñëó÷àå ìû õîòèì èçâëåêàòü ìèíèìàëüíûé ýëåìåíò]. Ýòè îïåðàöèè ìîãóò áûòü
âûïîëíåíû çà O(|E| log |E|) øàãîâ.
1: procedure Kruskal(G = (V, E), w )
2:
T ←∅
3:
for i ∈ [1; n] do
4:
Vi ← {i}

î÷åðåäü ñ ïðèîðèòåòàìè

5:

148

end for

ïðèîðèòåò

Ãðàôû è àëãîðèòìû
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

ïîìåñòèòü E â î÷åðåäü ïðèîðèòåòîâ Q ñ ôóíêöèåé ïðèîðèòåòà w

while Q 6= ∅ do

e := DELETEMIN (Q)
íàéòè êîíå÷íûå âåðøèíû u è v èç e
íàéòè êîìïîíåíòû Vu è Vv , ñîäåðæàùèå u è v ñîîòâåòñòâåííî
if Vu 6= Vv then
M ERGE(Vu , Vv )
T ← T ∪ {e}

end if
end while
return T
end procedure

Òåîðåìà 4.35. Àëãîðèòì Êðóñêàëà îïðåäåëÿåò ñî ñëîæíîñòüþ
ìàëüíîå îñòîâíîå äåðåâî äëÿ (G, w).

O(|E| log |E|)

ìèíè-

Êîððåêòíîñòü, êàê ìû îòìåòèëè âûøå, ñëåäóåò èç òåîðåìû 4.32.
Òåïåðü ïðîâåðèì, ÷òî ñëîæíîñòü äåéñòâèòåëüíî O(|E| log |E|). Ëåãêî îïðåäåëèòü ñëîæíîñòü èòåðàöèè. Íàõîæäåíèå è óäàëåíèå ìèíèìàëüíîãî ðåáðà e â î÷åðåäè ïðèîðèòåòîâ
òðåáóåò O(log |E|) øàãîâ. Ïîñëåäîâàòåëüíîå îáúåäèíåíèå èñõîäíûõ n òðèâèàëüíûõ êîìïîíåíòîâ è ïîèñê êîìïîíåíòîâ íà ýòàïå (7) ìîæåò áûòü âûïîëíåíî ñ îáùèì óñèëèåì
O(n log n) øàãîâ. Ïîñêîëüêó G ñâÿçàí, G èìååò ïî êðàéíåé ìåðå n − 1 ðåáðà, òàê ÷òî
îáùàÿ ñëîæíîñòü O(|E| log |E|).

Äîêàçàòåëüñòâî.

Ïðèìåð 4.36. Gðèìåíèì àëãîðèòì Êðóñêàëà ê ãðàôó ??. Ðåáðà e1 , 2 , 3 , 4 ,

5 e6 è e9
âûáèðàþòñÿ ïîñëåäîâàòåëüíî, òàê ÷òî ìû ïîëó÷àåì òî æå ñàìîå îñòîâíîå äåðåâî, ÷òî è ñ
àëãîðèòìîì Prim (õîòÿ òàì ðåáðà áûëè âûáðàíû â äðóãîì ïîðÿäêå).

 ïðèìåðå ?? ðîâíî îäíî îñòîâíîå äåðåâî.  îáùåì ñëó÷àå àëãîðèòìû Ïðèìà è Êðóñêàëà áóäóò äàâàòü ðàçíûå ìèíèìàëüíûå îñòîâíûå äåðåâüÿ [ìîãóò âûáèðàòüñÿ ðàçíûå
ìèíèìàëüíûå ðåáðà].
Îáðàòèìñÿ òåïåðü ê àëãîðèòìó Áîðóâêè. Ïóñòü G = (V, E) ñâÿçíûé ãðàô ñ V =
{1, . . . , n}, w : E → R - âåñîâàÿ ôóíêöèÿ/
1: procedure Boruvka(G = (V, E), w )
2:
for i ∈ [1; n] do
3:
Vi ← {i}
4:
5:
6:
7:

end for

T ← ∅, M ← {V 1, . . . , V n}
while |T | < n − 1 do
for U ∈ M do

149

Ãðàôû è àëãîðèòìû
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

íàéòè ðåáðî e = uv ñ u ∈ U , v ∈
/ U è w(e) < w(b
e) ∀b
e=u
bvb ñ u
b ∈ U , vb ∈
/U
b , ñîäåðæàùèé v
íàéòè êîìïîíåíò U
T ← T ∪ {e}

end for
for U ∈ M do

b)
MERGE (U , U

end for
end while
return T
end procedure

Ïðèìåð 4.37. Ïðèìåíÿåì àëãîðèòì Áîðóâêè ê ãðàôó íà ??. Êîãäà öèêë while âûïîëíÿåòñÿ âïåðâûå, ðåáðà {1, 2}, {3, 6}, {4, 5}, {4, 7} è {7, 8} (âûäåëåíû æèðíûì øðèôòîì íà
ðèñóíêå íèæå) âûáðàíû è âñòàâëåíû â T . Ýòî îñòàâëÿåò òîëüêî òðè êîìïîíåíòû ñâÿçíîñòè, êîòîðûå îáúåäèíÿþòñÿ âî âðåìÿ âòîðîãî âûïîëíåíèÿ öèêëà while ïóòåì äîáàâëåíèÿ
ðåáåð {2, 5} è {1, 3} (ïîêàçàíû æèðíûì øòðèõîì íà êàðòèíêå).

Ðèñ. 15.

Ïðèìåð ðàáîòû àëãîðèòìà Áîðóâêè

Òåîðåìà 4.38. Àëãîðèòì Áîðóâêè îïðåäåëÿåò ìèíèìàëüíîå îñòîâíîå äåðåâî äëÿ (G, w)
çà O(|E| log |V |) øàãîâ.
Äîêàçàòåëüñòâî. Èç òåîðåìû 4.32 ñëåäóåò, ÷òî àëãîðèòì êîððåêòåí; òåïåðü îöåíèì
ñëîæíîñòü. Äëÿ êàæäîé âåðøèíû v ó íàñ äîëæåí èçíà÷àëüíî áûòü ñïèñîê Ev ðåáåð, èíöèäåíòíûõ ñ v . Ñîñòîÿíèå âñå âåñà ðåáåð ÿâëÿþòñÿ ÷åòêèìè ãàðàíòèÿìè îòñóòñòâèÿ öèêëîâ

150

Ãðàôû è àëãîðèòìû
âî âðåìÿ âûïîëíåíèÿ öèêëà while. Ïîñêîëüêó ÷èñëî êîìïîíåíò ñâÿçíîñòè óìåíüøàåòñÿ
íà êàæäîé èòåðàöèè ïî ìåíüøåé ìåðå âäâîå, öèêë while âûïîëíÿåòñÿ íå áîëåå log |V | ðàç.
Êàæäàÿ èòåðàöèÿ öèêëà ìîæåò áûòü ïðîäåëàíà çà O(|E|) øàãîâ: ñðåäè ðåáåð EU , èíöèäåíòíûõ
U , ìàêñèìàëüíîå íàõîäèòñÿ çà O(|EU |), ñóììàðíî çà êàæäûé øàã ñîâåðùàåòñÿ
P
O( U ∈M |EU |) = O(E). Ýòî ïðèâîäèò ê ñëîæíîñòè O(|E| log |V |).


Ïîòîêè è ñåòè

Îïðåäåëåíèå 4.39.

Òðàíñïîðòíîé ñåòüþ

(G, c, s, t) áóäåì íàçûâàòü ïðîñòîé [áåç ïåòåëü
è êðàòíûõ ðåáåð] îðèåíòèðîâàííûé ãðàô G = (V, E) ñ âûäåëåííûìè âåðøèíàìè [

t], ãäå êàæäîìó ðåáðó e ∈ E ñîïîñòàâëåíà
c(e) > 0.

ñòîêîì

ïðîïóñêíàÿ ñïîñîáíîñòü

èñòîêîì

Ìîæíî ñ÷èòàòü, íàïðèìåð, ÷òî ðåáðà  ýòî òðóáîïðîâîäû, à c(e)  ìàêñèìàëüíîå
êîëè÷åñòâî âîäû, êîòîðîå ìîæíî ïóñòèòü ïî äàííîìó òðóáîïðîâîäó. Åñòåñòâåííàÿ çàäà÷à,
êîòîðàÿ ïðè ýòîì âîçíèêàåò  êàêîå ìàêñèìàëüíîå êîëè÷åñòâî âîäû ìîæíî ïóñòèòü ïî
äàííîé ñåòè îò èñòîêà ê ñòîêó? Äëÿ óäîáñòâà ïðîäîëæèì ôóíêöèþ c(·, ·) íà âñå ïàðû
âåðøèí, òàê ÷òî c(u, v) = 0, åñëè (u, v) ∈
/ E , è c(u, v) = −c(v, u).

Îïðåäåëåíèå 4.40.

Ïîòîêîì â ñåòè G íàçûâàåòñÿ ôóíêöèÿ f : V × V → R

ðÿþùàÿ ñëåäóþùèì óñëîâèÿì.

+,

óäîâëåòâî-

• Îãðàíè÷åíèÿ ïðîïóñêíûõ ñïîñîáíîñòåé: 0 6 f (u, v) 6 c(u, v) äëÿ âñåõ uv ∈ E .
• Êîñîñèììåòðè÷íîñòü: f (u, v) = −f (v, u).
P
P
• Ñîõðàíåíèå ïîòîêà (çàêîí Êèðõãîôà):
∇f (u) := v f (u, v)− v f (v, u) =
0 äëÿ âñåõ u ∈ V \ {s, t}.

äèâåðãåíöèÿ

âåëè÷èíà ïîòîêà

Ñîîòâåòñòâåííî,
f  ýòî êîëè÷åñòâî âîäû, êîòîðîå ïåðåõîäèò èç s â t,
è â ñèëó çàêîíà ñîõðàíåíèå îíî ðàâíî
X
X
w(f ) = ∇f (s) =
f (s, v) −
f (v, s).
v

v

Ïåðâûé ìåòîä, êîòîðûé ìû ðàññìîòðèì, îñíîâàí íà ñëåäóþùåé èäåå: áóäåì ïóñêàòü
äîïîëíèòåëüíûé ïîòîê ïî êàêîìó-íèáóäü ïóòè èç s â t, ïîêà ýòî âîçìîæíî.
Ñíà÷àëà ñäåëàåì íåñêîëüêî òåõíè÷åñêèõ ïðåäïîëîæåíèé íà ñåòü G, ïîìîãàþùèõ ïðè
àíàëèçå ìåòîäà, íî îò êîòîðûõ íåñëîæíî îòêàçàòüñÿ ïðè ðåàëèçàöèè:

àíòèïàðàëëåëüíûõ

• â G íåò
ðåáåð, ò.å. åñëè (u, v) ∈ E , òî (v, u) ∈
/ E ; ýòîãî âñåãäà
ìîæíî äîáèòüñÿ, ðàçáèâàÿ ðåáðà, ò.å. åñëè (u, v) ∈ E è (v, u) ∈ E , òî äîáàâëÿåì
âñïîìîãàòåëüíóþ âåðøèíó z è çàìåíÿì ðåáðî (v, u) íà (v, z) è (z, u) ñ òîé æå
ïðîïóñêíîé ñïîñîáíîñòüþ;
• ÷åðåç êàæäóþ âåðøèíó ãðàôà ïðîõîäèò êàêîé-íèáóäü ïóòü èç s â t (èíà÷å ÷åðåç
ýòó âåðøèíó íåëüçÿ áû áûëî ïóñòèòü ïîòîê); îòñþäà ñëåäóåò, ÷òî |E| ≥ |V | − 1,
ò.ê. ãðàô ñâÿçíûé.

151

Ãðàôû è àëãîðèòìû

òè.

×òîáû ôîðìàëüíî îïèñàòü ìåòîä ÔîðäàÔàëêåðñîíà, ââåäåì ïîíÿòèå îñòàòî÷íîé ñå-

Îñòàòî÷íàÿ ñåòü ïîòîêà f

Îïðåäåëåíèå 4.41.




c(u, v) − f (u, v),
cf (u, v) := f (v, u),


0,

ñïîñîáíîñòÿìè

ñåòü Gf = (V, Ef ) ñ ïðîïóñêíûìè
(u, v) ∈ E,
(v, u) ∈ E,
èíà÷å

è ðåáðàìè Ef := {(u, v) : cf (u, v) > 0}.
Çàìåòèì, ÷òî â ýòîé ñåòè óæå ìîãóò áûòü àíòèïàðàëëåëüíûå ðåáðà. Îñòàòî÷íàÿ ñåòü
ïîêàçûâàåò, êàê è ñëåäóåò èç íàçâàíèÿ, ñêîëüêî äîïîëíèòåëüíîãî ïîòîêà ìîæíî åùå ïóñòèòü ïî èñõîäíîé ñåòè. Åñëè f 0  ïîòîê â Gf , òî îïðåäåëèì ñëåäóþùèé ïîòîê f + f 0 â
G:
(
f (u, v) + f 0 (u, v) − f 0 (v, u), (u, v) ∈ E,
0
(f + f )(u, v) :=
0,
èíà÷å.
Êàê íåñëîæíî âèäåòü, ýòî äåéñòâèòåëüíî ïîòîê, ò.å. îí óäîâëåòâîðÿåò âñåì îãðàíè÷åíèÿì:
îãðàíè÷åíèå ïðîïóñêíûõ ñïîñîáíîñòåé âûïîëíåíî â ñèëó îïðåäåëåíèÿ cf , à äèâåðãåíöèÿ
(26)
∇f +f 0 (u) =

X

X

f (u, v) + f 0 (u, v) − f 0 (v, u) −

(u,v)∈E


f (v, u) + f 0 (v, u) − f 0 (u, v) =

(v,u)∈E

= ∇f (u) +

X
(u,v)∈E∨(v,u)∈E

0

f (u, v) −

X

f 0 (v, u) = ∇f (u) + ∇f 0 (u).

(u,v)∈E∨(v,u)∈E

 ÷àñòíîñòè, âåëè÷èíà ïîòîêà
|f + f 0 | = ∇f +f 0 (s) = ∇f (s) + ∇f 0 (s) = |f | + |f 0 |.

Ìû áóäåì ïóñêàòü äîïîëíèòåëüíûé ïîòîê âäîëü ïóòåé èç s â t, ïîýòîìó ââåäåì åùå
íåñêîëüêî îïðåäåëåíèé.

Ïðîïóñêíàÿ ñïîñîáíîñòü ïóòè

Îïðåäåëåíèå 4.42.
p èç s â t â ñåòè G åñòü c(p) :=
mine∈p c(e). Ñîîòâåòñòâåííî, ìàêñèìàëüíûé ïîòîê, êîòîðûé ìîæíî ïóñòèòü âäîëü ýòîãî
ïóòè, ðàâåí
(
c(p), (u, v) ∈ p,
fp (u, v) :=
0,
èíà÷å.
Îïðåäåëåíèå 4.43. Ïóòü, âåäóùèé èç s â t â îñòàòî÷íîé ñåòè Gf , íàçûâàåòñÿ óâåëè÷è-

âàþùèì ïóòåì. Èíà÷å ãîâîðÿ, ïóòü W îò s äî t óâåëè÷èâàþùèé äëÿ f , åñëè f (e) < c(e)

âûïîëíÿåòñÿ äëÿ êàæäîãî ïåðåäíåãî ðåáðà e ∈ W è f (e) > 0 äëÿ êàæäîãî îáðàòíîãî ðåáðà
e ∈ W.
152

Ãðàôû è àëãîðèòìû

Îïðåäåëåíèå 4.44. Ðàññìîòðèì ïðîèçâîëüíûé (s, t)-ðàçðåç ãðàôà G, ò.å. òàêóþ ïàðó
ïîäìíîæåñòâ âåðøèí C = (S, T ), ÷òî s ∈ S , t ∈ T , T = V \ S .
C íàçîâåì
X
c(C) :=
c(u, v).

ðàçðåçà

Ïðîïóñêíîé ñïîñîáíîñòüþ

u∈S,v∈T

Îïðåäåëåíèå 4.45. Ñîîòâåòñòâåííî, ìèíèìàëüíûì (s, t)-ðàçðåçîì íàçûâàåòñÿ (s, t)-ðàçðåç
ñ ìèíèìàëüíîé ïðîïóñêíîé ñïîñîáíîñòüþ.

Îïðåäåëåíèå 4.46. Åñëè æå â ñåòè çàäàí ïîòîê f , òî ïîòîêîì ÷åðåç ðàçðåç C íàçûâàåòñÿ
âåëè÷èíà

X

f (C) :=

f (u, v) −

u∈S,v∈T

Ðåáðî e áóäåì

íàñûùåííûì, åñëè f (e) = c(e).

X

f (u, v).

u∈T,v∈S

Î÷åâèäíî, f (C) 6 c(C). Êðîìå òîãî, îêàçûâàåòñÿ, ïîòîê ÷åðåç ëþáîé (s, t)-ðàçðåç
îäèíàêîâ è ðàâåí âåëè÷èíå ïîòîêà |f |:
(27)

X

f (C) :=

X

f (u, v) −

u∈S,v∈T

f (u, v) =

u∈T,v∈S

!
=

X
u∈S,v∈V

f (u, v) −

X

!


f (u, v)

u∈S,v∈S

=

X
u∈S,v∈V

XX

(f (u, v) − f (v, u)) =

u∈S v∈V

X

f (v, u) −

f (v, u)

=

u∈S,v∈S

X

∇f (u) = ∇f (s) = |f |.

u∈S

Òàêèì îáðàçîì, âåëè÷èíà ìàêñèìàëüíîãî ïîòîêà íå ïðåâîñõîäèò ïðîïóñêíîé ñïîñîáíîñòè ìèíèìàëüíîãî (s, t)-ðàçðåçà. Òåîðåìà ÔîðäàÔàëêåðñîíà óòâåðæäàåò, ÷òî âåðíî è
îáðàòíîå.

Âåëè÷èíà ìàêñèìàëüíîãî ïîòîêà ðàâíà ïðîïóñêíîé ñïîñîáíîñòè ìèíèìàëüíîãî (s, t)-ðàçðåçà.

Òåîðåìà 4.47 (Ford-Fulkerson).

Íàì íóæíû äîïîëíèòåëüíûå îïðåäåëåíèÿ.

Îïðåäåëåíèå 4.48. Ïóñòü (v0 , v1 . . . vn )  ïîñëåäîâàòåëüíîñòü âåðøèí íåîðèåíòèðîâàííîãî ïóòè â îðèåíòèðîâàííîì ãðàôå.
 ðåáðî âèäà vi vi+1 ,
 ðåáðî âèäà vi vi−1 .

Ïåðåäíåå ðåáðî

Òåîðåìà 4.49 (îá óâåëè÷èâàþùåì ïóòè).

òèòòê äëÿ f íåò óâåëè÷èâàþùèõ ïóòåé.

îáðàòíîå ðåáðî

Ïîòîê f â ñåòè N = (G, c, s, t) ìàêñèìàëåí
153

Ãðàôû è àëãîðèòìû
Äîêàçàòåëüñòâî. Ïóñòü ïîòîê f áóäåò ìàêñèìàëåí. äîïóñòèì, ÷òî ñóùåñòâóåò óâåëè÷èâàþùèé ïóòü W . Ïóñòü

d=

e

min

(c(e) − f (e))

 ïåðåäíåå

Òîãäà ïî îïðåäåëåíèþ óâåëè÷èâàþùåãî
f 0 : E → R+ :


f (e) + d,
f 0 (e) = f (e) − d,


f (e),

ïóòè d > 0. Òåïåðü ìû îïðåäåëèì îòîáðàæåíèå
e  ïåðåäíîå ðåáðî â W,
e  îáðàòíîå ðåáðî â W,
â ïðîòèâíîì ñëó÷àå.

Ëåãêî ïðîâåðèòü, ÷òî f 0 ÿâëÿåòñÿ ïîòîêîì â N ñî çíà÷åíèåì w(f 0 ) = w(f ) + d > w(f ), ÷òî
ïðîòèâîðå÷èò ìàêñèìàëüíîñòè f .
Íàîáîðîò, äîïóñòèì, ÷òî â N íåò óâåëè÷èâàþùèõ ïóòåé äëÿ f . Ïóñòü S  ìíîæåñòâî
âåðøèí v , äëÿ êîòîðûõ ñóùåñòâóåò óâåëè÷èâàþùèé ïóòü èç s â v (âêëþ÷àÿ ñàìó s) è
ïîëîæèì T = V \ S . Ïî óñëîâèþ (S, T )  ðàçðåç N . Îòìåòèì, ÷òî êàæäîå ðåáðî e = uv
ñ e− = u ∈ S è e+ = v ∈ T äîëæíî áûòü íàñûùåííûì  â ïðîòèâíîì ñëó÷àå îíî ìîæåò
áûòü äîáàâëåíî ê óâåëè÷èâàþùåìó ïóòè s â u, ïðîòèâîðå÷èå. Àíàëîãè÷íî, êàæäîå ðåáðî
ñ e− ∈ T è e+ ∈ S äîëæíî áûòü ïóñòûì. Îòñþäà ïîëó÷àåì w(f ) = c(S, T ), òàê ÷òî f
ìàêñèìàëüíûé.


Âûâîä 4.50. Ïóñòü f  ïîòîê â ñåòè ïîòîêîâ N = (G, c, s, t), îáîçíà÷èì çà Sf ìíîæåñòâî

âåðøèí, ëåæàùèõ íà óâåëè÷èâàþùèõ ïóòÿõ äëÿ f èç s; ïîëîæèì Tf = V \ Sf . Òîãäà
f  ìàêñèìàëüíûé ïîòîê òèòòê t ∈ Tf .  ýòîì ñëó÷àå (Sf , Tf ) ÿâëÿåòñÿ ìèíèìàëüíûì
ðàçðåçîì: w(f ) = c(Sf , Tf ).

Ïóñòü N = (G, c, s, t)  ñåòü, âñå åìêîñòè
êîòîðîé ÿâëÿþòñÿ öåëûìè ÷èñëàìè. Òîãäà ñóùåñòâóåò ìàêñèìàëüíûé ïîòîê íà N
òàêîé, ÷òî âñå çíà÷åíèÿ f (e) ÿâëÿþòñÿ öåëûìè.

Òåîðåìà 4.51 (î öåëî÷èñëåííîì ïîòîêå).
()

Äîêàçàòåëüñòâî. Óñòàíîâèâ f0 (e) = 0 äëÿ âñåõ e, ïîëó÷èì öåëî÷èñëåííûé ïîòîê f0
íà N ñ íóëåâûì çíà÷åíèåì. Åñëè ýòîò òðèâèàëüíûé ïîòîê íå ìàêñèìàëåí, òî ñóùåñòâóåò
óâåëè÷èâàþùèé ïóòü äëÿ f0 .  òàêîì ñëó÷àå ÷èñëî d èç äîêàçàòåëüñòâà òåîðåìû 4.49 
ïîëîæèòåëüíîå öåëîå, è ìû ìîæåì ïîñòðîèòü öåëî÷èñëåííûé ïîòîê f1 ñî çíà÷åíèåì d.
Ïðîäîëæàÿ óâåëè÷èâàòü ïîòîê ÷åðåç N , ìû êàæäûé ðàç óâåëè÷èâàåì åãî íà íåêîòîðîå
ïîëîæèòåëüíîå öåëîå; ïîñêîëüêó âåëè÷èíà ìèíèìàëüíîãî ðàçðåçà îãðàíè÷èâàåò ñâåðõó
ðàçìåð ïîòîêà, òî ðàíî èëè ïîçäíî ìû ïîëó÷èì ïîòîê f , äëÿ êîòîðîãî íå ñóùåñòâóåò
óâåëè÷èâàþùèõ ïóòåé. Ïî òåîðåìå 4.49 ýòîò ïîòîê f ìàêñèìàëåí.


Ìåòîä Ôîðäà-Ôàëêåðñîíà. Àëãîðèòì ÝäìîíäñàÊàðïà
Òåïåðü íàïèøåì ìåòîä ÔîðäàÔàëêåðñîíà.
154

Ãðàôû è àëãîðèòìû

Require: G  îðãðàô, c(·)  ïðîïóñêíûå ñïîñîáíîñòè, s, t  èñòîê è ñòîê ñåòè
Ensure: f  ìàêñèìàëüíûé ïîòîê â G
f (u, v) := 0 ∀u, v ∈ V ;
Gf := G, cf (u, v) := c(u, v) ∀u, v ∈ V ;
while â Gf ñóùåñòâóåò óâåëè÷èâàþùèé ïóòü do
íàéòè óâåëè÷èâàþùèé ïóòü p â Gf ;
f := f + fp ;
âû÷èñëèòü Gf , cf .

end while

Çàìåòèì, ÷òî ýòî èìåííî ìåòîä, à íå àëãîðèòì  ìû íå ïîÿñíÿåì, êàê èìåííî èñêàòü
óâåëè÷èâàþùèå ïóòè. Êðîìå òîãî, â òàêîì âèäå äàæå ñõîäèìîñòü ìåòîäà íå ãàðàíòèðóåòñÿ.
Ïîëüçóÿñü ìåòîäîì Ôîðäà-Ôàëêåðñîíà, ïîñòðîèì äâà àëãîðèòìà ïîèñêà ìàêñèìàëüíîãî ïîòîêà. Íà÷íåì ñ àëãîðèòìà Ôîðäà-Ôàëêåðñîíà.
1: procedure Ford-Fulkerson(G = (V, E), c(·), s, t)
2:
for e ∈ E do
3:
f (e) ← 0
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

end for

ïîìåòèòü s ïàðîé (−, ∞)
for v ∈ V do
u(v) ← false, d(v) ← ∞

end for
while ∃v ∈ V : v ïîìå÷åíà u(v) = false do

âûáðàòü îòìå÷åííóþ v , äëÿ êîòîðîé u(v) = false
for e ∈ {e ∈ E : e− = v} do
if w = e+ íå ïîìå÷åíà è f (e) < c(e) then
d(w) ← min{c(e) − f (e), d(v)}, ïîìåòèòü w òðîéêîé (v, +, d(w))

end if
end for
for e ∈ {e ∈ E : e+ = v} do
if w = e− íå ïîìå÷åíî è f (e) > 0 then

d(w) ← min{f (e), d(v)}, ïîìåòèòü w òðîéêîé (v, −, d(w))

end if
end for
u(v) ← true
if t ïîìå÷åíà then

âçÿòü d  ïîñëåäíþþ êîìïîíåíòó ìåòêè t
w←t
while w 6= s do
155

Ãðàôû è àëãîðèòìû
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:

âçÿòü v , x  ïåðâûå äâå êîìïîíåíòû ìåòêè t,

if x = + then

f (e) ← f (e) + d äëÿ e = vw

else

f (e) ← f (e) − d äëÿ e = wv

end if
w←v

end while

óäàëèòü ìåòêè äëÿ âñåõ âåðøèí â V \ {s}

for v ∈ V do

d(v) ← ∞, u(v) = false

end for
end if
end while

S  ìíîæåñòâî âñåõ ïîìå÷åííûõ âåðøèí
return f , S , V \ S

end procedure

Èç òåîðåìû î öåëî÷èñëåííîì ïîòîêå íåìåäëåííî ñëåäóåò ñëåäóþùàÿ

Ïóñòü N = (G, c, s, t)  ñåòü, äëÿ êîòîðîé c(e) ∈ Q äëÿ ëþáîãî e ∈ E .
Òîãäà àëãîðèòì Ford-Fulkerson îïðåäåëÿåò ìàêñèìàëüíûé ïîòîê f è ìèíèìàëüíûé
ðàçðåç (S, T ). Áîëåå òîãî, w(f ) = c(S, T ).

Òåîðåìà 4.52.

Åñëè æå åìêîñòè ðåáåð ìîãóò áûòü èððàöèîíàëüíû, àëãîðèòì FordFulkerson ìîæåò íèêîãäà

156

Õîòÿ àëãîðèòì Ford-Fulkerson
êîððåêòíî ðàáîòàåò íà öåëî÷èñëåííûõ
ñåòÿõ, îí íå ïîëèíîìèàëåí: êîëè÷åñòâî
óâåëè÷èâàíèé çàâèñèò íå òîëüêî îò |V | è
|E|, íî è îò çíà÷åíèé c. Ðàññìîòðèì
ïðèìåð ñåòè íà êàðòèíêå ñëåâà. Åñëè ìû
èñïîëüçóåì ïóòè s → a → b → e → f → t è
s → d → e → b → c → t, òî íàì
ïîíàäîáèòñÿ 2n èòåðàöèé äëÿ ïîëó÷åíèÿ
ìàêñèìàëüíîãî ïîòîêà.

Ãðàôû è àëãîðèòìû
íå îñòàíîâèòüñÿ. Ñëåäóÿ ðàáîòå [zwi], ïðèâåäåì ïðèìåð ñåòè, íà êîòîðîé àëãîðèòì Ôîðäà-Ôàëêåðñîíà íèêîãäà íå ñîéäåòñÿ ê ïðàâèëüíîìó îòâåòó. Íà√êàðòèíêå ñïðàâà φ = 5−1
,
2
X = 100. Àëãîðèòì ÔÔ
ñïåðâà íàéäåò öåíòðàëüíûé
óâåëè÷èâàþøèé ïóòü (âûøå íà êàðòèíêå).

Îñòàòî÷íûå åìêîñòè ðåáåð ïîñåðåäèíå ðàâíû 1, 0, φ. Äîïóñòèì, ÷òî â íåêîòîðûé ìîìåíò îñòàòî÷íûå åìêîñòè ýòèõ ðàâíû φk−1 , 0, φk ; èû ïðîäåëûâàåì ñëåäóþùèå óâåëè÷åíèÿ:
(1) Óâåëè÷èòü âäîëü ïóòè B, äîáàâëÿÿ φk ê ïîòîêó; îñòàòî÷íûå åìêîñòè ðàâíû φk+1 ,
φk , 0.
(2) Óâåëè÷èòü âäîëü ïóòè C, äîáàâëÿÿ φk ê ïîòîêó; îñòàòî÷íûå åìêîñòè ðàâíû φk+1 ,
0, φk .
(3) Óâåëè÷èòü âäîëü ïóòè B, äîáàâëÿÿ φk+1 ê ïîòîêó; îñòàòî÷íûå åìêîñòè ðàâíû 0,
φk+1 , φk+2 .
(4) Óâåëè÷èòü âäîëü ïóòè A, äîáàâëÿÿ φk+1 ê ïîòîêó; îñòàòî÷íûå åìêîñòè ðàâíû
φk+1 , 0, φk+2 .
Òîãäà ïîñëå 4n + 1 èòåðàöèé îñòàòî÷íûå åìêîñòè ðàâíû φ2n−2 , 0, φ2n−1 . Ïðè n → ∞
ïîëó÷àåì ïðåäåëüíûé ïîòîê
1+2


X
i=0

φi = 1 +


2
=4+ 5
1−φ

Ìåæäó òåì î÷åâèäíî, ÷òî ìàêñèìàëüíûé ïîòîê ðàâåí 2X + 1 = 201.
Îäíàêî ëåãêîé ìîäåðíèçàöèåé ìîæíî èç àëãîðèòìà Ford-Fulkerson ïîëó÷èòü ïîëèíîìèàëüíûé àëãîðèòì, íàõîäÿùèé ìàêñèìàëüíûé ïîòîê ÷åðåç ñåòü.

Çàìåíèì øàã (10) àëãîðèòìà Ford-Fulkerson ñëåäóþùèì îáðàçîì:
10': ñðåäè v, äëÿ êîòîðûõ u(v) = false, âûáðàòü îòìå÷åííóþ ïåðâîé
Ïîëó÷åííûé àëãîðèòì (êîòîðûé ìû áóäåì íàçûâàòü Edmonds-Karp) èìååò ñëîæíîñòü O(|V ||E| ).
Òåîðåìà 4.53 (Edmonds-Karp).

2

157

Ãðàôû è àëãîðèòìû
Äîêàçàòåëüñòâî. Íåòðóäíî âèäåòü, ÷òî ïîòîê f âñåãäà óâåëè÷èâàåòñÿ ñ ïîìîùüþ
óâåëè÷åíèÿ ïóòè íàèìåíüøåé äëèíû, ïðè óñëîâèè, ÷òî ìû çàìåíÿåì øàã (10) íà (10').
Ïóñòü f0 áóäåò ïîòîêîì çíà÷åíèÿ 0, îïðåäåëåííîãî èçíà÷àëüíî, à f1 , f2 , f3 , . . .  ïîñëåäîâàòåëüíîñòü ïîòîêîâ, ïîñòðîåííàÿ âïîñëåäñòâèè. Îáîçíà÷èì ñàìóþ êîðîòêóþ äëèíó
óâåëè÷èâàþùåãî ïóòè îò s äî v äëÿ fk êàê xv (k). Äîêàæåì, ÷òî äëÿ âñåõ k è v âûïîëíåíî

xv (k + 1) > xv (k)

Äîïóñòèì îáðàòíîå, à èìåííî, ÷òî íåðàâåíñòâî íàðóøàåòñÿ äëÿ íåêîòîðîé ïàðû (v, k);
ìîæíî ðàññìîòðåòü ïàðó (v, k) ñ ìèíèìàëüíûì xv (k + 1). Ðàññìîòðèì ïîñëåäíåå ðåáðî e
íà êðàò÷àéøåì ïóòè óâåëè÷åíèÿ îò s äî v îòíîñèòåëüíî fk + 1. Äîïóñòèì ñíà÷àëà, ÷òî e
ÿâëÿåòñÿ ïåðåäíèì ðåáðîì, ïîýòîìó e = uv äëÿ íåêîòîðîé âåðøèíû u; îáðàòèòå âíèìàíèå,
÷òî äëÿ ýòîãî òðåáóåòñÿ fk + 1(e) < c(e). Òàêèì îáðàçîì, xv (k + 1) = xu (k + 1) + 1, òàê
÷òî xu (k + 1) > xu (k) â ñèëó íàøåãî âûáîðà v . Ñëåäîâàòåëüíî, xv (k + 1) > xu (k) + 1. Ñ
äðóãîé ñòîðîíû, fk (e) = c(e), èíà÷å xv (k) 6 xu (k)+1 è xv (k+1) > xv (k), ÷òî ïðîòèâîðå÷èò
âûáîðó v . Ñëåäîâàòåëüíî, e áûëî îáðàòíûì ðåáðîì â ìîìåíò, êîãäà fk çàìåíèëñÿ íà fk +1.
Ïîñêîëüêó ìû èñïîëüçîâàëè ïóòü êðàò÷àéøåé äëèíû, ìû çàêëþ÷àåì xu (k) = xv (k) + 1
è, ñëåäîâàòåëüíî, xv (k + 1) > xv (k) + 2, ïðîòèâîðå÷èå. Ñëó÷àé, êîãäà uv  îáðàòíîå,
ðàçáèðàåòñÿ àíàëîãè÷íî. Áîëåå òîãî, ïîõîæèå àðãóìåíòû òàêæå ïðèâîäÿò ê íåðàâåíñòâó
yv (k + 1) > yv (k)

äëÿ âñåõ k è v . Çäåñü yv (k)  äëèíà êðàò÷àéøåãî óâåëè÷èâàþùåãî ïóòè îò v äî t äëÿ fk .
Ïðè óâåëè÷åíèè ïîòîêà â óâåëè÷èâàþùåì ïóòè íàéäåòñÿ êàê ìèíèìóì îäèíî
ðåáðî: ïîòîê ÷åðåç ýòîò ðåáðî ëèáî óâåëè÷èâàåòñÿ äî ìàêñèìàëüíî âîçìîæíîãî
[åìêîñòè ðåáðà], ëèáî óìåíüøàåòñÿ äî íóëÿ. Ïóñòü e = uv  êðèòè÷åñêîå ðåáðî â óâåëè÷èâàþùåì ïóòè äëÿ fk ; ýòîò ïóòü ñîñòîèò èç

êðè-

òè÷åñêîå

xv (k) + yv (k) = xu (k) + yu (k)

ðåáåð. Åñëè èñïîëüçóåòñÿ â ñëåäóþùèé ðàç â êàêîì-ëèáî óâåëè÷èâàþùåì ïóòè (äëÿ íåêîòîðîãî fh ), îíî äîëæíî áûòü èñïîëüçîâàíî â îáðàòíîì íàïðàâëåíèè: åñëè áûëî ïåðåäíèì
ðåáðîì äëÿ fk , îíî äîëæíî áûòü îáðàòíûì äëÿ fh , è íàîáîðîò.
Äîïóñòèì, ÷òî e áûëî ïåðåäíèì ðåáðîì äëÿ fk . Òîãäà
xv (k) = xu (k) + 1,

xu (h) = xv (h) + 1.

Ñîãëàñíî íåðàâåíñòâàì, äîêàçàííûì âûøå, ïîëó÷àåì
xv (h) > xv (k),

yu (h) > yu (k).

Ñëåäîâàòåëüíî, ìû ïîëó÷àåì
xu (h) + yu (h) = xv (h) + 1 + yu (h) > xv (k) + 1 + yu (k) = xu (k) + yu (k) + 2.

158

Ãðàôû è àëãîðèòìû
Òàêèì îáðàçîì, óâåëè÷èâàþùèé ïóòü îòíîñèòåëüíî fh ñîäåðæèò ïî êðàéíåé ìåðå íà äâà
ðåáðà áîëüøå, ÷åì óâåëè÷èâàþùèé ïóòü ïî îòíîøåíèþ ê fk . Ýòî òàêæå âåðíî, åñëè e 
îáðàòíîå ðåáðî äëÿ fh .
Î÷åâèäíî, ÷òî íèêàêîé ïóòü óâåëè÷èâàþùèõ íå ìîæåò ñîäåðæàòü áîëüøå ÷åì |V | − 1
ðåáåð. Ñëåäîâàòåëüíî, êàæäîå ðåáðî ìîæåò áûòü êðèòè÷åñêèì íå áîëåå |V 2|+1 ðàçà, è,
òàêèì îáðàçîì, ïîòîê ìîæåò áûòü èçìåíåí íå áîëåå O(|V ||E|) ðàç. [ ÷àñòíîñòè, îòñþäà
ñëåäóåò, ÷òî àëãîðèòì Ýäìîíäñà-Êàðïà îñòàíàâëèâàåòñÿ äàæå â ñëó÷àå èððàöèîíàëüíûõ
åìêîñòåé.] Êàæäàÿ èòåðàöèÿ  ïîèñê óâåëè÷èâàþùåãî ïóòè è îáíîâëåíèå ïîòîêà  âûïîëíÿåò òîëüêî O(|E|) øàãîâ, ïîñêîëüêó êàæäîå ðåáðî îáðàáàòûâàåòñÿ íå áîëåå òðåõ ðàç:
äâàæäû â ïðîöåññå ìàðêèðîâêè è îäèí ðàç ïðè èçìåíåíèè ïîòîêà. Îòñþäà ñëåäóåò, ÷òî
ñëîæíîñòü àëãîðèòìà Ýäìîíäñà-Êàðïà ðàâíà O(|V ||E|2 ).


Ïðèìåð 4.54. Ìû èñïîëüçóåì àëãîðèòì Ýäìîíäñà-Êàðïà, ÷òîáû îïðåäåëèòü ìàêñèìàëü-

íûé ïîòîê è ìèíèìàëüíûé ðàçðåç â ñåòè íà êàðòèíêå íèæå [èòåðàöèè  íà ñëåäóþùåé
ñòðàíèöå]. Åìêîñòè ðåáåð óêàçàíû â ñêîáêàõ; ÷èñëà áåç ñêîáîê  ñîîòâåòñòâóþùèå çíà÷åíèÿ ïîòîêà. Óâåëè÷èâàþùèé ïóòü, èñïîëüçóåìûé äëÿ ïîñòðîåíèÿ ñëåäóþùåãî ïîòîêà,
âûäåëåí æèðíûì øðèôòîì.

159

Ãðàôû è àëãîðèòìû

160

Ãðàôû è àëãîðèòìû

Ìåòîä ïðîòàëêèâàíèÿ ïðåäïîòîêà. Àëãîðèòì Òàðüÿíà-Ãîëäáåðãà
Òåïåðü ìû ïðåäñòàâèì äðóãîé àëãîðèòì ïîèñêà ìàêñèìàëüíîãî ïîòîêà, ðàçðàáîòàííûé Ãîëäáåðãîì è Òàðüÿíîì. Âìåñòî èòåðàòèâíîãî óâåëè÷åíèÿ ïîòîêà ïóòåì íàõîæäåíèÿ
íîâûõ óâåëè÷èâàþùèõ ïóòåé ýòîò àëãîðèòì ðàáîòàåò ñ òàê íàçûâàåìûìè ïðåäïîòîêàìè.
Îñíîâíàÿ èäåÿ àëãîðèòìà ñîñòîèò â òîì, ÷òîáû ïðîòîëêíóòü ïîòîê èç âåðøèí ñ èçáûòêîì ê ñòîêó t, èñïîëüçóÿ ïóòè îò s äî t, êîòîðûå íå îáÿçàòåëüíî ÿâëÿþòñÿ êðàò÷àéøèìè,
íî òîëüêî òåêóùèå îöåíêè äëÿ òàêèõ ïóòåé. Êîíå÷íî, ìîæåò ñëó÷èòüñÿ òàê, ÷òî ëèøíèé
ïîòîê íå ìîæåò áûòü âûòîëêíóò èç íåêîòîðîé âåðøèíû v ; â ýòîì ñëó÷àå åãî íåîáõîäèìî
îòïðàâèòü îáðàòíî ê èñòî÷íèêó ïî ïîäõîäÿùåìó ïóòè. Âûáîð âñåõ ýòèõ ïóòåé êîíòðîëèðóåòñÿ îïðåäåëåííîé ôóíêöèåé ìàðêèðîâêè íà âåðøèíàõ.

Îïðåäåëåíèå 4.55. Ïóñòü (G = (V, E), c, s, t)  ñåòü.
V → R, óäîâëåòâîðÿþùàÿ ñâîéñòâàì:
• f (v, w) 6 c(v, w) äëÿ âñåõ (v, w) ∈ V × V
• f (v, w) = −f (w, v) äëÿ âñåõ (v, w) ∈ V × V
• U ∈ V f (u, v) > 0 äëÿ âñåõ v ∈ V \ {s}

Ïðåäïîòîê f  ôóíêöèÿ f : V ×

Ïîñëåäíåå óñëîâèå îçíà÷àåò, ÷òî êîëè÷åñòâî ïîòîêà, âõîäÿùåãî â âåðøèíó v 6= s, íå
ìåíüøå, íî ìîæåò áûòü áîëüøå ïîòîêà, èñõîäÿùåãî èç v .

Îïðåäåëåíèå 4.56. Âåëè÷èíà
e(v) =

íàçûâàåòñÿ

èçáûòêîì ïðåäïîòîêà f â v.

X

f (u, v)

u∈V

Íåòðóäíî âèäåòü, ÷òî äëÿ ïîòîêà f èçáûòîê e(v) = 0 äëÿ ëþáîé âåðøèíû v .

Îïðåäåëåíèå 4.57. Ïóñòü íà ñåòè (G = (V, E), c, s, t) çàäàí ïðåäïîòîê f . Îïðåäåëèì

îñòàòî÷íóþ åìêîñòü r

f

: V × V → R:

rf (v, w) = c(v, w) − f (v, w).

Åñëè ðåáðî vw óäîâëåòâîðÿåò rf (v, w) > 0, ìû ìîæåì ïóñòèòü íåêîòîðûé ïîòîê ÷åðåç
íåãî; òàêîå ðåáðî íàçûâàåòñÿ
.

îñòàòî÷íûì ðåáðîì

Îñòàòî÷íîå ðåáðî ëèáî vw ÿâëÿåòñÿ ïåðåäíèì, íî åùå íå íàñûùåííûì: 0 6 f (v, w) <
c(v, w), ëèáî îáðàòíûì, òî åñòü 0 < f (w, v) 6 c(w, v).

Îïðåäåëåíèå 4.58.

Îñòàòî÷íûé ãðàô ïðåäïîòîêà f îïðåäåëÿåòñÿ êàê
Gf = (V, Ef ),

Ef = {vw ∈ E | rf (v, w) > 0}

Îïðåäåëåíèå 4.59. Îòîáðàæåíèå d : V → N0 ∪{∞} íàçûâàåòñÿ êîððåêòíîé ìàðêèðîâêîé
äëÿ ïðåäïîòîêà f , åñëè âûïîëíÿþòñÿ ñëåäóþùèå äâà óñëîâèÿ:

161

Ãðàôû è àëãîðèòìû
• d(s) = |V | è d(t) = 0;
• d(v) 6 d(w) + 1 äëÿ âñåõ vw ∈ Ef .

Áóäåì òàêæå íàçûâàòü âåðøèíó v

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:

àêòèâíîé, åñëè v 6= s, t, (v) > 0 è d(v) < ∞.

procedure Goldgberg(G = (V, E), c : V × V → R, s, t)
for (v, w) ∈ (V \ {s}) × (V \ {s}) do
f (v, w) ← 0, rf (v, w) ← c(v, w)

end for

d(s) ← |V |

for v ∈ V \ {s} do

f (s, v) ← c(s, v), rf (s, v) ← 0
f (v, s) ← −c(s, v), rf (v, s) ← c(v, s) + c(s, v)
d(v) ← 0
e(v) ← c(s, v)

end for
while ∃v 6= s, t, (v) > 0 è d(v) < ∞ do

âûïîëíèòü äîïóñòèìóþ îïåðàöèþ äëÿ v

end while
return f
end procedure

 êà÷åñòâå äîïóñòèìûõ îïåðàöèé ìîãóò èñïîëüçîâàòüñÿ Push è
÷òî îíà äîïóñòèìû]:
1: procedure Push(G = (V, E), c : V × V → R, s, t, f , v , w )
2:
δ ← min(e(v), rf (v, w))
3:
f (v, w) ← f (v, w) + δ , f (w, v) ← f (w, v) − δ
4:
rf (v, w) ← rf (v, w) − δ , rf (w, v) ← rf (w, v) + δ
5:
e(v) ← e(v) − δ , e(w) ← e(w) + δ
6:
return f
7:

1:
2:
3:
4:

end procedure
procedure Relabel(G = (V, E), c : V × V → R, s, t, f , v , w)
d(v) ← min{d(w) + 1 | rf (v, w) > 0}
return f

end procedure
Ïðîöåäóðà

Push

äîïóñòèìà ïðè óñëîâèè, ÷òî v àêòèâíà,
rf (v, w) > 0,

Ïðîöåäóðà

Relabel

äîïóñòèìà ïðè óñëîâèè, ÷òî v àêòèâíà è
∀w ∈ V

162

d(v) = d(w) + 1

rf (v, w) > 0 → d(v) 6 d(w)

Label

[ïðè óñëîâèè,

Ãðàôû è àëãîðèòìû
Ìû ïîêàæåì, ÷òî àëãîðèòì Òàðüÿíà-Ãîëäáåðãà íàõîäèò ìàêñèìàëüíûé ïîòîê â ñåòè
N çà êîíå÷íîå ÷èñëî øàãîâ íåçàâèñèìî îò òîãî, â êàêîì ïîðÿäêå ìû âûáèðàåì àêòèâíûå
âåðøèíû è äîïóñòèìûå îïåðàöèè. Ýòî ðàçèòåëüíî îòëè÷àåò ìåòîä Òàðüÿíà-Ãîëäáåðãà îò
ìåòîäà Ôîðäà-Ôàëêåðñîíà, ñëîæíîñòü êîòîðîãî ñóùåñòâåííî çàâèñèò îò ïîðÿäêà âûïîëíåíèÿ îïåðàöèé.

Ëåììà 4.60. Ïóñòü f  ïðåäïîòîê íà N , d  êîððåêòíàÿ ìàðêèðîâêà íà V îòíîñèòåëüíî ê f , è v àêòèâíàÿ âåðøèíà. Òîãäà ëèáî Push, ëèáî îïåðàöèÿ Relabel äîïóñòèìû
äëÿ v.
Äîêàçàòåëüñòâî. Ïîñêîëüêó d äîïóñòèìà, òî d(v) 6 d(w)+1 äëÿ âñåõ w ñ rf (v, w) >
0. Åñëè Push(N, f, v, w) íå äîïóñòèìî äëÿ ëþáîãî w, òî d(v) 6 d(w) äëÿ âñåõ w ñ rf (v, w) >
0, òàê êàê d ïðèíèìàåò òîëüêî öåëûå çíà÷åíèÿ. Íî òîãäà Relabel äîïóñòèìà.


Âî âðåìÿ âûïîëíåíèÿ àëãîðèòìà Goldberg f âñåãäà ÿâëÿåòñÿ ïðåïîòîêîì, à d  êîððåêòíîé ìàðêèðîâêîé äëÿ f .

Ëåììà 4.61.

Äîêàçàòåëüñòâî. Ìû óæå èñïîëüçóåì èíäóêöèþ ïî ÷èñëó âûïîëíåííûõ äîïóñòèìûõ îïåðàöèé k. Óòâåðæäåíèå ñïðàâåäëèâî äëÿ áàçèñà èíäóêöèè k = 0: î÷åâèäíî, f èíèöèàëèçèðóåòñÿ êàê ïðåäïîòîê íà ýòàïàõ (7) è (8); ìàðêèðîâêà d, îïðåäåëåííàÿ íà øàãàõ
(5) è (9), êîððåêòíà äëÿ f , ïîñêîëüêó d(v) = 0 äëÿ v 6= s è âñå ðåáðà sv íàñûùåíû íà øàãå
(7). Êðîìå òîãî, îñòàòî÷íûå åìêîñòè è èçáûòîê ïîòîêà èíèöèàëèçèðîâàíû ïðàâèëüíî íà
øàãàõ (7), (8) è (10).
Äîêàçûâàÿ øàã èíäóêöèè, äîïóñòèì, ÷òî óòâåðæäåíèå âûïîëíÿåòñÿ ïîñëå k îïåðàöèé. Ïîëîæèì ñíà÷àëà, ÷òî ñëåäóþùàÿ îïåðàöèÿ - ýòî Push(v, w). Ëåãêî ïðîâåðèòü, ÷òî
f îñòàåòñÿ ïðåäïîòîêîì è ÷òî îñòàòî÷íûå ìîùíîñòè è ïðåâûøåíèÿ ïîòîêà îáíîâëÿþòñÿ
ïðàâèëüíî. Ïîìåòêè íå èçìåíÿþòñÿ, à vw è wv  åäèíñòâåííûå ðåáðà, íà êîòîðûõ èçìåíèëñÿ f . Ñëåäîâàòåëüíî, íàì íóæíî ðàçîáðàòüñÿ ñ ýòèìè ðåáðàìè, ÷òîáû ïîêàçàòü, ÷òî
d  êîððåêòíàÿ ïîìåòêà. Ïî îïðåäåëåíèþ vw ∈ Ef ïåðåä Push. Òåïåðü vw ìîæåò áûòü
óäàëåíî èç îñòàòî÷íîãî ãðàôà Gf (åñëè îíî íàñûùåíî ïîñëå ïðèìåíåíèÿ Push), íî òîãäà
ìàðêèðîâêà îñòàíåòñÿ êîððåêòíîé.
Òåïåðü ðàññìîòðèì àíòèïàðàëëåëüíîå ðåáðî wv . Åñëè ýòî ðåáðî óæå åñòü â Gf , äîêàçûâàòü íå÷åãî. Äîïóñòèì, ÷òî wv äîáàâëÿåòñÿ ê Gf Push; îïÿòü æå, d îñòàåòñÿ êîððåêòíîé, òàê êàê óñëîâèÿ äîïóñòèìîñòè äëÿ Push(v, w) òðåáóþò d(w) = d(v) − 1.
Îñòàëîñü ðàññìîòðåòü ñëó÷àé, êîãäà ñëåäóþùåé îïåðàöèåé ÿâëÿåòñÿ Relabel(v ). Òîãäà òðåáîâàíèå äîïóñòèìîñòè d(v) 6 d(w) äëÿ âñåõ âåðøèí w ñ rf (v, w) > 0. Ïðè óâåëè÷åíèè d(v) äî ìèíèìóìà âñåõ d(w) + 1, óñëîâèå d(v) 6 d(w) + 1 âûïîëíÿåòñÿ äëÿ âñåõ w ñ
rf (v, w) > 0 ïîñëå ýòîãî èçìåíåíèÿ. Âñå îñòàëüíûå ìåòêè îñòàþòñÿ íåèçìåííûìè, òàê ÷òî
íîâàÿ ìåòêà d îñòàåòñÿ êîððåêòíîé äëÿ f .


163

Ãðàôû è àëãîðèòìû

Ïóñòü f  ïðåäïîòîê íà N , ïóñòü d  äîïóñòèìàÿ ìàðêèðîâêà äëÿ f , à
è w  äâå âåðøèíû â N òàêèå, ÷òî w äîñòèæèìà èç v â îñòàòî÷íîì ãðàôå G . Òîãäà

Ëåììà 4.62.
v

f

d(v) − d(w) 6 d(v, w).
Äîêàçàòåëüñòâî.

Ïóñòü
P : v = v0 − v1 − · · · − vk = w

êðàò÷àéøèé ïóòü èç v â w â Gf . Ïîñêîëüêó d  êîððåêòíàÿ ìàðêèðîâêà, äëÿ âñåõ i =
0, . . . , k − 1 ïîëó÷àåì d(vi ) 6 d(vi+1 ) + 1. Ïîñêîëüêó P èìååò äëèíó k = d(v, w), ìû
ïîëó÷àåì òðåáóåìîå íåðàâåíñòâî.


Ïóñòü f  ïðåäïîòîê íà N , à d  êîððåêòíàÿ ìàðêèðîâêà äëÿ f .
Òîãäà t íå äîñòèæèìà èç s â îñòàòî÷íîì ãðàôå G .
Óòâåðæäåíèå 4.63.

f

Äîêàçàòåëüñòâî. Äîïóñòèì îáðàòíîå. Òîãäà d(s) 6 d(t) + d(s, t) ïî ëåììå, äîêàçàííîé âûøå. Íî ýòî ïðîòèâîðå÷èò d(s) = |V |, d(t) = 0 è d(s, t) 6 |V | − 1.


Åñëè àëãîðèòì Goldberg çàêàí÷èâàåò ðàáîòó, à âñå ìåòêè ïðèíèìàþò êîíå÷íîå çíà÷åíèå, òî ïîñòðîåííûé ïðåäïîòîê f íà ñàìîì äåëå ìàêñèìàëüíûé
ïîòîê íà N .
Òåîðåìà 4.64.

Äîêàçàòåëüñòâî. Ïî ëåììå 4.60 àëãîðèòì ìîæåò çàâåðøèòüñÿ òèòòê áîëüøå íåò
àêòèâíûõ âåðøèí. Ïîñêîëüêó âñå ìåòêè êîíå÷íû ïî ïðåäïîëîæåíèþ, e(v) = 0 âåðíî äëÿ
êàæäîé âåðøèíû v 6= s, t; òàêèì îáðàçîì, èòîãîâûé ïðåäïîòîê äåéñòâèòåëüíî ÿâëÿåòñÿ ïîòîêîì íà N . Èç óòâåðæäåíèÿ 4.60 íåò ïóòè èç s â t â Gf , ïîýòîìó íå ñóùåñòâóåò
óâåëè÷èâàþùåãî ïóòè îò s ê t îòíîñèòåëüíî f . Ïî òåîðåìå îá óâåëè÷èâàþùåì ïóòè ýòî
ýêâèâàëåíòíî ìàêñèìàëüíîñòè ïîòîêà.


Ïóñòü f  ïðåäïîòîê íà N . Åñëè v  âåðøèíà, äëÿ êîòîðîé e(v) > 0, òî
äîñòèæèìà èç v â G .

Ëåììà 4.65.
s

f

Äîêàçàòåëüñòâî. Îáîçíà÷èì ìíîæåñòâî âåðøèí, äîñòèæèìûõ èç v â Gf [ïî îðèåíòèðîâàííîìó ïóòè] íà S è ïîëîæèì T = V \ S . Òîãäà f (u, w) 6 0 äëÿ âñåõ âåðøèí u, w
ñ u ∈ T è w ∈ S , òàê êàê

0 = rf (w, u) = c(w, u) − f (w, u) > 0 + f (u, w).

 ñèëó àíòèñèììåòðè÷íîñòè f ïîëó÷èì
X
X
X
X
e(w) =
f (u, w) =
f (u, w) +
f (u, w) =
w∈S

u∈V,w∈S

u∈T,w∈S

u,w∈S

X

f (u, w) 6 0

u∈T,w∈S

Ïî îïðåäåëåíèþ ïðåäïîòîêà e(w) > 0 äëÿ âñåõ w 6= s. Íî (v) > 0, è, ïîñêîëüêó
0 ñëåäóåò s ∈ S .
164

P

w∈S

e(w) 6


Ãðàôû è àëãîðèòìû

Ëåììà 4.66.

 àëãîðèòìå Òàðüÿíà-Ãîëäáåðãà d(v) 6 2|V | − 1 äëÿ âñåõ v ∈ V .

Äîêàçàòåëüñòâî. Î÷åâèäíî, ÷òî óòâåðæäåíèå âûïîëíÿåòñÿ ïîñëå èíèöèàëèçàöèè
âî âðåìÿ øàãîâ (1) - (11). Ìåòêà d(v) âåðøèíû v ìîæåò áûòü èçìåíåíà òîëüêî îïåðàöèåé
Relabel(v ), òàêàÿ îïåðàöèÿ äîïóñòèìà òèòòê v àêòèâíà.  ÷àñòíîñòè v 6= s, t, òàê ÷òî
óòâåðæäåíèå òðèâèàëüíî äëÿ s è t, áîëåå òîãî, e(v) > 0. Ñîãëàñíî ëåììå 4.65 s äîñòóïíî
èç v â îñòàòî÷íîì ãðàôå Gf . Òåïåðü ëåììà 4.62 äàåò

d(v) 6 d(s) + d(v, s) 6 d(s) + |V | − 1 = 2|V | − 1.


Ëåììà 4.67.

Îáùåå êîëè÷åñòâî âûçîâîâ Relabel íå áîëåå (2|V | − 1)(|V | − 2) < 2|V | .
2

Äîêàçàòåëüñòâî. Êàæäûé Relabel(v ) óâåëè÷èâàåò d(v). Ïîñêîëüêó d(v) îãðàíè÷åíî 2|V |−1 íà ïðîòÿæåíèè âñåãî àëãîðèòìà (ñì. ëåììó 4.65). Òàêèì îáðàçîì, ïðè âûïîëíåíèè àëãîðèòìà Òàðüÿíà-Ãîëäáåðãà íå áîëåå 2|V | − 1 Relabel-îïåðàöèè âûïîëíÿþòñÿ
äëÿ ëþáîé çàäàííîé âåðøèíû v 6= s, t.


Äëÿ îöåíêè êîëè÷åñòâà âûçîâà Push íàì íóæíî ðàçëè÷àòü äâà ñëó÷àÿ: Push(v, w)
áóäåì íàçûâàòü
Push, åñëè ïîñëå åãî èñïîëíåíèÿ rf (v, w) = 0 (òî åñòü äëÿ
δ = rf (v, w) íà ïåðâîì øàãå Push) è
Push â ïðîòèâíîì ñëó÷àå.

íàñûùàþùèì

íåíàñûùàþùèì
Ëåììà 4.68. Ïðè âûïîëíåíèè àëãîðèòìà Òàðüÿíà-Ãîëäáåðãà îáùåå êîëè÷åñòâî âûçîâîâ
íàñûùàþùèõ Push íå áîëåå |V ||E|.

Äîêàçàòåëüñòâî. Ïî îïðåäåëåíèþ äëÿ ëþáîãî Push(v, w ) òðåáóåòñÿ vw ∈ Ef è
d(v) = d(w) + 1. Åñëè Push íàñûùàåò ðåáðî, äàëüíåéøåå Push(v, w) ìîæåò ïðîèçîéòè
òîëüêî ïîñëå Push (w, v ), òàê êàê rf (v, w) = 0 ïîñëå íàñûùåíèÿ Push(v, w). Push(w, v ) íå
äîïóñòèìî [â ââåäåííîì íàìè ñìûñëå] äî òîãî, êàê ìåòêè áûëè èçìåíåíû òàêèì îáðàçîì,
÷òî d(w) = d(v) + 1; ñëåäîâàòåëüíî, d(w) äîëæíà áûëà óâåëè÷åíà õîòÿ áû íà 2 ïåðåä
Push(w, v ). Òî÷íî òàê æå íèêàêîé Push(v, w ) íå ìîæåò ñòàòü äîïóñòèìûì ïðåæäå, ÷åì
d(v) òàêæå óâåëè÷èòñÿ íà íå ìåíåå 2.  ÷àñòíîñòè d(v) + d(w) äîëæíî óâåëè÷èòüñÿ êàê
ìèíèìóì íà 4 ìåæäó ëþáûìè äâóìÿ ïîñëåäîâàòåëüíûìè ïðèìåíåíèÿìè Push(v, w).
Ñ äðóãîé ñòîðîíû, êàê òîëüêî âûïîëíÿåòñÿ ïåðâûé Push(v, w) èëè Push(w, v ), âûïîëíÿåòñÿ
d(v) + d(w) > 1

. Êðîìå òîãî, ïî ëåììå 4.65 d(v), d(w) 6 2|V | − 1 íà ïðîòÿæåíèè ðàáîòû àëãîðèòìà;
ñëåäîâàòåëüíî, âî âðåìÿ ïîñëåäíåé Push-îïåðàöèè ñ ó÷àñòèåì v è w âûïîëíÿåòñÿ
d(v) + d(w) 6 4|V | − 2

. Òàêèì îáðàçîì, íàñûùàþùèõ Push(v, w) -îïåðàöèé íå áîëåå |V | − 1, òàê ÷òî îáùåå
êîëè÷åñòâî íàñûùàþùèõ Push-îïåðàöèé íå ïðåâûøàåò (|V | − 1)|E|.

165

Powered by TCPDF (www.tcpdf.org)

Ãðàôû è àëãîðèòìû

Ëåììà 4.69. Ïðè âûïîëíåíèè àëãîðèòìà Òàðüÿíà-Ãîëäáåðãà âûïîëíÿåòñÿ íå áîëåå 2|V | |E|
íåíàñûùàþùèì Push-îïåðàöèè.
2

Äîêàçàòåëüñòâî.

Ââåäåì ïîòåíöèàë
Φ=

X

d(v)

v àêòèâíà

è ðàññìîòðèì åãî èçìåíåíèå â òå÷åíèå ðàáîòû àëãîðèòìà Òàðüÿíà-Ãîëäáåðãà. Ïîñëå èíèöèàëèçàöèè Φ = 0, åñëè àëãîðèòì îñòàíàâëèâàåòñÿ, ñíîâà Φ = 0. Ëþáîé íåíàñûùåííûé
Push(v, w ) óìåíüøàåò Φ õîòÿ áû íà îäèí: ïîñêîëüêó rf (v, w) > e(v), âåðøèíà v ñòàíîâèòñÿ íåàêòèâíîé, Φ óìåíüøèëñÿ íà d(v); äàæå åñëè âåðøèíà w ñòàëà àêòèâíîé èç-çà Push,
Φ ñíîâà óâåëè÷èâàåòñÿ òîëüêî íà d(w) = d(v) − 1 â ñèëó óñëîâèé äîïóñòèìîñòè. Òî÷íî òàê
æå ëþáîé íàñûùàþùèé Push(v, w) óâåëè÷èâàåò Φ íà íå áîëåå ÷åì 2|V | − 1, ïîñêîëüêó
ìåòêà âåðøèíû w [êîòîðàÿ ìîæåò ñíîâà ñòàòü àêòèâíîé áëàãîäàðÿ Push] óäîâëåòâîðÿåò
d(w) 6 2|V | − 1 ïî ëåììå 4.65.
Ïî 4.68 íàñûùàþùèå Push-îïåðàöèè óâåëè÷èâàþò Φ ìàêñèìóì íà (2|V | − 1)|V ||E| â
öåëîì, ïî ëåììå 4.67 Relabel-îïåðàöèè óâåëè÷èâàþò Φ íà áîëüøèíñòâî (2|V |−1)(|V |−2)
åäèíèö. Îòñþäà ñëåäóåò âåðõíÿÿ îöåíêà äëÿ ÷èñëà íåíàñûùåííûõ Push-îïåðàöèé: (2|V |−
1)(|V ||E| + |V | − 2).


Àëãîðèòì Òàðüÿíà-Ãîëäáåðãà çàêàí÷èâàåòñÿ ïîñëå òîãî, êàê äîïóñòèìî
íå áîëåå O(|V | |E|) îïåðàöèè (ñ ìàêñèìàëüíûì ïîòîêîì).
Òåîðåìà 4.70.

2

Äîêàçàòåëüñòâî.  ñèëó ëåìì 4.67, 4.68, 4.69 ÷èñëî äîïóñòèìûõ îïåðàöèé îãðàíè÷åíî, ñëåäîâàòåëüíî, ÷èñëî èòåðàöèé ïîñëåäíåãî öèêëà while îãðàíè÷åíî. Ïîñêîëüêó
ïåðâûå äâà öèêëà for ñîâåðøàþò êîíå÷íîå ÷èñëî îïåðàöèé, àëãîðèòì Òàðüÿíà-Ãîëäáåðãà
îñòàíàâëèâàåòñÿ íà ëþáîé ñåòè. Áîëåå òîãî, òàêèì æå îáðàçîì ïðîâåðÿåòñÿ îöåíêà íà
ñëîæíîñòü. Èç òåîðåìû 4.64 ñëåäóåò, ÷òî ïîñòðîåííûé ïðåäïîòîê â ñàìîì äåëå ÿâëÿåòñÿ
ìàêñèìàëüíûì ïîòîêîì.


0-1 ïîòîêè
Òåïåðü ìû ñîñðåäîòî÷èìñÿ íà ÷àñòíîì ñëó÷àå
íà ðåáðàõ ðàâíû ëèáî 0, ëèáî 1.

Îïðåäåëåíèå 4.71.

0-1 ïîòîêîâ, òî åñòü ïîòîêîâ, êîòîðûå

Áëîêèðóþùèé ïîòîê  ïîòîê, äëÿ êîòîðîãî ëþáîé óâåëè÷èâàþùèé

ïóòü ñîäåðæèò çàäíåå ðåáðî.

Ìû çàèíòåðåñîâàíû â ïîñòðîåíèè áëîêèðóþùåãî 0-1 ïîòîêà  ýòî îêàçûâàåòñÿ ïîëåçíûì â íåêîòîðûõ êîìáèíàòîðíûõ ïðèìåíåíèÿõ.

Îïðåäåëåíèå 4.72.
166

0-1-ñåòü N = (G, c, s, t)  ñåòü, â êîòîðîé c(e) = 1 äëÿ âñåõ ðåáåð e.

Ãðàôû è àëãîðèòìû

Ëåììà 4.73.

Ïóñòü N = (G, c, s, t)  0-1-ñåòü. Òîãäà
|V |
d(s, t) 6 2 √ ,
M
N

ãäå M  ìàêñèìàëüíîå çíà÷åíèå ïîòîêà íà . Áîëåå òîãî, åñëè äëÿ êàæäîé âåðøèíû
v ∈ V \ {s, t} âåðíî ïî êðàéíåé ìåðå îäíî èç äâóõ óñëîâèé indeg(v) 6 1 è outdeg(v) 6 1,
òî
d(s, t) 6 1 +

|V |
M

Äîêàçàòåëüñòâî. Ïóñòü D = d(s, t), è ïóñòü Vi áóäåò ìíîæåñòâîì âñåõ âåðøèí v ∈
V ñ d(s, v) = i äëÿ i = 0, . . . , D. Âåðøèíû ñ áîëüøèì ðàññòîÿíèåì äî s ìîãóò ñóùåñòâîâàòü,
íî íå âàæíû â íàøèõ ðàññóæäåíèÿõ; äëÿ óïðîùåíèÿ îáîçíà÷åíèé ìîæíî ïðåäïîëîæèòü,
÷òî òàêèõ âåðøèí íåò. Çàòåì

(Si , Ti ) = (V0 ∪ V1 ∪ . . . ∪ Vi , Vi+1 ∪ . . . ∪ VD )

ÿâëÿåòñÿ ðàçðåçîì äëÿ êàæäîãî i < D. Ïîñêîëüêó êàæäîå ðåáðî e, äëÿ êîòîðîãî e− ∈ Si
è e+ ∈ Ti , óäîâëåòâîðÿåò óñëîâèÿì e− ∈ Vi è e+ ∈ Vi+1 , à N ÿâëÿåòñÿ 0-1-ñåòüþ, èç ìû
ïîëó÷àåì
M 6 c(Si , Ti ) 6 |Vi | × |Vi + 1|,

i = 0, . . . , D − 1.

Òàêèì îáðàçîì, õîòÿ áû îäíî èç äâóõ çíà÷åíèé |Vi | èëè |Vi+1 | íå ìîæåò áûòü ìåíüøå √.

Ñëåäîâàòåëüíî, ïî êðàéíåé ìåðå ïîëîâèíà ñëîåâ Vi ñîäåðæèò M èëè áîëåå âåðøèí. Ýòî
äàåò

M
6 |V0 | + . . . + |VD | 6 |V |,
D
2
è, ñëåäîâàòåëüíî,
|V |
d(s, t) 6 2 √ .
M
Òåïåðü ïðåäïîëîæèì, ÷òî N óäîâëåòâîðÿåò äîïîëíèòåëüíîìó óñëîâèþ, óêàçàííîìó â
óòâåðæäåíèè. Òîãäà ïîòîê ÷åðåç ëþáóþ äàííóþ âåðøèíó íå ìîæåò ïðåâûøàòü åäèíèöû, è ìû ïîëó÷àåì áîëåå ñèëüíîå íåðàâåíñòâî
M 6 |Vi |,

i = 0, . . . , D − 1.

Òîãäà
M (D − 1) 6 |V1 | + . . . + |VD − 1| 6 |V |.

1:
2:

procedure Block01Flow(G = (V, E), c : V × V → {0, 1}, s, t)
L←∅

167

Ãðàôû è àëãîðèòìû
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:

for v ∈ V do
ind(v) ← 0

end for
for e ∈ E do

g(e) ← 0, ind(e+ ) ← ind(e+ ) + 1

end for
while ind(t) 6= 0 do

v←t
for i ∈ {d . . . 1} do
âûáðàòü ðåáðî e = uv and óäàëèòü e èç E
ind(v) ← ind(v) − 1, g(e) ← 1
if ind(v) = 0 then
äîáàâèòü v â L
while L 6= ∅ do
óäàëèòü the rst vertex w èç L
for do{e ∈ E | e− = w}
óäàëèòü e èç E , ind(e+ ) ← ind(e+ ) − 1
if ind(e+ ) = 0 then
äîáàâèòü e+ â L

end if
end for
end while
end if
v←u

end for
end while
return g
end procedure

Î÷åâèäíî, ÷òî êàæäîå ðåáðî e îáðàáàòûâàåòñÿ, à çàòåì óäàëÿåòñÿ íå áîëåå îäíîãî ðàçà
âî âðåìÿ ïîâòîðåíèÿ áîëüøîãî öèêëà â ýòîé ïðîöåäóðå, òàê ÷òî ñëîæíîñòü Block01Flow
åñòü O(|E|).

Ïóñòü N = (G, c, s, t)  0-1-ñåòü. Òîãäà àëãîðèòì Block01Flow ìîæåò áûòü èñïîëüçîâàí äëÿ âû÷èñëåíèÿ ìàêñèìàëüíîãî 0-1-ïîòîêà íà N ñî ñëîæíîñòüþ
O(|V | |E|).

Òåîðåìà 4.74.
2
3

Äîêàçàòåëüñòâî.  ñèëó ëèíåéíîñòè Block01Flow ïî |E| äîñòàòî÷íî ïîêàçàòü,
2
÷òî áëîêèðóþøèé ïîòîê íóæíî âû÷èñëÿòü O(|V | 3 ) ðàç. Ïóñòü ìàêñèìàëüíîå çíà÷åíèå
ïîòîêà íà N . Ïîñêîëüêó çíà÷åíèå ïîòîêà óâåëè÷èâàåòñÿ êàê ìèíèìóì íà 1 âî âðåìÿ
2
êàæäîé ôàçû àëãîðèòìà, óòâåðæäåíèå òðèâèàëüíî â ñëó÷àå M 6 |V | 3 ; ïîëîæèì, ÷òî

168

Ãðàôû è àëãîðèòìû
2

M > |V | 3 . Ðàññìîòðèì ôàçó [îäíîçíà÷íî îïðåäåëåííóþ], íà êîòîðîé çíà÷åíèå ïîòîêà
2
óâåëè÷èâàåòñÿ äî çíà÷åíèÿ, ïðåâûøàþùåãî M − |V | 3 , è ïóñòü f áóäåò ïîòîêîì 0-1 íà
N , êîòîðûé àëãîðèòì ïîñòðîèë â íåïîñðåäñòâåííî ïðåäøåñòâóþùåé ôàçå. Òîãäà w(f ) 6
2
M − |V | 3 , è, ñëåäîâàòåëüíî, çíà÷åíèå M 0 ìàêñèìàëüíîãî ïîòîêà íà N 0 (f ) óäîâëåòâîðÿåò
2
0
= M − w(f ) > |V | 3 . Î÷åâèäíî, ÷òî N 0 òàêæå 0-1-ñåòü, òàê ÷òî ðàññòîÿíèå d(s, t) îò s äî
t â N 0 (f ) óäîâëåòâîðÿåò íåðàâåíñòâó

2
d(s, t) 6 2|V | M ? 6 2|V | 3

â ñèëó ëåììû 4.73. Ïîñêîëüêó ðàññòîÿíèå ìåæäó s è t â ñîîòâåòñòâóþùåé âñïîìîãàòåëüíîé
ñåòè óâåëè÷èâàåòñÿ â êàæäîé ôàçå, è, ñëåäîâàòåëüíî, êîíñòðóêöèÿ f ìîæåò çàíÿòü íå
2
2
áîëåå 2|V | 3 ôàç.  ñèëó âûáîðà f ìû äîñòèãàåì çíà÷åíèÿ ïîòîêà, ïðåâûøàþùåãî M −|V | 3
íà ñëåäóþùåì ýòàïå, òàê ÷òî äëÿ óâåëè÷åíèÿ çíà÷åíèÿ ïîòîêà äî M íåîáõîäèìî íå áîëåå
2
|V | 3 ôàç, ïîêà íå äîñòèãíåò Ì.

Àíëîãè÷íûì ñïîñîáîì ìîæíî ïîëó÷èòü è ñëåäóþùóþòåîðåìó.

Ïóñòü N = (G, c, s, t) - 0-1-ñåòü. Åñëè êàæäàÿ âåðøèíà v 6= s, t óäîâëåòâîðÿåò õîòÿ áû îäíîìó èç äâóõ óñëîâèé indeg(v) 6 1 è outdeg(v) 6 1, òî òîãäà
àëãîðèòì Äèíèöà ìîæíî èñïîëüçîâàòü äëÿ îïðåäåëåíèÿ ìàêñèìàëüíîãî 0-1-ïîòîêà íà
N ñî ñëîæíîñòüþ O(|V | |E|).
Òåîðåìà 4.75.

1
2

Òåïåðü ðàññìîòðèì îäíî êîìáèíàòîðíîå ïðèìåíåíèå ïîèñêà 0-1-ïîòîêà. Ïóñòü äàí
äâóäîëüíûé ãðàô G = (S t T, E), ìû èùåì ïàðîñî÷åòàíèå ìàêñèìàëüíîé ìîùíîñòü â
G. Ïîêàæåì, ÷òî ýòî ïðîáëåìà ýêâèâàëåíòíà íàõîæäåíèþ ìàêñèìàëüíîãî ïîòîêà 0-1 â
ñîîòâåòñòâóþùåé ñåòè ïîòîêà. Îïðåäåëèì îðãðàô H = (S ∪ T ∪ {s, t}, E ∪ Es ∪ Et ), ãäå
Es = {sx min x ∈ S}, Et = {yt | y ∈ T }.

Òåì ñàìûì ìû îïðåäåëÿåì 0-1-ñåòü N . Îòìåòèì, ÷òî ðåáðà xi yi (i = 1, ..., k) ïðîèçâîëüíîãî
ñîâïàäåíèÿ ìîùíîñòè k äëÿ G èíäóöèðóåò ïîòîê çíà÷åíèÿ k íà N : ïîëîæèì f (e) = 1 äëÿ
âñåõ ðåáåð e = sxi , e = xi yi è e = yi t (äëÿ i = 1, ..., k). È íàîáîðîò, 0-1-ïîòîê âåëè÷èíû k
äàåò ñîîòâåòñòâèå, ñîñòîÿùåå èç k ðåáåð: íàäî âûáðàòü k ðåáåð òèïà xy , êîòîðûå íà ñàìîì
äåëå ïåðåíîñÿò íåíóëåâîé ïîòîê.
Òîëüêî ÷òî îïèñàííîå ïðåîáðàçîâàíèå ïðîáëåìû ïðèâîäèò ê ýôôåêòèâíîìó àëãîðèòìó îïðåäåëåíèÿ ìàêñèìàëüíûõ ïàðîñî÷åòàíèÿ â äâóäîëüíûõ ãðàôàõ: êàê ìû âèäåëè
1
âûøå, ìàêñèìàëüíûé 0-1-ïîòîê íà N ìîæåò áûòü îïðåäåëåí ñî ñëîæíîñòüþ O(|V | 2 |E|).
5
Òàêèì îáðàçîì, ñëîæíîñòü íå ïðåâûøàåò O(|V | 2 ).

Âåðøèííàÿ è ðåáåðíàÿ ñâÿçíîñòè
 ýòîé ñåêöèè ãðàôû ïî óìîë÷àíèþ ñâÿçíû.
169

Ãðàôû è àëãîðèòìû

Îïðåäåëåíèå 4.76. Äâà ïóòè â ãðàôå áóäåì ðåáåðíî íåïåðñåêàþùèìèñÿ, åñëè ó íèõ íåò

íè îäíîãî îáùåãî ðåáðà, è
âåðøèíû.

Îïðåäåëåíèå 4.77.

âåðøèííî íåïåðåñåêàþùèìèñÿ, åñëè ó íèõ íåò íè îäíîé îáùåé

Ðåáåðíûé ðàçäåëèòåëü

âåðøèí u è v â ãðàôå G  ìíîæåñòâî ðåáåð,
óäàëåíèå êîòîðûõ íàðóøèò ëèíåéíóþ ñâÿçíîñòü u è v .
âåðøèí u
è v â ãðàôå G  ìíîæåñòâî âåðøèí, óäàëåíèå êîòîðûõ [âìåñòå ñ èíöèäåíòíûìè ðåáðàìè]
íàðóøèò ëèíåéíóþ ñâÿçíîñòü u è v .

Âåðøèííûé ðàçäåëèòåëü

Îïðåäåëåíèå 4.78. Ïóñòü G  ãðàô, à u 6= v  åãî âåðøèíû. Îïðåäåëèì λ(u, v) êàê

ìèíèìàëüíîå ÷èñëî ðåáåð, óäàëåíèå êîòîðûõ íàðóøèò ëèíåéíóþ ñâÿçíîñòü u è v . Òàêæå
îïðåäåëèì κ(u, v) êàê ìàêñèìàëüíîå ÷èñëî ðåáåðíî íåïåðåñåêàþùèõñÿ ïóòåé u è v .

Îïðåäåëåíèå 4.79.

Âåðøèííàÿ ñâÿçíîñòü λ(G) ãðàôà G îïðåäåëÿåòñÿ êàê
κ(G) = min κ(u, v)
u,v∈G

-âåðøèííî ñâÿçíûé, åñëè κ(G) > m.
Îïðåäåëåíèå 4.80. Ðåáåðíàÿ ñâÿçíîñòü λ(G) ãðàôà G îïðåäåëÿåòñÿ êàê

Ãðàô G m

λ(G) = min λ(u, v)
u,v∈G

-ðåáåðíî ñâÿçíûé, åñëè λ(G) > m.
Òåîðåìà 4.81. Ïóñòü G  ãðàô èëè îðãðàô. Òîãäà κ(G) 6 λ(G) 6 δ(G), ãäå δ(G) 
ìèíèìàëüíàÿ ñòåïåíü âåðøèíû â ãðàôå.
Ãðàô G m

Äîêàçàòåëüñòâî. Äîñòàòî÷íî ðàññìîòðåòü òîëüêî íåîðèåíòèðîâàííûé ñëó÷àé; îðèåíòèðîâàííûé ñëó÷àé ðàçáèðàåòñÿ àíàëîãè÷íî. Âîçüìåì âåðøèíó v ñ deg v = δ(G). Óäàëåíèå âñåõ ðåáåð, èíöèäåíòíûõ ñ v , äàåò íåñâÿçíûé ãðàô, òàê ÷òî λ(G) 6 δ(G). Åñëè
λ(G) = 1, G ñîäåðæèò ìîñò e = uv . Òîãäà G íå ìîæåò áûòü 2-ñâÿçíûì, ïîòîìó ÷òî óäàëåíèå u èç G äàåò ëèáî K1 , ëèáî íåñâÿçíûé ãðàô. Åñëè λ(G) = k > 2, òî ïóñòü {e1 , . . . ek } 
ìíîæåñòâî ðåáåð, êîòîðûå íàäî óäàëèòü, òîãäà óäàëåíèå k −1 ðåáðà 2 , . . . , ek â G ïðèâîäèò
ê ãðàôó H , ñîäåðæàùåìó ìîñò e1 = uv . Ïîýòîìó åñëè ìû óäàëèì èç G îäíó èç êîíå÷íûõ
âåðøèí êàæäîãî èç ei , îòëè÷íûõ îò u è v (äëÿ i = 2, . . . , k), ìû ïîëó÷àåì ëèáî íåñâÿçíûé
ãðàô, ëèáî ãðàô, ãäå e1 ÿâëÿåòñÿ ìîñòîì (òàê ãðàô áåç ýòîãî ðåáðà íåñâÿçåí). Â ëþáîì
ñëó÷àå κ(G) 6 k = λ(G).


Ïóñòü G  ãðàô èëè îðãðàô, s è t  äâå âåðøèíû ãðàôà G.
Òîãäà ìàêñèìàëüíîå ÷èñëî ðåáåðíî íåïåðåñåêàþùèåñÿ ïóòåé îò s äî t ðàâíî λ(u, v).
Òåîðåìà 4.82 (Menger).

Äîêàçàòåëüñòâî. Ïîëîæèì G îðãðàôîì. Ìîæíî ïðåäïîëîæèòü, ÷òî t äîñòèæèìà
èç s, â ïðîòèâíîì ñëó÷àå óòâåðæäåíèå òðèâèàëüíî. Ðàññìîòðèì ñåòü N íà G, ãäå êàæäîå

170

Ãðàôû è àëãîðèòìû

Ðèñ. 16.

Äëÿ ýòîãî ãðàôà κ(G) = 2, λ(G) = 3, δ(G) = 4.

ðåáðî èìååò åìêîñòü c(e) = 1, ïóñòü k  ìàêñèìàëüíîå ÷èñëî ðåáåðíî íåïåðåñåêàþùèõñÿ îðèåíòèðîâàííûõ ïóòåé îò s äî t. Î÷åâèäíî, ÷òî ëþáàÿ ñèñòåìà òàêèõ ïóòåé äàåò
0-1-ïîòîê f çíà÷åíèÿ k [f (e) = 1, åñëè e âñòðå÷àåòñÿ â îäíîì èç ïóòåé, è f (e) = 0 â ïðîòèâíîì ñëó÷àå]. Ñëåäîâàòåëüíî, ìàêñèìàëüíîå çíà÷åíèå ïîòîêà íà N  íåêîòîðîå öåëîå
÷èñëî k0 > k.  ñèëó òåîðåìû Ôîðäà-Ôàëêåðñîíà ìû ìîæåì ïîñòðîèòü ìàêñèìàëüíûé
öåëî÷èñëåííûé ïîòîê, èñïîëüçóÿ óâåëè÷èâàþùèå ïóòè ïðîïóñêíîé ñïîñîáíîñòè 1. Îáðàòèòå âíèìàíèå, ÷òî ýòè ïóòè íå îáÿçàòåëüíî îðèåíòèðîâàíû â îäíó ñòîðîíó  ìîãóò
âîçíèêíóòü îáðàòíûå ðåáðà. Òåì íå ìåíåå, âñåãäà ìîæíî íàéòè k óâåëè÷èâàþùèõ ïóòåé
áåç îáðàòíûõ ðåáåð: ïðåäïîëîæèì, ÷òî e = uv  îáðàòíîå ðåáðî, âñòðå÷àþùååñÿ íà ïóòè
W ; òîãäà äîëæåí ñóùåñòâîâàòü ïóòü W 0 , êîòîðûé áûë ïîñòðîåí äî W è ñîäåðæèò e â
êà÷åñòâå ïåðåäíåãî ðåáðà. Òàêèì îáðàçîì, ïóòè W è W 0 èìåþò âèä
W1

e

W2

W = s − v − u − t,

W10

e

W20

W0 = s − u − v − t

Òåïåðü ìû ìîæåì çàìåíèòü ïóòè W è W 0 íà ïóòè W1 W20 è W10 W2 , óñòðàíèâ òàêèì îáðàçîì ðåáðî . Ìû ìîæåì ïðåäïîëîæèòü, ÷òî ÿâëÿåòñÿ îáðàòíûì ðåáðîì äëÿ W , òîãäà
W1 , W20 è W10 ñîäåðæèò òîëüêî ïåðåäíèå ðåáðà (òîãäà êàêW2 âñå åùå ìîæåò ñîäåðæàòü
îáðàòíûå ðåáðà). Ïîâòîðÿÿ ýòó êîíñòðóêöèþ, ïîëó÷àåì k óâåëè÷èâàþùèõ ïóòåé èç s â t,
êîòîðûå ñîñòîÿò èç òîëüêî ïåðåäíèõ ðåáåð. Ëþáûå äâà óâåëè÷èâàþùèõ ïóòè, ñîñòîÿùèå
èç ïåðåäíèõ ðåáåð, äîëæíû áûòü ðåáðíî íåïåðåñåêàþùèìñÿ, òàê êàê âñå ðåáðà èìåþò
åäèíè÷íóþ âìåñòèìîñòü. Îòñþäà k0 6 k, è, ñëåäîâàòåëüíî, k0 = k.
Òàêèì îáðàçîì, ìàêñèìàëüíîå ÷èñëî ðåáåðíî íåïåðåñåêàþùèõñÿ ïóòåé èç s â t â
G ðàâíî ìàêñèìàëüíîìó çíà÷åíèþ ïîòîêà íà N è, ñëåäîâàòåëüíî, ïî òåîðåìå ÔîðäàÔàëêåðñîíà, ðàâíî ìîùíîñòè ìèíèìàëüíîãî ðàçðåçà â N . Îñòàëîñü ïîêàçàòü, ÷òî ìèíèìàëüíûé ðàçðåç â N èìååò ìîùíîñòü λ(u, v). Î÷åâèäíî, ÷òî ëþáîé ðàçðåç (S, T ) â N
171

Ãðàôû è àëãîðèòìû
çàäàåò ìíîæåñòâî ðåáåð, óäàëåíèå êîòîðûõ íàðóøàåò ñâÿçíîñòü s è t:
A = {e ∈ E | e− ∈ S, e+ ∈ T }

È íàîáîðîò, ïóñòü A  ìèíèìàëüíîå ìíîæåñòâî ðåáåð, ðàçäåëÿþùåå äëÿ s è t. Ïóñòü SA
 ìíîæåñòâî âåðøèí v , äîñòèæèìûõ èç s îðèåíòèðîâàííûì ïóòåì, íå ñîäåðæàùèì ðåáåð
èç A; ïîëîæèì TA = V \ SA . Òîãäà (SA , TA )  ðàçðåç â N . ßñíî, ÷òî êàæäîå ðåáðî e, äëÿ
êîòîðîãî e− ∈ SA è e+ ∈ TA äîëæíî ñîäåðæàòüñÿ â A. Òàê êàê A ìèíèìàëüíîå, A ñîñòîèò
èìåííî èç ýòèõ ðåáåð è ïîýòîìó èíäóöèðóåòñÿ ðàçðåçîì.
Òåïåðü ñâåäåì ñëó÷àé íåîðèåíòèðîâàííîãî ãðàôà ê îðèåíòèðîâàííîìó. Ïîñòðîèì ïî


ãðàôó G îðèåíòèðîâàííûé ãðàô G , îðèåíòèðîâàâ êàæäîå ðåáðî G â îáå ñòîðîíû (ïî
ðåáðó uv ãðàôà G ïîñòðîèì ðåáðà u → v è v → u). Î÷åâèäíî, ÷òî ñèñòåìà ðåáåðíî
íåïåðåñåêàþùèõñÿ ïóòåé â G èíäóöèðóåò ñîîòâåòñòâóþùóþ ñèñòåìó ðåáåðíî íåïåðåñåêà−

þùèõñÿ îðèåíòèðîâàííûõ ïóòåé â G . Îáðàòíîå òàêæå âåðíî ïðè óñëîâèè, ÷òî ðåáåðíî


íåïåðåñåêàþùèåñÿ îðèåíòèðîâàííûå ïóòè â G íå ñîäåðæàò ïàðû àíòèïàðàëëåëüíûõ ðåáåð. Íî òàêèå ïàðû ðåáåð ìîæíî óñòðàíèòü ñïîñîáîì, àíàëîãè÷íû óñòðàíåíèþ îáðàòíûõ
ðåáåð â ïåðâîé ÷àñòè äîêàçàòåëüñòâà.
Òåïåðü ïóñòü k  ìàêñèìàëüíîå ÷èñëî ðåáåðíûõ íåïåðåñåêàþùèõñÿ îðèåíòèðîâàí−



íûõ ðåáåð â G è, ñëåäîâàòåëüíî, òàêæå â G . Òîãäà ñóùåñòâóåò ðåáåðíûé ðàçäåëèòåëü A




â G ìîùíîñòè k [óäàëåíèå ðåáåð A íàðóøèò ñâÿçíîñòü s è t]; ñîîòâåòñòâóþùåå åìó ìíîæåñòâî ðåáåð â G ÿâëÿåòñÿ ðàçäåëèòåëåì äëÿ s è t â G ìîùíîñòè íå áîëåå k. Ïîñêîëüêó
ìèíèìàëüíàÿ ìîùíîñòü ðåáðà ðàçäåëèòåëÿ s è t äîëæåí áûòü íå ìåíüøå ìàêñèìàëüíîãî
÷èñëà íåïåðåñåêàþùèõñÿ ïóòåé îò s äî t, ïîëó÷àåì óòâåðæäåíèå.

2

Ìû âèäåëè ðàíüøå, ÷òî ìàêñèìàëüíûé 0-1-ïîòîê â 0-1 ñåòè ìîæåò íàéäåí çà O(|V | 3 |E|).
Òàêèì îáðàçîì, èç òåîðåìû Ìåíãåðà î÷åâèäíî ñëåäóåò

Ïóñòü G  ãðàô, u è v  äâå âåðøèíû G. Òîãäà λ(u, v) ìîæåò áûòü
îïðåäåëåíà ñî ñëîæíîñòüþ O(|V | |E|).

Òåîðåìà 4.83.

2
3

8

Íåòðóäíî âèäåòü, ÷òî âû÷èñëåíèå λ(G) ìîæíî îñóùåñòâèòü çà O(|V | 3 |E|)  ìîæíî
ïîñ÷èòàòü λ(u, v) äëÿ âñåõ ïàð u 6= v ∈ V . Îäíàêî ñëåäóþùåå óòâåðæäåíèå ïîìîãàåò
ïîíèçèòü ñëîæíîñòü.

Ëåììà 4.84.

ãäå v

n+1

= v1

.

Ïóñòü G = ({v , . . . v
1

n }, E)

 ãðàô èëè îðãðàô. Òîãäà

λ(G) = min{λ(vi , vi+1 ) | i ∈ {1, . . . , n}}

Äîêàçàòåëüñòâî. Ïóñòü u è v  âåðøèíû G, äëÿ êîòîðûõ λ(G) = λ(u, v), è T 
ðåáåðíûé ðàçäåëèòåëü ìîùíîñòè λ(u, v) äëÿ u è v . Ïóñòü X  ìíîæåñòâî âåðøèí w, äëÿ
êîòîðûõ ñóùåñòâóåò ïóòü (íàïðàâëåííûé, åñëè G  îðãðàô) îò u ê w, íå ñîäåðæàùèé

172

Ãðàôû è àëãîðèòìû
ðåáåð T . Ââåäåì Y  ìíîæåñòâî âåðøèí w, äëÿ êîòîðîãî êàæäûé ïóòü (íàïðàâëåííûé,
åñëè G  îðãðàô) îò u ê w ñîäåðæèò íåêîòîðîå ðåáðî èç T . Òîãäà (X, Y )  ðàçðåç G,
áîëåå òîãî, u ∈ X è v ∈ Y . Òåïåðü ÿâëÿåòñÿ ðåáåðíûì ðàçäåëèòåëåì x è y äëÿ êàæäîé
ïàðû âåðøèí x ∈ X è y ∈ Y  â ïðîòèâíîì ñëó÷àå ñóùåñòâîâàë áû ïóòü îò u äî y , íå
ñîäåðæàùèé ðåáåð èç T . Îòñþäà
|T | = λ(G) 6 λ(x, y) ∈6 |T |,

òî åñòü λ(x, y) = λ(G). Î÷åâèäíî, äëÿ íåêîòîðîãî i vi ∈ X è vi+1 ∈ Y , òîãäà λ(G) =
λ(vi , vi+1 ).

Îòñþäà ñëåäóåò, ÷òî λ(G) ãðàôà èëè îðãðàôà G ìîæåò áûòü îïðåäåëåíà ñî ñëîæíîñòüþ O(|V |5/3 |E|).
Óòâåðæäåíèå òåîðåìû Ìåíãåðà âåðíî è äëÿ âåðøèííîãî, è äëÿ ðåáåðíîãî ðàçäåëèòåëÿ.

Ïóñòü G  ãðàô èëè îðãðàô, à s è t  ëþáûå äâå íåñìåæíûå
âåðøèíû. Òîãäà ìàêñèìàëüíîå ÷èñëî âåðøèííî íåïåðåñåêàþùèõñÿ ïóòåé îò s äî t ðàâíî
ìèíèìàëüíîé ìîùíîñòè ðàçäåëèòåëÿ âåðøèí äëÿ s è t.

Òåîðåìà 4.85 (Menger).

Äîêàçàòåëüñòâî. Ñâåäåì äîêàçàòåëüñòâî ýòîãî óòâåðæäåíèÿ ê ðåáåðíîé âåðñèè
òåîðåìû Ìåíãåðà. Ïî ãðàôó G = (V, E) ñòðîèì ãðàô

G0 = {s, t} ∪ (V \ {s, t} × {0, 1}), Es ∪ Et ∪ E 0 ∪ EV

, ãäå
Es = {s(v, 0) | v ∈ V \ {s, t}},
EV = {(v, 0)(v, 1) | v ∈ V \ {s, t}},

Et = {(v, 1)t | v ∈ V \ {s, t}},
E 0 = {(u, 1)(v, 0) | uv ∈ E}

Ãðóáî ãîâîðÿ, ìû ðàçäåëÿåì êàæäóþ âåðøèíó, îòëè÷íóþ îò s è t, íà äâå ÷àñòè, ñîåäèíåííûå ðåáðîì; ýòî ïðèâåäåò ê òðàíñôîðìàöèè âåðøèííî íåïåðåñåêàþùèõñÿ ïóòåé â ðåáåðíî
íåïåðåñåêàþùèåñÿ ïóòè.
Ïî òåîðåìå Ìåíãåðà ìàêñèìàëüíîå ÷èñëî ðåáåðíî íåïåðåñåêàþùèõñÿ ïóòåé îò s äî t
â G ðàâíî ìèíèìàëüíîé ìîùíîñòè ðåáåðíîãî ðàçäåëèòåëÿ s è t, ñêàæåì, A. Êîíå÷íî, A
ìîæåò ñîäåðæàòü ðåáðà íå âèäà (v, 0)(v, 1), è â ýòîì ñëó÷àå íå íàïðÿìóþ ñîîòâåòñòâóåò
ðàçäåëèòåëþ âåðøèí â G. Îäíàêî åñëè íåêîòîðîå ðåáðî âèäà (u, 1)(v, 0) âõîäèò â A, ìû
ìîæåì çàìåíèòü åãî íà (u, 1)(u, 0) â A è ñíîâà ïîëó÷èòü ìèíèìàëüíûé ðåáåðíûé ðàçäåëèòåëü. .

Ñåòü, ïîñòðîåííàÿ â ïðîøëîé òåîðåìå, óäîâëåòâîðÿåò óñëîâèÿì òåîðåìû 4.75, à çíà÷èò, âåðíî ñëåäóþùåå óòâåðæäåíèå.
173

Ãðàôû è àëãîðèòìû

Óòâåðæäåíèå 4.86. Ïóñòü G  ãðàô èëè îðãðàô, à s è t  ëþáûå äâå íåñìåæíûå
âåðøèíû G. Òîãäà ìàêñèìàëüíîå ÷èñëî âåðøèííî íåïåðåñåêàþùèõñÿ ïóòåé îò s äî t 
è ñàìî ìíîæåñòâî òàêèõ ïóòåé  ìîæåò áûòü îïðåäåëåíî ñî ñëîæíîñòüþ O(|V | |E|).
1
2

Çàêîí÷èì ýòó ñåêöèþ àëãîðèòìîì, âû÷èñëÿþùèì κ(G).  àëãîðèòìå íèæå Pathnr(G, s, t)
 ïðîöåäóðà, âû÷èñëÿþùàÿ ìàêñèìàëüíîå ÷èñëî âåðøèííî íåïåðåñåêàþùèõñÿ ïóòåé îò
s äî t â ãðàôå G.
1: procedure Kappa(G = (V, E))
2:
n ← |V |, k ← 0, y ← n − 1, S ← V
3:
while k 6 y do
4:
âûáðàòü v ∈ S è óäàëèòü v èç S
5:
for w ∈ S \ Av do
6:
x = Pathnr(()G, v, w)
7:
y ← min{y, x}
8:
9:
10:
11:
12:

end for

k ←k+1

end while
return y
end procedure

Ïóñòü G = (V, E)  ñâÿçíûé ãðàô. Òîãäà Kappa êîððåêòíî âû÷èñëÿåò
ñî ñëîæíîñòüþ O(|V | |E| ).

Òåîðåìà 4.87.
κ(G)

1
2

2

Äîêàçàòåëüñòâî. Åñëè G = Kn , àëãîðèòì çàâåðøàåò ðàáîòó (ïîñëå óäàëåíèÿ âñåõ
n âåðøèí) ñ κ = y = n − 1. Òåïåðü äîïóñòèì, ÷òî G íå ïîëíûé. Âî âðåìÿ öèêëà while
âåðøèíû v1 , v2 , . . . , vk âûáèðàþòñÿ äî òåõ ïîð, ïîêà ìèíèìóì γ âñåõ çíà÷åíèé κ(vi , wi ) íå
ñòàíåò ìåíüøå k, ãäå wi ïðîáåãàåò âåðøèíû, íå ñìåæíûå ñ vi , òîãäà

k > γ + 1 > κ(G) + 1.

Ïî îïðåäåëåíèþ ñóùåñòâóåò âåðøèííûé ðàçäåëèòåëü T â G ìîùíîñòè κ(G). Ïîñêîëüêó
k > κ(G) + 1, ñóùåñòâóåò õîòÿ áû îäíà âåðøèíà vi ∈
/ . Ïîñêîëüêó G \ T íå ñâÿçíî;
ñëåäîâàòåëüíî, ñóùåñòâóåò âåðøèíà v â G \ T òàêàÿ, ÷òî êàæäûé ïóòü èç v ê vi ïðîõîäèò
÷åðåç T .  ÷àñòíîñòè, vi è v íå ìîãóò áûòü ñìåæíûìè; òàêèì îáðàçîì,
γ 6 κ(vi , v) 6 |T | = κ(G),

òàê ÷òî γ = κ(G). Òåì ñàìûì óñòàíîâëåíà êîððåêòíîñòü àëãîðèòìà. Ñëîæíîñòü àëãîðèò3
ìà, êàê íåòðóäíî çàìåòèòü, ðàâíà O(κ(G)|V | 2 |E|): âî âðåìÿ êàæäîé èç κ(G) èòåðàöèé
öèêëà while ïðîöåäóðà Pathnr âûçûâàåòñÿ O(|V |) ðàç, êàæäûé èç ýòèõ âûçîâîâ èìååò
174

Ãðàôû è àëãîðèòìû
1

ñëîæíîñòü O(|V | 2 |E|). Î÷åâèäíî κ(G) 6 deg v , òîãäà
κ(G) 6 min deg v 6 2
1

÷òî äàåò æåëàåìóþ ñëîæíîñòü O(|V | 2 |E|2 ).

|E|
,
|V |


175

×àñòü 5

Ýëåìåíòû òåîðèè ñëîæíîñòè

Ñî øêîëû êàæäîìó çíàêîìî èíòóèòèâíîå îïðåäåëåíèå àëãîðèòìà  ¾íàáîð èíñòðóêöèé, îïèñûâàþùèõ ïîðÿäîê äåéñòâèé èñïîëíèòåëÿ äëÿ äîñòèæåíèÿ íåêîòîðîãî ðåçóëüòàòà¿. Ñ÷èòàåòñÿ, ÷òî àëãîðèòì ïðèíèìàåò íà âõîä íåêîòîðûé
,
âûïîëíÿåò îïðåäåëåííóþ ïîñëåäîâàòåëüíîñòü äåéñòâèé è âîçâðàùàåò (åñëè îñòàíàâëèâàåòñÿ) íîâûé êîíñòðóêòèâíûé îáúåêò. Êîíñòðóêòèâíûé îáúåêò  òîò, äëÿ êîòîðîãî ñóùåñòâóåò êîíñòðóêòèâíûé ñïîñîá çàäàòü åãî, íàïðèìåð, íàòóðàëüíîå ÷èñëî, ìàòðèöà èëè
ãðàô.
Òàêîå ïîíÿòèå àëãîðèòìà äîâîëüíî ðàñïëûâ÷àòî è íå ïîçâîëÿåò êîíêðåòíî îòâåòèòü
íà òàêèå âîïðîñû:


Èíûìè ñëîâàìè, êàê ïîêàçàòü, ÷òî ëþáîé àëãîðèòì ðàçðåøàåò çàäà÷ó,
îòëè÷íóþ îò äàííîé?

Íåëüçÿ âû÷èñëèòü âðåìÿ ðàáîòû àëãîðèòìà, ïðîñòî ðàññìîòðåâ íåêîòîðóþ åãî ðåàëèçàöèþ (íàïðèìåð, íà ÿçûêå C), è ñëîæèâ êîëè÷åñòâà âûïîëåíèé êàæäîé îïåðàöèè. Êîìàíäû íå óíèòàðíû íè ïî âðåìåíè, íè ïî ðåñóðñîåìêîñòè, âðåìÿ âûïîëíåíèÿ îäíîé è òîé æå êîìàíäû ìîæåò áûòü ðàçíûì. Ëó÷øåå, ÷òî ìîæíî
ñäåëàòü â äàííîì ñëó÷àå  îöåíèòü (åñëè âîçìîæíî) âðåìÿ ðàáîòû êîìàíäû (â
õóäøåì ñëó÷àå) ñâåðõó íåêîòîðîé êîíñòàíòîé. Íî òóò âàæíî çíàòü, êàêèå îïåðàöèè ìû ñ÷èòàåì ýëåìåíòàðíûìè è ó êàêèõ îïåðàöèé âðåìÿ ìîæíî îöåíèòü
ñâåðõó êîíñòàíòîé (â ÷àñòíîñòè, ñëîæåíèå ÷èñåë íåëüçÿ a priori ñ÷èòàòü îïåðàöèåé, âûïîëÿíåìîé çà íå áîëåå ÷åì ïîñòîÿííîå âðåìÿ  åñëè ìû íå ñ÷èòàåì,
íàïðèìåð, ÷òî ñàìè ñëàãàåìûå îãðàíè÷åíû ñâåðõó).

Ñàìî ïî ñåáå ñóùåñòâîâàíèå íåêîòîðîãî àëãîðèòìà íå ãàðàíòèðóåò, ÷òî íåëüçÿ ïîñòðîèòü áîëåå áûñòðûé àëãîðèòì, ðàçðåøàþùèé òó æå
çàäà÷ó.
×åòêèå îòâåòû íà ýòè âîïðîñû òðåáóþò íàëè÷èÿ ëîãè÷åñêîãî ïîíÿòèÿ àëãîðèòìà.
Ïåðâûé âîïðîñ â ñïèñêå âûøå (Entschiedungsproblem, äîñëîâíî ¾ïðîáëåìà ðàçðåøèìîñòè¿) ñôîðìóëèðîâàë â 1928 ãîäó Ãèëüáåðò:
Ôîðìóëà ÷èñòîãî èñ÷èñëåíèÿ ïðåäèêàòîâ, ò. å. ôîðìóëà, â êîòîðîé íåò
íèêàêèõ èíäèâèäóàëüíûõ çíàêîâ, íàçûâàåòñÿ âûïîëíèìîé â íåêîòîðîé îáëàñòè èíäèâèäóóìîâ, åñëè ìîæíî çàìåíèòü ïåðåìåííûå âûñêàçûâàíèÿ çíà÷åíèÿìè ¾èñòèíà¿ è ¾ëîæü¿, ïåðåìåííûå ïðåäèêàòû 
êàêèìè-ëèáî ñïåöèàëüíûìè ïðåäèêàòàìè, îïðåäåëåííûìè â ñîîòâåòñòâóþùåé îáëàñòè èíäèâèäóóìîâ, è ñâîáîäíûå ïðåäìåòíûå ïåðåìåííûåèíäèâèäóàëüíûìè ïðåäìåòàìè òàêèì îáðàçîì, ÷òîáû ôîðìóëà
ïåðåøëà â èñòèííîå âûñêàçûâàíèå. Åñëè î íåêîòîðîé ôîðìóëå ãîâîðÿò

êîíñòðóêòèâíûé îáúåêò

ëþáàÿ ëè çàäà÷à ðàçðåøèìà àëãîðèòìè÷åñêè?
åñëè íåêîòîðàÿ çàäà÷à íå ðàçðåøàåòñÿ íèêàêèì àëãîðèòìîì, êàê ýòî äîêàçàòü?
êàê âû÷èñëèòü âðåìÿ, ñîâåðøåííûõ àëãîðèòìîì, èëè òðåáóåìóþ ïàìÿòü?

êàê ïîêàçàòü, ÷òî äàííàÿ çàäà÷à íå ìîæåò áûòü ðåøåíà òî÷íî çà îòíîñèòåëüíî ìàëîå âðåìÿ?

Ýëåìåíòû òåîðèè ñëîæíîñòè
ïðîñòî, ÷òî îíà âûïîëíèìà, òî ïðè ýòîì èìåþò â âèäó, ÷òî âîîáùå ñóùåñòâóåò îáëàñòü èíäèâèäóóìîâ, â êîòîðîé èìååò ìåñòî âûïîëíèìîñòü.
Åñëè ôîðìóëà A â êàêîé-íèáóäü îáëàñòè èíäèâèäóóìîâ íå îáùåçíà÷èìà, òî, î÷åâèäíî, A â ñîîòâåòñòâóþùåé îáëàñòè âûïîëíèìà, è íàîáîðîò. Àíàëîãè÷íî ïðîñòàÿ îáùåçíà÷èìîñòü ôîðìóëû A è âûïîëíèìîñòü
A íàõîäÿòñÿ â îòíîøåíèè óòâåðæäåíèÿ è îòðèöàíèÿ.
Îáå ïðîáëåìû îáùåçíà÷èìîñòè è âûïîëíèìîñòè, ýêâèâàëåíòíûå
äðóã äðóãó, íàçûâàþò òàêæå îáû÷íî îäíèì îáùèì èìåíåì: ïðîáëåìîé
ðàçðåøèìîñòè (Entscheidungsproblem) óçêîãî èñ÷èñëåíèÿ ïðåäèêàòîâ.
Íà îñíîâàíèè çàìå÷àíèé, ñäåëàííûõ ⠟ 11, ìû âïðàâå ñ÷èòàòü åå ãëàâíîé ïðîáëåìîé ìàòåìàòè÷åñêîé ëîãèêè.
Ä. Ãèëüáåðò, Â. Àêêåðìàí
[25]
ïåð. À. Åðîôååâ, Ì. ÈË, 1947
 1936 ãîäó Àëîíñî ×åð÷ è Àëàí Òüþðèíãà íåçàâèñèìî äðóã îò äðóãà äàëè îòðèöàòåëüíûé îòâåò íà ïðîáëåìó ðàçðåøèìîñòè Ãèëüáåðòà. Êàæäûé èç íèõ ïðèøåë ê òàêîìó âûâîäó, ïîñòðîèâ ñâîè
: ×åð÷ ïîñòðîèë â ðàáîòå [7] λ
,
îïðåäåëèë ýôôåêòèâíî âû÷èñëèìûå (eective calculable) ôóíêöèè è ïîêàçàë, ÷òî íå ñóùåñòâóåò ýôôåêòèâíî âû÷èñëèìîé ôóíêöèè, îïðåäåëÿþùåé ýêâèâàëåíòíîñòü äàííûõ λâûðàæåíèé. Òüþðèíã æå â ÷óòü áîëåå ïîçäíåé ðàáîòå [21] îïðåäåëèë
(èçâåñòíóþ ñåãîäíÿ êàê
) è ïîêàçàë, ÷òî
íå ñóùåñòâóåò ìàøèíû Òüþðèíãà, îïðåäåëÿþùåé ïî ëþáîé ìàøèíå Òüþðèíãà, îñòàíàâëèâàåòñÿ ëè îíà íà ïóñòîì âõîäå. Áîëåå òîãî, Òüþðèíã ïîêàçàë ýêâèâàëåíòíîñòü âû÷èñëèìîñòè, ââåäåííîé â [21], è ýôôåêòèâíîé âû÷èñëèìîñòè ×åð÷à.
Ìàøèíà Òüþðèíãà îêàçàëàñü óäîáíîé ìîäåëüþ âû÷èñëåíèé íå òîëüêî äëÿ îïðåäåëåíèÿ ïîíÿòèÿ àëãîðèòìà, íî òàêæå è äëÿ îïðåäåëåíèÿ
è
, ïîýòîìó íà íåé ìû îñòàíîâèìñÿ ïîäðîáíåå.

Îñíîâû òåîðåòè÷åñêîé ëîãèêè

ìîäåëè âû÷èñëåíèé

-àíàëèç

âû÷èñëèòåëüíóþ
(äåòåðìèíèðîâàííàÿ) ìàøèíà Òüþðèíãà

ìàøèíó

âðåìåííîé ïðîñòðàíñòâåííîé

ñëîæíîñòè

Ìàøèíà Òüþðèíãà. Ïðåæäå ÷åì ñôîðìóëèðîâàòü ïîíÿòèå ìàøèíû Òüþðèíãà,
ââåäåì ïàðó áàçîâûõ îïðåäåëåíèé.
Îïðåäåëåíèå 5.1.

Àëôàâèò

åñòü êîíå÷íîå ìíîæåñòâî, ïî óìîë÷àíèþ áóäåì îáîçíà÷àòü
åãî Σ = {a1 , . . . , aN }. Ýëåìåíòû àëôàâèòà ìû áóäåì íàçûâàòü
.

Ñëîâî

áóêâàìè

Îïðåäåëåíèå 5.2.
åñòü êîíå÷íàÿ ïîñëåäîâàòåëüíîñòü ñèìâîëîâ àëôàâèòà. Ïî
óìîë÷àíèþ ñëîâà ìû áóäåì îáîçíà÷àòü x, y, z, . . .. Ïîä w[i] ìû áóäåì â äàëüíåéøåì ïîäðàçóìåâàòü i-ûé ýëåìåíò ýòîé ïîñëåäîâàòåëüíîñòè, òî åñòü i-óþ áóêâó. Äëèíó ñëîâà w
ìû áóäåì îáîçíà÷àòü êàê |w|, à #x (w)  êîëè÷åñòâî âõîæäåíèé áóêâû x â w.
 îïðåäåëèì êàê ñëîâî íóëåâîé äëèíû.

ñòðî÷êó

Ïóñòóþ

Ïðèìåð 5.3. Íàä àëôàâèòîì {0, 1} ñëîâàìè ÿâëÿþòñÿ w1 = 0010 è w2 = 1010110. Â
ñëîâå w1 ðîâíî îäíà åäèíèöà, òî åñòü #1 (w1 ) = 1. Âî âòîðîì ñëîâå 7 áóêâ, òî åñòü |w2 | =
179

Ýëåìåíòû òåîðèè ñëîæíîñòè
7. Â îáîèõ ñëîâàõ îäèíàêîâàÿ òðåòüÿ áóêâà, òî åñòü w1 [3] = w2 [3]. Ïðè ýòîì w1 [5] íå
îïðåäåëåíà, òàê êàê |w1 | = 4.

Îïðåäåëåíèå 5.4. Ìíîæåñòâî âñåõ ñëîâ íàä àëôàâèòîì Σ = {a1 , . . . , aN } áóäåì îáîçíà-

ßçûê L åñòü ïîäìíîæåñòâî Σ .
Îïðåäåëåíèå 5.5. Ìàøèíà Òüþðèíãà (ñîêðàùåííî ÌÒ) (èëè íåäåòåðìèíèðîâàííàÿ ìàøèíà Òüþðèíãà, ÍÌÒ)  êîðòåæ (Q, Σ, ∆, #, `, q , F, δ), ãäå
• Q  êîíå÷íîå ìíîæåñòâî ñîñòîÿíèé;
÷àòü Σ∗ = {a1 , . . . , aN }∗ .



0

• Σ  âõîäíîé àëôàâèò, ∆ ⊃ Σ  àëôàâèò ÌÒ (êîíå÷íûé);
• # ∈ ∆ \ Σ  ïðîáåëüíûé ñèìâîë;
• q0 ∈ Q  ñòàðòîâîå ñîñòîÿíèå,
• F ⊂ Q  ôèíàëüíûå
ñîñòîÿíèÿ,


• δ ⊂ (Q \ F ) × ∆ × Q × ∆ × {−1, 0, 1}  îòíîøåíèå ïåðåõîäà
Ìàøèíà Òüþðèíãà (Q, Σ, ∆, #, `, q0 , F, δ) íàçûâàåòñÿ
, åñëè èç êàæäîãî ñîñòîÿíèÿ ïî êàæäîé áóêâå ñóùåñòâóåò íå áîëåå îäíîãî ïåðåõîäà:

äåòåðìèíèðîâàííîé

∀p ∈ Q, a ∈ ∆

|{q ∈ Q | ∃b ∈ ∆, i ∈ {−1, 0, 1} ((p, a), (q, b, i)) ∈ δ}| 6 1

Èíîãäà ìû áóäåì ñ÷èòàòü, ÷òî F = {qA , qR }, ãäå qA ⊂ Q  ñîñòîÿíèå
ñîñòîÿíèå
.

îòêëîíåíèÿ

ïðèíÿòèÿ, q

R

⊂Q

âõîäíîå ñëîâî

 íà÷àëüíûé ìîìåíò íà ëåíòå çàïèñàíî
(input) w ∈ Σ∗ , ìàøèíà íàõîäèòñÿ â ñîñòîÿíèè q0 è ãîëîâêà ðàñïîëîæåíà íàä ïðîáåëîì ïåðåä ïåðâûì ñèìâîëîì âõîäà.
Íà êàæäîì øàãå (òàêòå) ìàøèíà, íàõîäÿùàÿñÿ â ñîñòîÿíèè q íàä ñèìâîëîì a, îñóùåñòâëÿåò ïåðåõîä ïî ïðàâèëó δ : åñëè δ(q, a) = (p, b, i), òî ÌÒ çàïèñûâàåò â òåêóùóþ ÿ÷åéêó
ñèìâîë b âìåñòî a, ïåðåõîäèò â ñîñòîÿíèå p è çàòåì ñäâèãàåòñÿ â ñîîòâåòñòâèè ñ i: âëåâî,
åñëè i = −1, âïðàâî, åñëè i = +1, îñòàåòñÿ íà ìåñòå, åñëè i = 0. Ïåðåõîäîâ èç qA è qR íåò,
òî åñòü ÌÒ, îêàçàâøèñü â òàêèõ ñîñòîÿíèÿõ, ïðåêðàùàåò ðàáîòàòü.
Ìû áóäåì ãîâîðèòü, ÷òî ÌÒ M
w, åñëè M , ðàáîòàÿ íà
w, çàâåðøàåò ðàáîòó â îäíîì èç ñîñòîÿíèé F .  ñëó÷àå, åñëè F = {qA , qR }, ìû áóäåì
ãîâîðèòü, ÷òî ÌÒ M
w, åñëè M , ðàáîòàÿ íà w, äîñòèãàåò ñîñòîÿíèÿ qA ;
åñëè æå íà ñëîâå w ÌÒ M äîñòèãàåò ñîñòîÿíèÿ qR , áóäåì ãîâîðèòü, ÷òî M
w. Â ïðèíöèïå ìàøèíà Òüþðèíãà ìîæåò íå îñòàíàâëèâàòüñÿ íà ñëîâå  íàïðèìåð,
åñëè ïîïàäåò íà íåì â âå÷íûé öèêë.
 êîíöå ðàáîòû ÌÒ íà ëåíòå îñòàåòñÿ íåêîòîðîå ñëîâî f = f (w); áóäåì ãîâîðèòü, ÷òî
f (w) 
(output) ìàøèíû Òüþðèíãà, à ÌÒ
f (·).
Ôîðìàëüíî ðàáîòó ìàøèíû Òüþðèíãà ìîæíî îïèñàòü ñëåäóþùèì îáðàçîì.

îñòàíàâëèâàåòñÿ íà ñëîâå
ïðèíèìàåò ñëîâî

îòâåðãàåò

ñëîâî

âûõîä

Îïðåäåëåíèå 5.6.

âû÷èñëÿåò ôóíêöèþ

Êîíôèãóðàöèÿ ÌÒ  ýëåìåíò ìíîæåñòâà Q × ∆



× ∆ × ∆∗ .

ÏÈÊ×À! Ýëåìåíòû êîíôèãóðàöèè (q, w1 , a, w2 ) ìû èíòåðïðåòèðóåì ñëåäóþùèì îáðàçîì: q  ñîñòîÿíèå, â êîòîðîì íàõîäèòñÿ ìàøèíà, w1  ñëîâî, íàõîäÿùååñÿ ñëåâà îò
180

Ýëåìåíòû òåîðèè ñëîæíîñòè
ãîëîâêè, a  áóêâà, íà êîòîðóþ óêàçûâàåò ãîëîâêà, w2  ñëîâî, íàõîäÿùååñÿ ñïðàâà îò
ãîëîâêè.

Îïðåäåëåíèå 5.7. Äëÿ ìàøèíû Òüþðèíãà M = (Q, Σ, ∆, #, q0 , F, δ) îïðåäåëèì îòíîøåíèå `⊂ (Q × ∆∗ × ∆ × ∆∗ )2 :

• åñëè ((p, a), (q, b, 0)) ∈ δ , òî (p, w1 , a, w2 ) `∗ (q, w1 , b, w2 ) äëÿ ëþáûõ w1 , w2 ∈ ∆∗ ;
• åñëè ((p, a), (q, b, −1)) ∈ δ , òî (p, w1 c, a, w2 ) `∗ (q, w1 , c, bw2 ) è (p, , a, w2 ) `∗
(q, , #, bw2 ) äëÿ ëþáûõ w1 , w2 ∈ ∆∗ è c ∈ ∆;
• åñëè ((p, a), (q, b, 1)) ∈ δ , òî (p, w1 , a, cw2 ) `∗ (q, w1 b, c, w2 ) è (p, w1 , a, ) `∗ (q, w1 b, #, )
äëÿ ëþáûõ w1 , w2 ∈ ∆∗ è c ∈ ∆;

Îòíîøåíèå `∗ ⊂ (Q × ∆∗ × ∆ × ∆∗ )2 îïðåäåëèì êàê ðåôëåêñèâíîå è òðàíçèòèâíîå çàìûêàíèå `.

Îïðåäåëåíèå 5.8. Áóäåì ãîâîðèòü, ÷òî ìàøèíà Òüþðèíãà M = (Q, Σ, ∆, #, q0 , qA , qR , δ)

ïðèíèìàåò ñëîâî w, åñëè (q , , #, w) `

(qA , #n , #, #m ) äëÿ íåêîòîðûõ m, n ∈ N. Àíàëîãè÷íî áóäåì ãîâîðèòü, ÷òî ìàøèíà Òüþðèíãà M
ñëîâî w, åñëè (q0 , , #, w) `∗
n
m
(qR , # , #, # ) äëÿ íåêîòîðûõ m, n ∈ N.
0

Îïðåäåëåíèå 5.9.

ßçûê



îòâåðãàåò

ìàøèíû Òüþðèíãà M  ìíîæåñòâî ñëîâ, ïðèíèìàåìûõ
ðàçðåøàåò L, åñëè îíà ïðèíèìàåò ëþáîå

L(M )
M . Áóäåì ãîâîðèòü, ÷òî ìàøèíà Òüþðèíãà M
ñëîâî èç L è îòâåðãàåò ëþáîå ñëîâî èç Σ∗ \ L.

Ïðèìåð 5.10. Ïîñòðîèì ÌÒ, êîòîðàÿ ðàñïîçíàåò ñëîâà èç àëôàâèòà Σ = {a, b, c}, â
êîòîðûõ ðàâíîå êîëè÷åñòâî áóêâ a è b (ÿçûê L= ). Îíà áóäåò èñêàòü êàæäîìó ñèìâîëó a
èëè b ïàðíûé ñèìâîë, êîòîðûé åùå íå çàíÿò, è ñòàâèòü íà íèõ ìåòêè, ÷òî îíè çàíÿòû. Åñëè
êàêîìó-òî ñèìâîëó íå íàøëîñü ïàðíîãî, òî ìàøèíà îòâåðãàåò ñëîâî, à åñëè îíà äîøëà äî
êîíöà âõîäà, è âñå ñèìâîëû ñïàðåíû, òî ïðèíèìàåò ñëîâî.
• ∆ = {a, b, c, â, b̂, ã, b̃};
• Q = {q0 , qa , qb , q1 , qA , qR }, F = {qA , qR };

181

Ýëåìåíòû òåîðèè ñëîæíîñòè
• ôóíêöèÿ ïåðåõîäà:
δ(q0 , a) = (qb , â, +1);
δ(q0 , b) = (qa , b̂, +1);
δ(q0 , ∆) = (q0 , ∆, +1), ∆ 6= a, b, #;
δ(q0 , #) = (qA , #, 0);
δ(qα , α) = (q1 , α̃, −1), α ∈ {a, b};
δ(qα , β) = (qα , β, +1), β 6= α, #;
δ(qα , #) = (qR , #, 0);
δ(q1 , ∆) = (q1 , ∆, −1), ∆ 6= â, b̂;
δ(q1 , α̂) = (q0 , α̂, +1).

Ïî÷åìó ýòà ÌÒ êîððåêòíà? Ïóñòü íà êàêîì-òî øàãå îíà íàõîäèòñÿ â êîíôèãóðàöèè
âèäà u [q0 ] avαbw, ãäå â ñëîâå vα íåò ñèìâîëà b, è â ñëîâå avαbw ñïðàâà îò ãîëîâêè íåò
ñèìâîëà ñ ìåòêîé ˆ. Òîãäà
u [q0 ] avαbw ` uâ [qb ] vαbw `∗ uâvα [qb ] bw ` uâv [q1 ] αb̃w `∗ `∗ u [q1 ] âvαb̃w ` uâ [q1 ] vαb̃w.

Òî åñòü, çà îäèí òàêîé öèêëà ÌÒ íàõîäèò îäíó ïàðó ñèìâîëîâ a, b, ñòàâèò íà íèõ ìåòêè,
è ñäâèãàåòñÿ íà îäèí øàã âïðàâî. Åñëè ÌÒ íàõîäèòñÿ â êîíôèãóðàöèè âèäà u [q0 ] av , ãäå
â ñëîâå v íåò ñèìâîëà b, òî
u [q0 ] av ` uâ [qb ] v `∗ uâv [qb ] ` uâv [qR ],

è ìàøèíà îòâåðãàåò âõîäíîå ñëîâî. Â òî æå âðåìÿ, èç êîíôèãóðàöèè u [q0 ] v , ãäå â ñëîâå
v íåò ñèìâîëîâ a è b, ìàøèíà ïåðåõîäèò â ñîñòîÿíèå qA :
u [q0 ] v `∗ uv [q0 ] ` uv [qA ].

Îñòàâøèåñÿ ñëó÷àè ðàçáèðàþòñÿ àíàëîãè÷íî, è îòñþäà ìû âèäèì, ÷òî ïîñòðîåííàÿ ÌÒ
ðàçðåøàåò ÿçûê L= .
Ìîæíî ïîñòðîèòü òàêæå ÌÒ ñ áåñêîíå÷íîé â îáå ñòîðîíû ëåíòîé, ÌÒ ñ ìíîãèìè
ëåíòàìè (íà êàæäîé èç êîòîðûõ ðàáîòàåò îòäåëüíàÿ ãîëîâêà, à ïðè ïåðåõîäå íåñêîëüêî
ãîëîâîê ìîãóò ïåðåäâèãàòüñÿ îäíîâðåìåííî). Òàêèå êîíñòðóêöèè ýêâèâàëåíòíû îïðåäåëåííîé íàìè ÌÒ: ÿçûê L ïðèíèìàåòñÿ ÌÒ òèòòê L ïðèíèìàåòñÿ ÌÒ ñ áåñêîíå÷íîé â îáå
ñòîðîíû ëåíòîé (èëè ñî ìíîãèìè ëåíòàìè). Äîêàçàòåëüñòâî ìîæíî ïðî÷èòàòü, íàïðèìåð,
â [kozen].
Ìîæåò ïîêàçàòüñÿ, ÷òî ÌÒ  î÷åíü ñëàáàÿ ìîäåëü âû÷èñëåíèé. Íî íà ìàøèíå Òüþðèíãà ìîæíî, íàïðèìåð, ðåàëèçîâàòü ñëîæåíèå è óìíîæåíèå ÷èñåë, çàïèñàííûõ â äâîè÷íîé çàïèñè (ïîäóìàéòå, êàê!), êîïèðîâàíèå ñëîâ, ñðàâíåíèå è ò.ä. Áîëåå òîãî, òåçèñ Òüþðèíãà (∼òåçèñ ×åð÷à, ×åð÷à-Òüþðèíãà, Ïîñòà) óòâåðæäàåò, ÷òî ëþáîé àëãîðèòì ìîæíî
182

Ýëåìåíòû òåîðèè ñëîæíîñòè
ðåàëèçîâàòü íà ìàøèíå Òüþðèíãà.  òåîðèè âû÷èñëåíèé ýòî ïðèíèìàåòñÿ êàê ïîñòóëàò,
ëèáî âîîáùå êàê îïðåäåëåíèå àëãîðèòìà. Ýòîò òåçèñ îáîñíîâûâàåòñÿ òåì ôàêòîì, ÷òî
ïîêà íåèçâåñòíî íè îäíîãî àëãîðèòìà, êîòîðûé
áûëî áû ðåàëèçîâàòü ñ ïîìîùüþ
íåêîòîðîé ÌÒ.
 ñåòòèíãå ìàøèíû Òüþðèíãà ìîæíî ôîðìàëüíî îïðåäåëèòü íå òîëüêî àëãîðèòì, íî
òàêæå âðåìÿ ðàáîòû àëãîðèòìà è åãî ðåñóðñîåìêîñòü.
 ñëåäóþùèõ äâóõ îïðåäåëåíèÿõ ñ÷èòàåì, ÷òî ìàøèíà Òüþðèíãà M îñòàíàâëèâàåòñÿ
íà ñëîâå w.

íåëüçÿ

Îïðåäåëåíèå 5.11.

Âðåìÿ ðàáîòû

timeM (w) ìàøèíû Òüþðèíãà M íà ñëîâå w  äëèíà
êîððåêòíîãî âû÷èñëåíèÿ, íà÷èíàþùåãîñÿ ñ êîíôèãóðàöèè (q, , , w).
(time demand) ìàøèíû Òüþðèíãà M  ôóíêöèÿ timeM (n) : N → N, îïðåäåëåííàÿ
ñëåäóþùåé ôîðìóëîé:

Âðåìåííàÿ ñëîæ-

íîñòü

timeM (n) = sup timeM (w)
w∈Σn

Îïðåäåëåíèå 5.12.

Êîëè÷åñòâî ïàìÿòè

spaceM (w), èñïîëüçîâàííîå ìàøèíîé Òüþðèíãà M ïðè ðàáîòå íà ñëîâå w  êîëè÷åñòâî çàäåéñòâîâàííûõ â êîððåêòíîì âû÷èñëåíèè,
íà÷èíàþùåãîñÿ ñ êîíôèãóðàöèè (q, , , w).
(space demand) ìàøèíû Òüþðèíãà M  ôóíêöèÿ spaceM (n) : N → N, îïðåäåëåííàÿ ñëåäóþùåé ôîðìóëîé:

Ðåñóðñîåìêîñòü

spaceM (n) = sup spaceM (w)
w∈Σn

Êàê ïðàâèëî íà ïðàêòèêå ïðîùå îöåíèòü àñèìïòîòè÷åñêîå ïîâåäåíèå ôóíêöèé timeM (n)
è spaceM (n), à ñàìè ýòè ôóíêöèè âû÷èñëÿòü î÷åíü òðóäíî.
Çàêîí÷èì ïàðîé ïîñëåäíèõ îïðåäåëåíèé.

Îïðåäåëåíèå 5.13. Ïóñòü çàôèêñèðîâàí àëôàâèò Σ. Ñêàæåì, ÷òî L ∈ DTIME(f (n)),

åñëè äëÿ ëþáîãî w ∈ Σ∗ ÷èñëî øàãîâ, êîòîðûå äåëàåò T íà âõîäå w, íå ïðåâûøàåò f (|w|). Äåòåðìèíèðîâàííàÿ ìàøèíà Òüþðèíãà T íàçûâàåòñÿ
, åñëè
L(T ) ∈ DTIME(p(n)) äëÿ íåêîòîðîãî ìíîãî÷ëåíà p(x) ∈ Q[x].

ïîëèíîìèàëüíîé

Îïðåäåëåíèå 5.14. ßçûê L ⊂ Σ∗ èìååò

ïîëèíîìèàëüíóþ ñëîæíîñòü

, åñëè îí ìîæåò
áûòü ðàçðåøåí ïîëèíîìèàëüíîé äåòåðìèíèðîâàííîé ìàøèíîé Òüþðèíãà. Êëàññ ÿçûêîâ,
èìåþùèõ ïîëèíîìèàëüíóþ ñëîæíîñòü, áóäåì îáîçíà÷àòü PTIME, èëè æå ïðîñòî P. Ãîâîðÿ èíà÷å,
[
P=
DTIME(O(nk ))
k>0

Îïðåäåëåíèå 5.15. Ïóñòü çàôèêñèðîâàí àëôàâèò Σ. ßçûê L ⊂ Σ∗ ïðèíàäëåæèò NTIME(f (n
åñëè äëÿ ëþáîãî ñëîâà w ∈ L ñóùåñòâóåò êîððåêòíîå âû÷èñëåíèå äëèíû íå áîëåå f (n). Ìû
183

Ýëåìåíòû òåîðèè ñëîæíîñòè
ãîâîðèì, ÷òî L ∈ NP, åñëè L ∈ NTIME(p(n)) äëÿ íåêîòîðîãî ìíîãî÷ëåíà p(x) ∈ Q[x];
èíûìè ñëîâàìè,
[
NP =
NTIME(O(nk ))
k>0

Àëüòåðíàòèâíîå îïðåäåëåíèå êëàññà NP (êîòîðûì ìû áóäåì ïîëüçîâàòüñÿ ãîðàçäî
÷àùå) òàêîå:

Îïðåäåëåíèå 5.16. Áóäåì ãîâîðèòü, ÷òî L ∈ NTIME(p(n)), åñëè ñóùåñòâóåò âû÷èñëèìûé çà ïîëèíîìèàëüíîå îò äëèíû àðãóìåíòîâ âðåìÿ ïðåäèêàò R(·, ·) : Σ∗ × Σ∗ → {0, 1}
òàêîé, ÷òî
x ∈ L ⇐⇒ ∃y ∈ Σ∗

(|y| 6 p(|x|)) ∧ (R(x, y))

Ñëîâî y ∈ Σ â ïðàâîé ÷àñòè ðàâåíñòâà âûøå íàçûâàåòñÿ


ñåðòèôèêàòîì ñëîâà x.

Ïî÷åìó ýòè îïðåäåëåíèÿ ýêâèâàëåíòíû? Ïóñòü L ïðèíèìàåòñÿ íåêîòîðîé ÍÌÒ M çà
ïîëèíîìèàëüíîå âðåìÿ. Èìåÿ ïîñëåäîâàòåëüíîñòü ïåðåõîäîâ ÍÌÒ y ìîæíî ýìóëèðîâàòü
åå ðàáîòó íà âõîäå x (òàêæå çà ïîëèíîìèàëüíîå âðåìÿ). Òîãäà ìîæíî ðàññìîòðåòü ïðåäèêàò R(x, y), êîòîðûé ðàâåí 1, åñëè y ÿâëÿåòñÿ êîððåêòíîé ïîñëåäîâàòåëüíîñòüþ øàãîâ äëÿ
M íà âõîäå x, è ïîñëå åå èñïîëíåíèÿ ìàøèíà îñòàíàâëèâàåòñÿ â ñîñòîÿíèè qA , è ðàâåí 0
èíà÷å. Êàê íåñëîæíî âèäåòü, x ∈ L òîëüêî åñëè ñóùåñòâóåò ñîîòâåòñòâóþùèé ¾ñåðòèôèêàò¿ y . Òåïåðü äîêàæåì óòâåðæäåíèå â îáðàòíóþ ñòîðîíó. Ïîñòðîèì ÍÌÒ M 0 , êîòîðàÿ
ñíà÷àëà ãåíåðèðóåò ïðîèçâîëüíóþ ïîñëåäîâàòåëüíîñòü y äëèíû íå áîëüøå P (|x|), à çàòåì
âû÷èñëÿåò çíà÷åíèå R(x, y). Î÷åâèäíî, îíà óäîâëåòâîðÿåò âñåì íåîáõîäèìûì óñëîâèÿì.
Ðàçíûå çàäà÷è ìîæíî òàêæå ñâîäèòü äðóã ê äðóãó. Ìû çàèíòåðåñîâàíû â àíàëèçå ñ
ó÷åòîì ñëîæíîñòè âû÷èñëåíèé, ïîýòîìó áóäåì ðàññìàòðèâàòü ïîëèíîìèàëüíûå ñâîäèìîñòè.

ïîëèíîìèàëüíî ñâîäèòñÿ
ê L , åñëè ñóùåñòâóåò âû÷èñëèìàÿ âñþäó îïðåäåëåííàÿ ôóíêöèÿ f : Σ → Γ òàêàÿ, ÷òî

Îïðåäåëåíèå 5.17. Ïóñòü L1 ⊂ Σ∗ , L2 ⊂ Γ∗ , ãîâîðèì, ÷òî L1
2

∀x ∈ Σ∗





x ∈ L1 ⇐⇒ f (x) ∈ L2

Âûðàæåíèå L1 6p L2 ïîíèìàåòñÿ êàê ¾L1 p-ñâîäèòñÿ ê L2 ¿.
Åñëè L1 6p L2 è ìàøèíà Òüþðèíãà Alg ðàçðåøàåò L2 , òî Alg ◦ f ðàçðåøàåò L1 :
Alg(f (x)) = YES òèòòê f (x) ∈ L2 , ÷òî â ñâîþ î÷åðåäü ýêâèâàëåíòíî x ∈ L1 . Îòñþäà
ñëåäóåò, íàïðèìåð, ÷òî
L2 ∈ NP ⇒ L1 ∈ NP,

L2 ∈ P ⇒ L1 ∈ P,

L1 ∈
/ P ⇒ L2 ∈
/P

Îïðåäåëåíèå 5.18. ßçûê L ÿâëÿåòñÿ NP-ïîëíûì, åñëè L ∈ NP è äëÿ ëþáîãî A ∈ NP
èìååò ìåñòî ñâîäèìîñòü A 6p L.

Ïîäðîáíîñòè ïðî êëàññû P è NP, à òàêæå ïðî ïîëèíîìèàëüíóþ ñâîäèìîñòü ìîæíî
ïðî÷èòàòü â ïðèëîæåíèè, à òàêæå â [11, 27, 3, 33, 30].
184

Ýëåìåíòû òåîðèè ñëîæíîñòè

RAM. Òåïåðü ìû ïåðåéäåì ê äðóãîé ìîäåëè âû÷èñëåíèé, áîëåå áëèçêîé ê ðåàëüíûì êîìïüþòåðàì. Ýòî ìàøèíà ñ íåîãðàíè÷åííûìè ðåãèñòðàìè, èëè RAM (random access
machine).
Îïðåäåëåíèå 5.19.

Ìàøèíà ñ íåîãðàíè÷åííûìè ðåãèñòðàìè

(RAM)  íàáîð èç áåñêîíå÷íîé ïîñëåäîâàòåëüíîñòè ðåãèñòðîâ x[0], x[1], . . . , ñîäåðæàùèõ íàòóðàëüíûõ ÷èñåë, è
êîíå÷íîé ïîñëåäîâàòåëüíîñòè êîìàíä ci âèäà
• Z(n) : x[n] ← 0 (ðåãèñòð x[n] îáíóëÿåòñÿ);
• S(n) : x[n] ← x[n] + 1 (çíà÷åíèå ðåãèñòðà x[n] óâåëè÷èâàåòñÿ íà åäèíèöó);
• T (m, n) : x[n] ← x[m] (ðåãèñòðó x[n] ïðèñâàåâàåòñÿ çíà÷åíèå ðåãèñòðà x[m]);
• J(m, n, k): åñëè x[n] = x[m], òî âûïîëíÿåòñÿ êîìàíäà ck , èíà÷å èñïîëíÿåòñÿ ñëåäóþùàÿ â ïîñëåäîâàòåëüíîñòè êîìàíäà
Âàæíàÿ îñîáåííîñòü  êîìàíäû, êîòîðûå äàþò âîçìîæíîñòü îáðàùàòüñÿ ê ïðîèçâîëüíîé ÿ÷åéêå ïàìÿòè ïî åå
çà êîíñòàíòíîå âðåìÿ. Èç-çà ýòîãî ñâîéñòâà ìîäåëü
è íàçûâàåòñÿ
machine. Êîìàíäû RAM âûïîëíÿþòñÿ ïî ïîðÿäêó. Åñëè ñëåäóþùóþ êîìàíäó íåëüçÿ âûïîëíèòü, òî RAM ïðåêðàùàåò ñâîþ ðàáîòó. (Ýòî ïðîèñõîäèò
ëèáî ïîñëå âûïîëíåíèÿ ïîñëåäíåé êîìàíäû â ïîñëåäîâàòåëüíîñòè êîìàíä RAM, ëèáî ïîñëå ïåðåõîäà âèäà J(m, n, k), ãäå k ïðåâûøàåò ñóììàðíîå ÷èñëî êîìàíä RAM).

random access

àäðåñó

Îïðåäåëåíèå 5.20. Áóäåì ãîâîðèòü, ÷òî RAM M
íà âõîäíîì íàáîðå çíà÷åíèé ðåãèñòðîâ

(
x[i] =

ai+1 ,
0,

âû÷èñëÿåò ôóíêöèþ f : N

k

→ N, åñëè

ik

RAM ñîâåðøàåò êîíå÷íîå ÷èñëî øàãîâ, à ïîñëå ïîñëåäíåãî øàãà x[0] = f (a1 , . . . ak ).
Íåòðóäíî óáåäèòüñÿ â òîì, ÷òî íà RAM ìîæíî ðåàëèçîâàòü ýëåìåíòàðíóþ àðèôìåòèêó.

Îïðåäåëåíèå 5.21. Ðàññìîòðèì ñëåäóþùóþ RAM:
(1) J(1, 2, 5)
(2) S(0)
(3) S(2)
(4) J(1, 1, 1)
Óáåäèìñÿ â òîì, ÷òî ýòà RAM âû÷èñëÿåò f : (a, b) → a + b. Êîìàíäû 1 è 4 îáðàçóþò öèêë
 ïîñêîëüêó x[1] = x[1], òî âñåãäà áóäåò îñóùåñòâëÿòüñÿ ïåðåõîä ê ïåðâîé êîìàíäå; RAM
ïðåêðàòèò ðàáîòó òîëüêî ïîñëå ïåðåõîäà ê ïÿòîé êîìàíäå, åñëè x[1] = x[2]. Çà êàæäûé
ïðîõîä öèêëà çíà÷åíèÿ x[1] è x[2] óâåëè÷èâàþòñÿ íà åäèíèöó, è ê ìîìåíòó âûïîëíåíèÿ
ïåðâîé êîìàíäû x[0] = a + n, x[1] = b, x[2] = n. Ñëåäîâàòåëüíî, RAM îñòàíîâèòñÿ òèòòê
x[1] = x[2] = b, â ýòîò ìîìåíò x[0] = a + b.
185

Ýëåìåíòû òåîðèè ñëîæíîñòè

Îïðåäåëåíèå 5.22. Ðàññìîòðèì ñëåäóþùóþ RAM:
(1) J(0, 2, 5)
(2) J(1, 2, 6)
(3) S(2)
(4) J(1, 1, 1)
(5) T (1, 0)
Óáåäèìñÿ â òîì, ÷òî ýòà RAM âû÷èñëÿåò f : (a, b) → max(a, b). RAM èçìåíÿåò çíà÷åíèå
òîëüêî òðåòüåãî ðåãèñòðà. Åñëè x[2] 6= x[0] è x[2] 6= x[1], òî òðåòüÿ ñòðî÷êà âûïîëíÿåòñÿ è
x[2] óâåëè÷èâàåòñÿ íà åäèíèöó, ïîñëå ÷åãî RAM ñíîâà âîçâðàùàåòñÿ ê èñïîëíåíèþ ïåðâîé
êîìàíäû. Åñëè a 6 b, òî ñðåäè çíà÷åíèé x[2] ðàíüøå âñòðåòèòñÿ a, òîãäà ñîâåðøàåòñÿ
ïåðåõîä ê êîìàíäå T (2, 0), ïîñëå ÷åãî RAM çàâåðøàåò ðàáîòó è x[0] = b = max(a, b).
Åñëè a < b, òî b âñòðåòèòñÿ ðàíüøå ñðåäè çíà÷åíèé x[2], è òîãäà RAM, âûïîëíÿÿ âòîðóþ
êîìàíäó, ïåðåéäåò íà øåñòóþ ñòðî÷êó è çàâåðøèò òåì ñàìûì ðàáîòó; òîãäà x[0] = a =
max(a, b).

Îïðåäåëåíèå 5.23. Ðàññìîòðèì ñëåäóþùóþ RAM:
(1) J(0, 2, 9)
(2) J(1, 3, 5)
(3) S(3)
(4) S(4)
(5) J(1, 1, 1)
(6) Z(3)
(7) S(2)
(8) J(1, 1, 1)
(9) T (4, 0)
Óáåäèìñÿ â òîì, ÷òî ýòà RAM âû÷èñëÿåò f : (a, b) → ab. Íåòðóäíî óáåäèòüñÿ, ÷òî â ëþáîé
ìîìåíò äî âûïîëíåíèÿ äåâÿòîé êîìàíäû x[0] = a, x[1] = b, x[2] = i, x[3] = j , x[4] =
b(i − 1) + j . Âûõîä èç áîëüøîãî öèêëà (ñ 1 ïî 8 êîìàíäó) ñîâåðøàåòñÿ òèòòê x[2] = a, â
ýòîò ìîìåíò x[4] = b(a − 1) + b = ab.
Ðåàëèçàöèþ äåëåíèÿ ñ îñòàòêîì, âû÷èñëåíèÿ ÍÎÄà è ÍÎÊà è ïðî÷åé àðèôìåòèêè
îñòàâèì êàê óïðàæíåíèå.
RAM è ìàøèíà Òüþðèíãà  ýêâèâàëåíòíûå ìîäåëè, èõ ìîæíî ìîäåëèðîâàòü äðóã íà
äðóãå. Íàïðèìåð, ÷òîáû ñìîäåëèðîâàòü ÌÒ íà RAM, äîñòàòî÷íî õðàíèòü â ÿ÷åéêå x[i]
÷èñëî 0 èëè 1, ñîîòâåòñòâóþùåå ñèìâîëó â ÿ÷åéêå ëåíòû ÌÒ, è â âûäåëåííîì ðåãèñòðå
õðàíèòü ïîëîæåíèå ãîëîâêè. Ïåðåõîäû ÌÒ, î÷åâèäíî, ëåãêî ñìîäåëèðîâàòü íà RAM. Â
òî æå âðåìÿ, ÌÒ ìîæåò õðàíèòü öåëûå ÷èñëà è âûïîëíÿòü àðèôìåòè÷åñêèå îïåðàöèè,
ïîýòîì íà íåé ìîæíî ìîäåëèðîâàòü RAM.
×òîáû îïðåäåëèòü âðåìÿ ðàáîòû RAM, íóæíî ïðèñâîèòü êàæäîé êîìàíäå îïðåäåëåííîå âðåìÿ âûïîëíåíèÿ, âåñ. Òîãäà âðåìÿ ðàáîòû t(x) åñòü ñóììà âðåìåíè âûïîëíåíèÿ
186

Ýëåìåíòû òåîðèè ñëîæíîñòè
âñåõ êîìàíä, èñïîëíÿâøèõñÿ RAM. Ñóùåñòâóþò ðàçëè÷íûå ñïîñîáû ýòî ñäåëàòü. Íàïðèìåð, ìîæíî ïðèñâîèòü âñåì êîìàíäàì îäèíàêîâîå âðåìÿ âûïîëíåíèÿ  òîãäà ìû ïîëó÷èì
. Åãî ðàçóìíî ïðèìåíÿòü, åñëè ìû ñ÷èòàåì, ÷òî â õîäå ðàáîòû ïðîãðàììû íå áóäóò âîçíèêàòü ñëèøêîì áîëüøèå ÷èñëà. Íàïðèìåð, ìû àíàëèçèðóåì
àëãîðèòì, êîòîðûé áóäåò ðåàëèçîâàí íà C++, è çíàåì, ÷òî â ðåàëüíûõ çàäà÷àõ õâàòèò
òèïà äàííûõ int64. Îäíàêî íàäî ó÷åñòü, ÷òî ðàâíîìåðíûé âåñîâîé êðèòåðèé, âîîáùå ãîâîðÿ, ïîçâîëÿåò ïðîèçâîäèòü íåêîòîðûå îïåðàöèè ãîðàçäî áûñòðåå, ÷åì ýòî âîçìîæíî â
ðåàëüíîñòè: íàïðèìåð, âåêòîðà èëè ìàòðèöû ìîæíî çàïèñàòü êàê î÷åíü áîëüøèå öåëûå
÷èñëà, òîãäà èõ ñëîæåíèå â íàøåé ìîäåëè áóäåò çàíèìàòü O(1) âðåìåíè.
Äðóãîé ðàñïðîñòðàíåííûé ïîäõîä 
. Â ñïèñêå
êîìàíä íåò óìíîæåíèÿ è äåëåíèÿ, à ñëîæåíèå öåëûõ ÷èñåë ñ n áèòàìè çàíèìàåò O(log n)
âðåìåíè. Ýòîò êðèòåðèé ñîîòâåòñòâóåò ñëó÷àþ, êîãäà ïðîãðàììà ðàáîòàåò ñ áîëüøèìè
÷èñëàìè, âûõîäÿùèìè çà ïðåäåëû ðàçðÿäíîé ñåòêè
.
Î÷åâèäíî, RAM ìîæåò âûèãðûâàòü ó ÌÒ â áûñòðîäåéñòâèè, çà ñ÷åò ïðîèçâîëüíîãî
äîñòóïà ê ïàìÿòè. Èìåþò ìåñòî ñëåäóþùèå ñîîòíîøåíèÿ ìåæäó âðåìåíåì ðàáîòû RAM
è ÌÒ.

ðàâíîìåðíûé âåñîâîé êðèòåðèé

ëîãàðèôìè÷åñêèé âåñîâîé êðèòåðèé
(äëèííàÿ àðèôìåòèêà)

Ïóñòü (ìíîãîëåíòî÷íàÿ) ìàøèíà Òüþðèíãà M äåëàåò t (x) øàãîâ íà
âõîäå x. Òîãäà ìîæíî ïîñòðîèòü RAM R, êîòîðàÿ áóäåò ðàáîòàòü çà âðåìÿ t (x) =
O t (x) .
Åñëè äàíà RAM R ñ ëîãàðèôìè÷åñêèì âåñîâûì êðèòåðèåì, êîòîðàÿ ðàáîòàåò çà
âðåìÿ t (x), òî ìîæíî ïîñòðîèòü ìíîãîëåíòî÷íóþ ÌÒ, ðàáîòàþùóþ çà O t (x).

Òåîðåìà 5.24.

M

R

M

2
R

R

Îòñþäà ñëåäóåò, ÷òî ñëîæíîñòè RAM è ÌÒ ïîëèíîìèàëüíî ñâÿçàíû. Êàê ìû óâèäèì,
äëÿ íàñ ýòî ïðèíöèïèàëüíî, òàê êàê ïðè èçó÷åíèè êëàññîâ ñëîæíîñòè ïðèíÿòî ñ÷èòàòü,
÷òî
 ýòî òî æå ñàìîå, ÷òî
(ñ ïîëèíîìèàëüíî îãðàíè÷åííûì âðåìåíåì ðàáîòû). Ýòî, êîíå÷íî, î÷åíü áîëüøîå äîïóùåíèå, íî òàêàÿ,
äîâîëüíî ãðóáàÿ, äèôôåðåíöèàöèÿ ïî ñëîæíîñòè îêàçàëàñü î÷åíü ïëîäîòâîðíîé.
 äàëüíåéøåì ìû áóäåì íåÿâíî ïðåäïîëàãàòü ïðè àíàëèçå ñëîæíîñòè, ÷òî ðàññìàòðèâàåìûå íàìè àëãîðèòìû ðåàëèçîâàíû íà RAM: ëèáî ñ ðàâíîìåðíûì âåñîâûì êðèòåðèåì,
åñëè ìû íå ó÷èòûâàåì äëèíó çàïèñè ÷èñåë, ëèáî ñ ëîãàðèôìè÷åñêèì. Äðóãîé âàðèàíò 
ó÷èòûâàòü òîëüêî ÷èñëî
â õîäå àëãîðèòìà  íàïðèìåð, ñëîæåíèé è/èëè óìíîæåíèé ÷èñåë (ýòî áóäåò îáãîâîðåíî â óñëîâèè çàäà÷è).

ýôôåêòèâíûå àëãîðèòìû

ïîëèíîìèàëüíûå

ýëåìåíòàðíûõ îïåðàöèé

Âåðîÿòíîñòíûå àëãîðèòìû: îïðåäåëåíèÿ
Íà ïðàêòèêå ïîðîé îêàçûâàåòñÿ, ÷òî äåòåðìèíèðîâàííûå àëãîðèòìû ðàáîòàþò ñëèøêîì äîëãî (íàïðèìåð, â òåîðèè ÷èñåë  äåòåðìèíèðîâàííàÿ ïðîâåðêà ÷èñëà íà ïðîñòîòó,
äàæå ïîëèíîìèàëüíàÿ, çàíèìàåò ñëèøêîì ìíîãî âðåìåíè). Îäèí èç ñïîñîáîâ îáîéòè ýòî
 ïîñòðîèòü âåðîÿòíîñòíûé àëãîðèòì, òî åñòü, íåôîðìàëüíî ãîâîðÿ, àëãîðèòì, ñîâåðøàþùèé íåêîòîðûå øàãè ñëó÷àéíî.
187

Ýëåìåíòû òåîðèè ñëîæíîñòè

Âåðîÿòíîñòíàÿ ìàøèíà Òüþðèíãà

Îïðåäåëåíèå 5.25.
(ñîêðàùåííî ÂÌÒ)  êîðòåæ
(Q, Σ, ∆, #, `, q0 , F, δ1 , δ2 ), ãäå
• Q
ìíîæåñòâî ñîñòîÿíèé;
• Σ  âõîäíîé àëôàâèò, ∆ ⊃ Σ  àëôàâèò ÌÒ (êîíå÷íûé);
• # ∈ ∆ \ Σ  ïðîáåëüíûé ñèìâîë;
• q0 ∈ Q  ñòàðòîâîå ñîñòîÿíèå,
• F ⊂ Q  ôèíàëüíûå ñîñòîÿíèÿ,
• δ1 , δ2 : (Q \ {qA , qR }) × ∆ → Q × ∆ × {−1, 0, 1}  ôóíêöèè ïåðåõîäà íåêîòîðûõ
äåòåðìèíèðîâàííûõ ÌÒ

êîíå÷íîå

Âåðîÿòíîñòíàÿ ìàøèíà Òüþðèíãà îáðàáàòûâàåò âõîäíîå ñëîâî, ñîâåðøàÿ êàæäûé
ïåðåõîä ñëó÷àéíî: â êàæäîì ñîñòîÿíèè ïî êàæäîé áóêâå åñòü ïî îäíîìó ïåðåõîäó δ1 è δ2 ,
ñ âåðîÿòíîñòüþ 12 ñîâåðøàåòñÿ îäèí èç ýòèõ ïåðåõîäîâ.  îòëè÷èå îò íåäåòåðìèíèðîâàííîé
ìàøèíû Òüþðèíãà, êîòîðàÿ ¾îäíîâðåìåííî íàõîäèòñÿ â íåñêîëüêèõ ñîñòîÿíèÿõ¿, ÂÌÒ
íàõîäèòñÿ ðîâíî â îäíîì, íî ñëó÷àéíî îïðåäåëåííîì ñîñòîÿíèè.
Ôîðìàëüíî ãîâîðÿ, ïî ÂÌÒ M = (Q, Σ, ∆, #, `, q0 , F, δ1 , δ2 ) è âõîäíîìó ñëîâó w ñòðîèòñÿ îðèåíòèðîâàííîå äåðåâî TM,w , êîðåíü êîòîðîãî ïîìå÷åí êîíôèãóðàöèåé (q0 , , #, w),
à ðåáðà èìåþò âèä



 (p, w1 c, a, w2 ), (q, w1 , c, bw2 ), δi (p, a) = (q, b, −1)
(p, w1 , a, cw2 ), (q, w1 b, c, w2 ) , δi (p, a) = (q, b, 1)



(p, w1 , a, w2 ), (q, w1 , b, bw2 ) , δi (p, a) = (q, b, 0)
Âåñ êàæäîãî ðåáðà ðàâåí 21 , âåñ ïóòè ðàâåí ïðîèçâåäåíèþ âõîäÿùèõ â íåãî ðåáåð. ÂÌÒ
M
w
p, åñëè ñóììà âåñîâ âñåõ ïóòåé â TM,w
èç êîðíÿ â âèñÿ÷èå âåðøèíû (ïîìå÷åííûå (q, #n , #, #m )) ðàâíà p.

îñòàíàâëèâàåòñÿ íà ñëîâå ñ âåðîÿòíîñòüþ

Îïðåäåëåíèå 5.26. Ïî àíàëîãèè ñ ÌÒ áóäåì ãîâîðèòü, ÷òî ÂÌÒ M = (Q, Σ, ∆, #, `

ïðèíèìàåò ñëîâî ñ âåðîÿòíîñòüþ îòâåðãàåò ñëîâî ñ âåðîÿò-

, q0 , {qA , qR }, δ1 , δ2 )
w
p(
w
p), åñëè ñóììà âåñîâ âñåõ ïóòåé â TM,w èç êîðíÿ â âèñÿ÷èå âåðøèíû, ïîìå÷åííûå
(qA , #n , #, #m ) (ñîîòâåòñòâåííî ïîìå÷åííûå (qR , #n , #, #m )), ðàâíà p.

íîñòüþ

Îïðåäåëåíèå 5.27. ÂÌÒ M = (Q, Σ, ∆, #, q0 , qA , qR , δ) ñëàáî ðàçðåøàåò (èëè ðàçðåøàåò

â ñìûñëå Ìîíòå-Êàðëî) ÿçûê L, åñëè äëÿ ëþáîãî âõîäà x ∈ L ñ âåðîÿòíîñòüþ õîòÿ áû

ìàøèíà M îñòàíîâèòñÿ â ñîñòîÿíèè qA , â ïðîòèâíîì ñëó÷àå ìàøèíà M îñòàíîâèòñÿ â
ñîñòîÿíèè qR ñ âåðîÿòíîñòüþ íå ìåíåå 34 .
3
4

 ýòîì îïðåäåëåíèè ÷èñëî 34 ìîæíî çàìåíèòü íà ëþáîå ÷èñëî â èíòåðâàëå (0, 21 ),
÷èòàòåëü ìîæåò óáåäèòüñÿ â òîì, ÷òî êëàññ ðàñïîçíàâàåìûõ ÿçûêîâ îò ýòîãî íå èçìåíèòñÿ.

Îïðåäåëåíèå 5.28. ÂÌÒ M = (Q, Σ, ∆, #, q0 , {qA , qR }, δ)

ïðèíèìàåò

ÿçûê L, åñëè îíà
âñåãäà îòâåðãàåò ñëîâî, íå ëåæàùåå â L, à íà ñëîâå èç L îíà îñòàíàâëèâàåòñÿ â qA ñ
âåðîÿòíîñòüþ íå ìåíåå 21 .

188

Ýëåìåíòû òåîðèè ñëîæíîñòè
 ýòîì îïðåäåëåíèè ÷èñëî 34 ìîæíî çàìåíèòü íà ëþáîå ÷èñëî â èíòåðâàëå (0, 1),
÷èòàòåëü ìîæåò óáåäèòüñÿ â òîì, ÷òî êëàññ ðàñïîçíàâàåìûõ ÿçûêîâ îò ýòîãî íå èçìåíèòñÿ.

ñèëüíî ðàçðåøàåò (èëè ðàçðåøàåò â ñìûñëå Ëàñ-Âåãàñ) ÿçûê L, åñëè äëÿ ëþáîãî âõîäà x ∈ Σ ñ âåðîÿòíîñòüþ 1

Îïðåäåëåíèå 5.29. ÂÌÒ M = (Q, Σ, ∆, #, q0 , {qA , qR }, δ)



ìàøèíà M îñòàíîâèòñÿ â ñîñòîÿíèè qA , â ïðîòèâíîì ñëó÷àå ìàøèíà M îñòàíîâèòñÿ â
ñîñòîÿíèè qR ñ âåðîÿòíîñòüþ 1.
Òåïåðü îïðåäåëèì âðåìÿ ðàáîòû âåðîÿòíîñòíîé ìàøèíû Òüþðèíãà M .

Âðåìÿ ðàáîòû

Îïðåäåëåíèå 5.30.
timeM (w) ìàøèíû Òüþðèíãà M íà ñëîâå w  ñëó÷àéíàÿ âåëè÷èíà íà ìíîæåñòâå ëèñòüåâ TM,w , ðàâíàÿ íà êàæäîì ëèñòå åãî ãëóáèíå.
Ïî àíàëîãèè ñ êëàññàìè P è NP îïðåäåëèì âåðîÿòíîñòíûå ïîëèíîìèàëüíûå êëàññû
ñëîæíîñòè.

Îïðåäåëåíèå 5.31. Ïóñòü ÂÌÒ M = (Q, Σ, ∆, #, `, q0 , {qA , qR }, δ1 , δ2 ) ïðèíèìàåòñÿ (ñëàáî ïðèíèìàåòñÿ, ñèëüíî ïðèíèìàåòñÿ) çà îæèäàåìîå âðåìÿ f (n), åñëè
E[ sup timeM (w)] = f (n)
w∈Σn

Îïðåäåëåíèå 5.32. Áóäåì ãîâîðèòü, ÷òî L ∈ BPP (ñîîòâåòñòâåííî L ∈ RP è L ∈

ZPP), åñëè L ñëàáî ðàçðåøàåòñÿ (ïðèíèìàåòñÿ, ñèëüíî ðàçðåøàåòñÿ) íåêîòîðîé ÂÌÒ çà
îæèäàåìîå âðåìÿ O(nd ) äëÿ íåêîòîðîãî d ∈ N.

Íåòðóäíî âèäåòü, ÷òî P ⊂ ZPP ⊂ RP ⊂ BPP. Âîçìîæíîñòü âêëþ÷åíèÿ â îáðàòíóþ
ñòîðîíó äî ñèõ ïîð îñòàåòñÿ îòêðûòûì âîïðîñîì.

Êëàññû P, NP è co − NP
Âî-ïåðâûõ, ïîëèíîìû íàä ëþáûì êîëüöîì îáðàçóþò êîëüöî, òî åñòü çàìêíóòû îòíîñèòåëüíî îïåðàöèé ñëîæåíèÿ è óìíîæåíèÿ. Âî-âòîðûõ, ìíîãî÷ëåíû çàìêíóòû îòíîñèòåëüíî êîìïîçèöèè: åñëè p(x), q(x)  ìíîãî÷ëåíû, òî p(q(x))  òàêæå ìíîãî÷ëåí. Ýòèì
ìû áóäåì ïîëüçîâàòüñÿ, ÷òîáû äîêàçûâàòü çàìêíóòîñòü êëàññà P îòíîñèòåëüíî åñòåñòâåííûõ ÿçûêîâûõ îïåðàöèé [ñîáñòâåííî, ðàäè òàêèõ ñâîéñòâ çàìêíóòîñòè ýòîò êëàññ è ñòàëè
ðàññìàòðèâàòü].

Óòâåðæäåíèå 5.33. P = co−P,

òî åñòü åñëè L ∈ P, òî L ∈ P.

Äîêàçàòåëüñòâî. Çäåñü íåëüçÿ ïðîñòî ïîìåíÿòü ìåñòàìè qA è qR : ñóùåñòâóþò ñëîâà, íà êîòîðûõ ìàøèíà ìîæåò â êàêîé-òî ìîìåíò ïîïàñòü â ñîñòîÿíèå, èç êîòîðîãî íè qA ,
íè qR íå äîñòèæèìû [íàïðèìåð, ìàøèíà âûëåòàåò â âå÷íûé öèêë íà íåêîòîðîì ñëîâå].
Êëþ÷åâûì çäåñü ñòàíîâèòñÿ îãðàíè÷åíèå ïî âðåìåíè: äëÿ M ïî îïðåäåëåíèþ ñóùåñòâóåò
ìíîãî÷ëåí p(x) òàêîé, ÷òî íà ëþáîì ñëîâå w ∈ L(M ) âðåìÿ ðàáîòû ìàøèíû M íà w
íå ïðåâûøàåò p(|w|). Ñîãëàñíî îïðåäåëåíèþ ÄÌÒ èç êàæäîãî íåôèíàëüíîãî ñîñòîÿíèÿ

189

Powered by TCPDF (www.tcpdf.org)

Ýëåìåíòû òåîðèè ñëîæíîñòè
ïî êàæäîé áóêâå îïðåäåëåí ïåðåõîä, ïîýòîìó åñëè ñëîâî w ∈
/ L, òî âîçìîæíû ëèøü äâå
àëüòåðíàòèâû:
• M îñòàíàâëèâàåòñÿ â ñîñòîÿíèè qR çà íå áîëåå p(|w|) òàêòîâ;
• M íå âûäàåò áóëåâñêîãî îòâåòà çà p(|w|) øàãîâ, òî åñòü íå îñòàíàâëèâàåòñÿ íè
â îäíîì èç ôèíàëüíûõ ñîñòîÿíèé.
f  äâóõëåíòî÷íàÿ äåòåðìèíèÏîýòîìó ìîäèôèöèðóåì M ñëåäóþùèì îáðàçîì: ïóñòü M
ðîâàííàÿ ìàøèíà Òüþðèíãà, íà ïåðâîé ëåíòå ýìóëèðóþùàÿ M , à íà âòîðîé ¾îòñ÷èòûâàþùàÿ âðåìÿ ðàáîòû¿. [Äâóõëåíòî÷íàÿ ìàøèíà Òüþðèíãà ýêâèâàëåíòíà îäíîëåíòî÷íîé,
ïîäðîáíåå îá ýòîì ìîæíî ïðî÷èòàòü â Âÿëîì.] À èìåííî, ïóñòü Γ = Σ ∪ {A}, òîãäà íîf åñòü êîìïîçèöèÿ äâóõ ïîäìàøèí P olyp(x) è M 0 , âõîä w = w1 . . . w|w| (ãäå
âàÿ ìàøèíà M
wi ∈ Σ  áóêâû) ïîäàåòñÿ íà ïåðâóþ ëåíòó, è
• P olyp(x)  áëîê, âû÷èñëÿþùèé p(|w|) [çàïèñûâàåò íà âòîðóþ ëåíòó A|w| , íà âòîðîé ëåíòå âû÷èñëÿåò p(|w|), îñòàâëÿÿ íà âòîðîé ëåíòå ñëîâî Ap(|w|) , è âîçâðàùàåò
ãîëîâêè íà îáîèõ ëåíòàõ â íà÷àëüíîå ïîëîæåíèå]
• M 0  ïîäìàøèíà Òüþðèíãà, ïîëó÷åííàÿ èç M çàìåíîé ïåðåõîäîâ
(x, A)/(y, #), (D, R)
q1

x/y , D

q2

q1

q2

R

(x, #)/(y, #), (D, R)

Ôàêòè÷åñêè ìû ïðîñòî äîáàâèëè ê êàæäîìó ïåðåõîäó îòñ÷èòûâàíèå âðåìåíè è
îñòàíîâêó â qR ïîñëå ëþáûõ p(|w|) ïåðåõîäîâ îðèãèíàëüíîé ìàøèíû Òüþðèíãà
M.
Âðåìÿ ðàáîòû M 0 î÷åâèäíî íå ïðåâîñõîäèò p(|w|), à P olyp(x) çà |w| çàïèñûâàåò A|w|
íà âòîðóþ ëåíòó, çà ïîëèíîìèàëüíîå âðåìÿ âû÷èñëÿåò ñàì ìíîãî÷ëåí è çà O(|w| + p(|w|))
âîçâðàùàåò ãîëîâêè â ñòàðòîâîå ïîëîæåíèå. Òàêèì îáðàçîì, ñóììàðíîå âðåìÿ ðàáîòû
ïîëèíîìèàëüíî ïî äëèíå âõîäíîãî ñëîâà.

Êðîìå òîãî, ïîëèíîìèàëüíûå ÿçûêè çàìêíóòû îòíîñèòåëüíî îáúåäèíåíèÿ, êîíêàòåíàöèè è çâåçäî÷êè Êëèíè. Äîêàçàòåëüñòâî, âïðî÷åì, ñîâåðøåííî íå àíàëîãè÷íîå äîêàçàòåëüñòâó çàìêíóòîñòè ðåãóëÿðíûõ ÿçûêîâ. Íà ïðèìåðå ñëåäóþùåé çàäà÷è ìû ïîéìåì,
êàê åãî äåëàòü.

Åñëè L ⊂ Σ èìååò ïîëèíîìèàëüíóþ ñëîæíîñòü, òî è L
èìååò ïîëèíîìèàëüíóþ ñëîæíîñòü.

Óòâåðæäåíèå 5.34.
190





⊂ Σ∗

Ýëåìåíòû òåîðèè ñëîæíîñòè
Äîêàçàòåëüñòâî. Ðåøåíèå, êîíå÷íî æå, çàêëþ÷àåòñÿ â òîì, ÷òîáû ïåðåñòðîèòü
îðèãèíàëüíóþ ìàøèíó Òüþðèíãà M , ïðèíèìàâøóþ L, ïîëó÷èòü íîâóþ ìàøèíó äëÿ ÿçûêà L∗ è óñòàíîâèòü åå ïîëèíîìèàëüíîñòü. Îñíîâíûì àðãóìåíòîì áóäåò ïîëèíîìèàëüíàÿ
îãðàíè÷åííîñòü ïî âðåìåíè.
f, ïðèíèìàþùóþ òîò æå
Äëÿ íà÷àëà ïî ÄÌÒ M ïîñòðîèì äâóõëåíòî÷íóþ ÄÌÒ M
ÿçûê L, íî îñòàíàâëèâàþùóþñÿ â qR íà âñåõ ñëîâàõ èç L, è áóäåì â äàëüíåéøåì èñïîëüçîâàòü èìåííî åå. Òåïåðü çàìåòèì, ÷òî x ∈ L∗ òèòòê ñóùåñòâóþò íåïóñòûå ñëîâà
x1 , . . . xn ∈ L \ {}, òàêèå, ÷òî x = x1 . . . xn . Ñíà÷àë ïðîâåðèì, ðàâåí ëè ïåðâûé ñèìâîë
#, ïðè ðàâåíñòâå ñîâåðøàåì ïåðåõîä â qA , â ïðîòèâíîì ïåðåõîäèì â äðóãîå ñîñòîÿíèå è
çàïóñòèì ¾äèíàìèêó¿ íà ñëîâå w, òî åñòü áóäåì, êàê â äèíàìè÷åñêîì ïðîãðàììèðîâàíèè,
äëÿ êàæäîãî ïðåôèêñà w[1 : k] ïðîâåðèâ åãî ïðèíàäëåæíîñòü ÿçûêó L∗ . Äåéñòâèòåëüíî,

w[1 : k] ∈ L∗ ⇐⇒ ∃l ∈ (1, k), w[1 : l] ∈ L∗ , w[l + 1 : k] ∈ L,

ïîýòîìó ìîæíî õðàíèòü ñëîâî u ∈ {1, 0}∗ òàêîå, ÷òî u[i] = 1 òèòòê w[1 : i] ∈ L∗ , äëÿ
?

êàæäîãî k âû÷èñëÿòü w[i : k] ∈ L, çàòåì ïðîâåðèòü äëÿ êàæäîãî l ∈ (1, k) óñëîâèå (u[l] =
1) ∧ (w[l + 1 : k] ∈ L) è âû÷èñëèòü òàêèì îáðàçîì íîâóþ áóêâó u[k]. [Ïðè k = 1 ïðîâåðêà
ñâîäèòñÿ ê ïðîâåðêå w[1] ∈ L.]
f çà ïîëèíîìèàëüíîå âðåìÿ ðàçðåøèò ïðèíàäëåæíîñòü ëþáîãî w[i : j], òî
Ìàøèíà M
åñòü çà p(|w[i : j]|) äàñò ïîëîæèòåëüíûé èëè îòðèöàòåëüíûé îòâåò, è ìàøèíà, ïîñòðîåííàÿ â ýòîé çàäà÷å, êîððåêòíî ðàçðåøèò ïðèíàäëåæíîñòü ëþáîãî ïðåôèêñà ÿçûêó L∗ [òî
f äëÿ âñåõ
åñòü âñåãäà äàñò îòâåò¾äà¿ èëè ¾íåò¿]. Ìû âûçûâàåì îðèãèíàëüíóþ ÄÌÒ M
|w|
2
ïîäñëîâ w, òî åñòü 2 = O(|w| ) ðàç; òàê êàê ìíîãî÷ëåí ìîíîòîííî âîçðàñòàåò, íà÷èíàÿ
f îöåíèâàåòñÿ êàê
ñ íåêîòîðîãî x, òî ñóììàðíîå âðåìÿ ðàáîòû ïîäìàøèíû M
!
X
|w|
p(|w[i : j]|) = O(
p(|w|)).
2
16i 1.
Ïóñòü RL (·, ·)  âû÷èñëèìûé ïðåäèêàò, çàäàþùèé L [â ñìûñëå ïðåäèêàòíîãî îïðåäåëåíèÿ NP]. Òîãäà R(·, ·), ïðåäèêàò äëÿ L∗ , óäîâëåòâîðÿåò äâóì ñîîòíîøåíèÿì:
•   ñåðòèôèêàò ñëîâà ;
• åñëè yi  ñåðòèôèêàòû ñëîâ xi ∈ L, òî y1 . . . yn  ñåðòèôèêàò x1 . . . xn .
xn
1

xn
k

n

193

Ýëåìåíòû òåîðèè ñëîæíîñòè


Îïðåäåëåíèå 5.36. Ïóñòü çàôèêñèðîâàí àëôàâèò Σ. Ñêàæåì, ÷òî L ∈ DSPACE(f (n)),

åñëè äëÿ ëþáîãî w ∈ Σ∗ ÷èñëî ÿ÷ååê, êîòîðûå èñïîëüçóåò ìàøèíà Òüþðèíãà T íà âõîäå
w, íå ïðåâûøàåò f (|w|). Äåòåðìèíèðîâàííàÿ ìàøèíà Òüþðèíãà T íàçûâàåòñÿ
, åñëè L(T ) ∈ DSPACE(p(n)) äëÿ íåêîòîðîãî ìíîãî÷ëåíàp(x) ∈ Q[x].

ïîëèíîìè-

àëüíîé

Îïðåäåëåíèå 5.37. Êëàññ ÿçûêîâ PSPACE îïðåäåëèì êàê
PSPACE =

[

DSPACE(O(nk ))

k>0

Îïðåäåëåíèå 5.38. Ïóñòü çàôèêñèðîâàí àëôàâèò Σ. ßçûê L ⊂ Σ∗ ïðèíàäëåæèò êëàññó

NSPACE(f (n)), åñëè äëÿ ëþáîãî ñëîâà w ∈ L ñóùåñòâóåò êîððåêòíîå âû÷èñëåíèå, èñïîëüçóþùåå íå áîëåå f (n) ÿ÷ååê. Ìû ãîâîðèì, ÷òî L ∈ NP, åñëè L ∈ NSPACE(p(n)) äëÿ
íåêîòîðîãî ìíîãî÷ëåíà p(x) ∈ Q[x]; èíûìè ñëîâàìè,
[
NPSPACE =
NSPACE(O(nk ))
k>0

Òåîðåìà 5.39 (Savitch).

Åñëè ê òîìó æå f (n) ≥ log n, òî
NSPACE(f (n)) ⊂ DSPACE(f 2 (n)).

 ÷àñòíîñòè, NPSPACE = PSPACE
Îïÿòü æå, äëÿ ëþáîé äîñòàòî÷íî ëåãêî

âû÷èñëèìîé ôóíêöèè f (n) èìåþò ìåñòî
ñëåäóþùèå ñîîòíîøåíèÿ ìåæäó ðàçëè÷íûìè êëàññàìè:
[
DTIME(f (n)) ⊂ NTIME(f (n)) ⊂ DSPACE(f (n)) ⊂ NSPACE(f (n)) ⊂
DTIME(2cf (n) ).
c>0

Èç ñêàçàííîãî âûøå ñëåäóþò ñëåäóþùèå ñîîòíîøåíèÿ ìåæäó êëàññàìè:
P ⊂ NP ∩ co − NP,
NP ⊂ PSPACE ⊂ EXPTIME.

Îäíàêî, âîïðîñ î òîì, âåðíî ëè P = co − NP, îñòàåòñÿ îòêðûòûì  ýòî îäíà èç ¾ïðîáëåì
òûñÿ÷åëåòèÿ¿. Åñòü è äðóãèå âîïðîñû, íàïðèìåð, ðàâíû ëè êëàññû NP è co − NP (åñëè
P = NP òî ýòî, êîíå÷íî, òàê).

Ïðèìåð 5.40.  êà÷åñòâå ïðîñòåéøåãî ïðèìåðà çàäà÷è èç NP ìîæíî ïðèâåñòè

SAT


çàäà÷à îïðåäåëåíèÿ òîãî, ÿâëÿåòñÿ ëè çàäàííàÿ áóëåâà ôîðìóëà âûïîëíèìîé (satisability).
Ñîîòâåòñòâóþùèé ÿçûê Lsat ñîñòîèò èç êîäèðîâîê âñåõ âûïîëíèìûõ ôîðìóë (ìîæíî ñ÷èòàòü, ÷òî ôîðìóëà åñòü êîððåêòíàÿ ïîñëåäîâàòåëüíîñòü èç ñèìâîëîâ {(, ), ∧, ∨, ¬} è íîìåðîâ ïåðåìåííûõ). Äîñòàòî÷íî î÷åâèäíî, ÷òî îí ëåæèò â NP: ïðåäèêàòîì R(F, x) ÿâëÿåòñÿ
çíà÷åíèå ôîðìóëû F íà íàáîðå ïåðåìåííûõ x, à ñåðòèôèêàòîì  ëþáîé âûïîëíÿþùèé
íàáîð (åñëè îí ñóùåñòâóåò).
194

Ýëåìåíòû òåîðèè ñëîæíîñòè
P RIM ES ⊂ NP ∩ co − NP

ßçûê, ñîñòîÿùèé èç äâîè÷íûõ çàïèñåé ïðîñòûõ ÷èñåë, ëåæèò â co − NP. Äåéñòâèòåëüíî, åãî äîïîëíåíèå ïðèíàäëåæèò NP: â êà÷åñòâå ñåðòèôèêàòà äëÿ ñîñòàâíîãî ÷èñëà
ìîæíî ïðåäúÿâèòü åãî ñîìíîæèòåëè. Ãîðàçäî ñëîæíåå ïîêàçàòü ñëåäóþùåå.

Óòâåðæäåíèå 5.41 ([18]).

ßçûê ïðîñòûõ ÷èñåë ïðèíàäëåæèò êëàññó NP.

Äîêàçàòåëüñòâî. Ïîñòðîèì ïðåäèêàò R(·, ·) è äîêàæåì ïîëèíîìèàëüíîñòü ðàçìåðà
ñåðòèôèêàòà è âðåìåíè ïðîâåðêè èñòèííîñòè R. ×èñëî p ïðîñòîå òèòòê âñå íåíóëåâûå
÷èñëà, ìåíüøèå p, âçàèìíîïðîñòû ñ íèì, òî åñòü âñå íåíóëåâûå îñòàòêè ïî ìîäóëþ p
îáðàçóþò ìóëüòèïëèêàòèâíóþ ãðóïïó. Åñëè æå p íå ïðîñòî è äåëèòñÿ íà íåêîòîðûé d < p,
òî d íå îáðàòèì ïî ìîäóëþ p è íå ìîæåò áûòü ýëåìåíòîì ìóëüòèïëèêàòèâíîé ãðóïïû
(Z/pZ)× . Áîëåå òîãî, äëÿ ïðîñòîãî p ìóëüòèïëèêàòèâíàÿ ãðóïïà (Z/pZ)× öèêëè÷íà, à
çíà÷èò, ñóùåñòâóåò ïîðîæäàþùèé ýòîé ãðóïïû g ∈ (1; p). Òàêèì îáðàçîì,

p  ïðîñòîå ⇐⇒ ∃g ∈ (1; p),

{1, g mod p, . . . g p−1 mod p} ≡ {1, 2, . . . p − 1}.

Ïîñëåäíåå âåðíî òèòòê ïîðÿäîê ýëåìåíòà g â (Z/pZ)× ðàâåí p − 1, òî åñòü
∀pi  ïðîñòîå, pi |p − 1

g p−1 = 1, g

p−1
pi

6= 1

Òåïåðü ïîñòðîèì ñåðòèôèêàò ïðîñòîòû p è ïðåäúÿâèì äåòåðìèíèðîâàííûé ïîëèíîìèàëüíûé àëãîðèòì, ïîçâîëÿþùèé ïðîâåðèòü èñòèííîñòü ñåðòèôèêàòà. Ðàññìîòðèì êîðíåâîå
äåðåâî (V, E, r, f ), ãäå
• f : V → Z × Z × Z∞  ôóíêöèÿ, ïîìå÷àþùàÿ êàæäóþ âåðøèíó íàáîðîì ÷èñåë
[g, p, p1 , . . . pk ], ãäå pi  ïðîñòûå ÷èñëà, âñòðå÷àþùèåñÿ â ðàçëîæåíèè p − 1;
• (v1 v2 ) ∈ E , åñëè âåðøèíà v1 ïîìå÷åíà [g, q, q1 , . . . qk ], à v2 ïîìå÷åíà [g 0 , qi , q10 , . . . qk0 ]
äëÿ íåêîòîðîãî i;
• êîðåíü r ∈ V ïîìå÷àåòñÿ [g, p, p1 , . . . pk ], òî åñòü âòîðàÿ êîìïîíåíòà â íåé ñóòü
èñõîäíîå ÷èñëî p, ïðîñòîòà êîòîðîãî ïðîâåðÿåòñÿ.

Ñóòü çàêëþ÷àåòñÿ â òîì, ÷òîáû â âåðøèíå [g, p, p1 , . . . pk ] óñòàíîâèòü, ÷òî g  ïåðâîîáðàçíûé êîðåíü ïî ìîäóëþ p, à âñå îñòàëüíûå pi , âñòðå÷àþùèåñÿ â ðàçëîæåíèè p − 1,
òàêæå ÿâëÿþòñÿ ïðîñòûìè. Äëÿ ýòîãî è íóæíî äåðåâî: ïðîâåðêà ïðîñòîòû çàïóñêàåòñÿ
ðåêóðñèâíî äëÿ êàæäîãî pi .
Ñíà÷àëà äîêàæåì, ÷òî äåðåâî èìååò ïîëèíîìèàëüíûé ïî log p ðàçìåð. Ñîãëàñíî ïðàâèëàì ïîñòðîåíèÿ äåðåâà ïî ñïèñêó ïîìåòîê âåðøèí ìîæíî îäíîçíà÷íî ïîñòðîèòü äåðåâî:
ìû çíàåì êîðåíü, ïîìå÷åííûé èñõîäíûì p, ìîæåì âîññòàíîâèòü åãî íåïîñðåäñòâåííûõ ïîòîìêîâ, à äàëüøå ïðîäîëæàåì äîñòðàèâàòü äåðåâî ðåêóðñèâíî. Ïîýòîìó äîñòàòî÷íî ëèøü
ïîêàçàòü, ÷òî ñóììàðíàÿ äëèíà âñåõ ïîìåòîê ïîëèíîìèàëüíî îãðàíè÷åíà. Äåéñòâèòåëüíî,
195

Ýëåìåíòû òåîðèè ñëîæíîñòè
g ∈ (1; p), ïîýòîìó äëèíà åãî çàïèñè îãðàíè÷åíà log(p). Äàëåå, äëÿ íåêîòîðûõ αi > 1

p−1=

k
Y

k
Y

i

i >

i=1

pi ⇒ log(p − 1) >

i=1

k
X

log(pi ).

i=1

Òàêèì îáðàçîì, ñóììàðíàÿ äëèíà ïðîñòûõ äåëèòåëåé p − 1 íå ïðåâûøàåò log(p), è òîãäà
|[g, p, p1 , . . . pk ]| 6 3 log(p). Ïóñòü L(p)  ñóììàðíàÿ äëèíà âñåõ ïîìåòîê ñåðòèôèêàòíîãî
k
P
äåðåâà äëÿ p, òîãäà L(p) 6 3 log(p) +
L(pi ). Ðàñêðîåì íåðàâåíñòâî:
i=1

L(p) 6 3 log(p) +

k
X

L(pi ) 6 3 log(p) + 3

k
X

i=1

log(pi ) +

X

i=1

L(qij ) 6 . . . ,

i,j

ãäå qij  ïðîñòûå ÷èñëà, âñòðå÷àþùèåñÿ â ðàçëîæåíèè pi − 1. Òàêèì îáðàçîì, ìû îãðàíè÷èâàåì L(p) ñóììîé ïî âñåì óðîâíÿì äåðåâà ñåðòèôèêàòà äëèí ïðîñòûõ ÷èñåë [ïðîñòîòó
êîòîðûõ ìû ïðîâåðÿåì]. Âûøå ìû óæå äîêàçàëè, ÷òî ñóììàðíàÿ äëèíà ïðîñòûõ äåëèòåëåé p − 1 íå ïðåâûøàåò log(p), ïîýòîìó ñóììà äëèí ïðîñòûõ ÷èñåë íà êàæäîì óðîâíå íå
ïðåâûøàåò àíàëîãè÷íîé ñóììû íà ïðåäûäóùåì óðîâíå, òî åñòü
log(p) >

k
X
i=1

log(pi ) >

X

log(qij ) > . . .

i,j

Ñàìèõ æå óðîâíåé â äåðåâå íå áîëåå log(p): ìàêñèìàëüíûé ïðîñòîé äåëèòåëü p − 1 íå
ïðåâûøàåò p−1
[ìèíèìàëüíûé ïðîñòîé äåëèòåëü ðàâåí õîòÿ áû 2], òàêèì îáðàçîì, íà k-îì
2
. Òàêèì îáðàçîì, äëèíà âñåõ ìåòîê
óðîâíå ìàêñèìàëüíîå ïðîñòîå ÷èñëî íå ïðåâûøàåò p−1
2k
äåðåâà íå ïðåâûøàåò 3 log(p) · log(p) = 3 log(p)2 è, òàêèì îáðàçîì, ñåðòèôèêàò ïðîñòîòû
ïîëèíîìèàëåí ïî äëèíå.
Òåïåðü äîêàæåì, ÷òî ìîæíî ïðîâåðèòü êîððåêòíîñòü ñåðòèôèêàòà ïîëèíîìèàëüíûì
àëãîðèìòîì. Äëÿ êîðíÿ äåðåâà, ïîìå÷åííîãî [g, p, p1 , . . . pk ], íóæíî ïðîâåðèòü, ÷òî g p−1 =
p−1

1, g pi 6= 1 äëÿ âñåõ pi  ïðîñòûõ äåëèòåëåé p − 1, à òàêæå òî, ÷òî ïðîñòûå äåëèòåëè p − 1
 óêàçàííûå pi è òîëüêî îíè. ×èñëà íå äëèííåå log(p) ìîæíî óìíîæàòü è äåëèòü äðóã
íà äðóãà ñ îñòàòêîì çà íå áîëåå ÷åì O(log(p)2 ) òàêòîâ. Âîçâîäèòü ÷èñëî â ñòåïåíü ìîæíî
áûñòðî, âîçâîäÿ ÷èñëî â êâàäðàò è çàòåì áåðÿ îñòàòîê ïî ìîäóëþ p; áûñòðîå âîçâåäåíèå â ñòåïåíü ìîæíî îñóùåñòâèòü, èñïîëüçóÿ O(log(p)) îïåðàöèé óìíîæåíèÿ è O(log(p))
îïåðàöèé âçÿòèÿ îñòàòêà [ïîñëå êàæäîãî óìíîæåíèÿ], ñëîæíîñòü êàæäîé îïåðàöèè åñòü
O(log(p)2 ), ïîýòîìó çà O(log(p)3 ) ìîæíî âû÷èñëèòü g p−1 . Ñðàâíèòü ñ 1 ìîæíî çà O(log(p)):

196

Ýëåìåíòû òåîðèè ñëîæíîñòè
íóæíî íàéòè ìëàäøèé íå ðàâíûé 1 ðàçðÿä, â êîòîðîì ñòîèò íå 0. Ïîýòîìó ïðîâåðèòü èñòèííîñòü g p−1 = 1 ðàâåíñòâà O(log(p)3 ). Äàëåå, ïðîñòûõ äåëèòåëåé p − 1 íå áîëüøå log(p):
p−1=

k
Y

i

i >

i=1

k
Y

pi > 2 · 3 · . . . Pk ,

i=1

ãäå Pk  k-îå ïðîñòîå ÷èñëî, à Pk > k äëÿ k > 3, ïîýòîìó 2 · 3 · . . . Pk > 2 · . . . · k = k!;
ñëåäîâàòåëüíî, p − 1 > k!, è åñëè k > log(p), òî log(p)! > p − 1 ïðè áîëüøèõ p: èç àíàëèçà
n
èçâåñòíî n! > nen , òîãäà ïðè n > 10 èìååì
n! >

nn
> en > en − 1 ⇒ log(p)! > p − 1.
en
p−1

p−1

Òîãäà ÷èñåë g pi âñåãî O(log(p)), çíà÷èò, ïðîâåðèòü èñòèííîñòü g pi 6= 1 äëÿ âñåõ pi
ìîæíî çà O(log(p)4 ). Îñòàëîñü óçíàòü, ÷òî âñå pi äåëÿò p, à äðóãèõ ïðîñòûõ äåëèòåëåé
íåò. Áóäåì ñíà÷àëà äåëèòü p íà p1 ñ îñòàòêîì, p1 |p òèòòê ìû áóäåì äåëèòü íà p1 õîòÿ áû
äâà ðàçà [âî âòîðîé ðàç ìîæåò ïîëó÷èòüñÿ íåòðèâèàëüíûé îñòàòîê]. Êîãäà ïîëó÷åííîå
÷èñëî íå áóäåò äåëèòüñÿ íà p1 , áóäåì äåëèòü íà p2 ñ îñòàòêîì.  èòîãå ïîëó÷èòñÿ ÷èñëî,
íå äåëÿùååñÿ íà âñå pi , íàäî ñðàâíèòü åãî ñ åäèíèöåé. Êàæäîå äåëåíèå ñ îñòàòêîì ìîæíî
ïðîäåëàòü çà O(log(p)2 ), ñðàâíåíèå îñòàòêîâ ñ íóëåì ïðîäåëûâàåòñÿ çà O(log(p)), à ñàìèõ
äåëåíèé íóæíî ïðîèçâåñòè O(log(p)):
p−1=

k
Y

i

i > 2

P

αi



X

αi 6 log(p − 1) < log(p)

i=1

Ïîýòîìó ïðîâåðêà òîãî, ÷òî ïðîñòûå äåëèòåëè p−1 åñòü pi è òîëüêî îíè, òðåáóåò O(log(p)3 ).
Òàêèì îáðàçîì, â êàæäîé âåðøèíå äåðåâà ïðîäåëûâàåòñÿ O(log(p)4 ) áèòîâûõ îïåðàöèé, à
òàê êàê ïðîâåðêà ïðîñòîòû çàïóñêàåòñÿ äëÿ âñåõ pi , òî èìååò ìåñòî ðåêóðñèÿ
T (p) = O(log(p)4 ) +

k
X

T (pi ).

i=1

Ðàñêðûâàÿ ðåêóðñèþ, ïîëó÷èì T (p) = O(log(p)4 ) +

k
P

O(log(pi )4 ) + . . .  ñóììó ñóìì

i=1

O(log(pi )4 ) íà êàæäîì óðîâíå, ïðè÷åì êîíñòàíòó äëÿ îãðàíè÷åíèÿ ñâåðõó ìîæíî âçÿòü
îäíó è òó æå. Òîãäà òàê êàê xn1 + . . . + xnk 6 (x1 + . . . + xn )n , òî íà êàæäîì óðîâíå ñóììó
k
P
O(log(pi )4 ) ìîæíî îöåíèòü O(log(p)4 ). Ãëóáèíà ñåðòèôèêàòíîãî äåðåâà íå ïðåâûøàåò
i=1

log(p), ïîýòîìó ñëîæíîñòü ïðîâåðêè êîððåêòíîñòè ñåðòèôèêàòà åñòü O(log(p)5 ), òî åñòü
ïîëèíîìèàëüíà.


197

Ýëåìåíòû òåîðèè ñëîæíîñòè

Ïðèìåð 5.42. Ïîñòðîèì NP-ñåðòèôèêàò ïðîñòîòû äëÿ ÷èñëà p = 3911, g = 13. Ïðîñòûìè â ðåêóðñèâíîì ïîñòðîåíèè áóäåì ñ÷èòàòü òîëüêî ÷èñëà 2, 3, 5 (îíè ñàìè ÿâëÿþòñÿ
ñâîèìè ñåðòèôèêàòàìè). Ïîñòðîèì äåðåâî è ïðåäúÿâèì ïðîâåðêó êîððåêòíîñòè.
g = 13, p = 3911
3910 = 2 · 5 · 17 · 23

p = 2  ïðîñòîå

p = 5  ïðîñòîå

g = 3, p = 17
16 = 24

g = 5, p = 27
22 = 2 · 11

Ïðîâåðêà êîðåêòíîñòè çàïèñàíà òàêæå â âåðøèíàõ äåðåâà. 2 è 5  ïðîñòûå ïî óñëîâèþ
÷èñëà. Ïîÿñíåíèÿ ê âû÷èñëåíèÿì çàïèñàíû íèæå.
Ïðîâåðêà òîãî, ÷òî 3  ïåðâîîáðàçíûé êîðåíü ïî ìîäóëþ 17:
32 = 9, 34 = 81 = −4 mod 17, 38 = (−4)2 = 16 = −1 mod 17, 316 = (−1)2 = 1 mod 17

Ïðîâåðêà òîãî, ÷òî 5  ïåðâîîáðàçíûé êîðåíü ïî ìîäóëþ 23:
52 = 25 = 2 mod 23, 54 = 4 mod 23, 58 = 16 mod 23
511 = 58+2+1 = 16 · 2 · 5 = 160 = −1 + 23 · 7 = −1 mod 23
522 = (−1)2 = 1 mod 23

Ïðîâåðêà òîãî, ÷òî 13  ïåðâîîáðàçíûé êîðåíü ïî ìîäóëþ 3911:
132 = 169, 134 = 1184 mod 3911, 138 = 1718 mod 3911, 1316 = 2630 mod 3911
1332 = 2252 mod 3911, 1364 = 2848 mod 3911, 13128 = 3601 mod 3911
13256 = 2236 mod 3911, 13512 = 1438 mod 3911, 131024 = 2836 mod 3911
135·17·23 = 131955 = 131024+512+256+128+32+2+1 = 3910 mod 3911
132·17·23 = 13782 = 13512+256+8+4+2 = 3349 mod 3911
132·5·23 = 13230 = 13128+64+32+4+2 = 1346 mod 3911
132·5·17 = 13170 = 13128+32+8+2 = 1790 mod 3911
133910 = (−1)2 = 1 mod 3910

198

Ýëåìåíòû òåîðèè ñëîæíîñòè

Ñèñòåìû ëèíåéíûõ íåðàâåíñòâ
Òåïåðü ïåðåéäåì ê ðåøåíèþ ñèñòåìû ëèíåéíûõ íåðàâåíñòâ íàä Q


a11 x1 + . . . + a1n xn 6 b1
...


am1 x1 + . . . + amn xn 6 bm
 áóäóùåì áóäåì ïèñàòü x 6 y , åñëè êàæäàÿ êîìïîíåíòà x íå áîëüøå êàæäîé êîìïîíåíòû
y.

Îïðåäåëåíèå 5.43. Ïóñòü A ∈ Matn×n (Q), b ∈ Qn . Áóäåì ãîâîðèòü, ÷òî ñèñòåìà ëèíåéíûõ íåðàâåíñòâ Ax 6 b
óäîâëåòâîðÿþùèé Au 6 b.

ñîâìåñòíà, åñëè ñóùåñòâóåò õîòÿ áû îäèí âåêòîð u ∈ Q

n

,

Ðàññìîòðèì ÿçûê Lcons , ñîñòîÿùèé èç êîäèðîâîê âñåõ ñîâìåñòíûõ ñèñòåì ëèíåéíûõ íåðàâåíñòâ (Ax ≤ b) ñ öåëûìè êîýôôèöèåíòàìè. Äëèíîé âõîäà ñ÷èòàåì êîëè÷åñòâî êîýôôèöèåíòîâ óìíîæåííîå íà ëîãàðèôì ìàêñèìàëüíîãî ïî ìîäóëþ ñðåäè íèõ, ò.å.
|(A, b)| = m(n + 1) log h, ãäå A ∈ Zm×n , b ∈ Zm , h = max{maxi,j |Aij |, maxi |bi |}. Ïîêàæåì,
÷òî äàííûé ÿçûê ïðèíàäëåæèò NP. Êàçàëîñü áû, ýòî î÷åâèäíî: ìîæíî ïðåäúÿâèòü â êà÷åñòâå ñåðòèôèêàòà òàêîé x, ÷òî Ax ≤ b, ïðè÷åì ïðîâåðêà òîæå âûïîëíÿåòñÿ çà ïîëèíîìèàëüíîå âðåìÿ.  ýòîì ðàññóæäåíèè åñòü íåäî÷åò: íàì íóæíî ïðåäúÿâèòü íå ïðîèçâîëüíûé
äîïóñòèìûé âåêòîð x ∈ Qn , à òàêîé, äëèíà çàïèñè êîòîðîãî ïîëèíîìèàëüíî îãðàíè÷åíà
ðàçìåðîì âõîäà. Ïî÷åìó ýòî âîçìîæíî? Áåç îãðàíè÷åíèÿ îáùíîñòè áóäåì ñ÷èòàòü, ÷òî
âñå ñòîëáöû ìàòðèöû A ëèíåéíî íåçàâèñèìû (èíà÷å íåêîòîðûå ïåðåìåííûå ìîæíî âñåãäà
ñ÷èòàòü ðàâíûìè 0). Çàìåòèì, ÷òî òàê êàê äîïóñòèìîå ìíîæåñòâî {x : Ax ≤ b} ÿâëÿåòñÿ
ïîëèýäðîì, òî ñóùåñòâóåò ðåøåíèå x, íàõîäÿùååñÿ â åãî âåðøèíå. Ýòî îçíà÷àåò, ÷òî ïðè
ñîîòâåòñòâóþùåé ïåðåñòàíîâêå ñòðîê
 
 
A1
b1
A=
, b=
A2
b2
è A1 x = b1 , A2 x ≤ b2 , ãäå A1  íåâûðîæäåííàÿ êâàäðàòíàÿ ìàòðèöà. Òîãäà x = A−1
1 b1 .
Òàê ýëåìåíòû îáðàòíîé ìàòðèöû âûðàæàþòñÿ ÷åðåç îòíîøåíèå äåòåðìèíàíòîâ ìèíîðîâ
ê äåòåðìèíàíòó âñåé ìàòðèöû, òî äëèíà èõ áèòîâîé çàïèñè ïîëèíîìèàëüíî îãðàíè÷åíà.
Ñëåäîâàòåëüíî, ïîëèíîìèàëüíî îãðàíè÷åíà è äëèíà çàïèñè êîýôôèöèåíòîâ âåêòîðà x.
Çàìåòèì, ÷òî çíàòü êîíêðåòíîå ïðåäñòàâëåíèå ÷åðåç A1 è A2 , êàê è ëèíåéíóþ çàâèñèìîñòü ñòîëáöîâ ìàòðèöû íàì íå íóæíî  ýòî ïðîñòî ïîçâîëÿåò ïîêàçàòü, ÷òî íàéäåòñÿ
ïîäõîäÿùèé ñåðòèôèêàò x, êîòîðûé è ìîæíî ïðåäúÿâèòü.
Òåïåðü ïîêàæåì, ÷òî ÿçûê íåñîâìåñòíûõ ñèñòåì ëèíåéíûõ íåðàâåíñòâ ïðèíàäëåæèò
êëàññó NP. Ñíà÷àëà îãîâðèì îáîçíà÷åíèå x > y äëÿ âåêòîðîâ x, y ∈ Rn : ñêàæåì, ÷òî
x > y , åñëè xi > yi äëÿ âñåõ i, òî åñòü x ïîêîîðäèíàíòíî áîëüøå y . Íåðàâåíñòâà â óñëîâèè
199

Ýëåìåíòû òåîðèè ñëîæíîñòè
ïîëàãàþòñÿ ñòðîãèìè; ëþáóþ ñèñòåìó ëèíåéíûõ íåðàâåíñòâ ìîæíî ïðèâåñòè ê âèäó Ax 6
b, äîìíîæèâ íåêîòîðûå ñòðîêè íà −1.
Çäåñü íóæíî ïðåäúÿâèòü ïðåäèêàò âèäà ∃xP (x), òî åñòü ïðîâåðèòü ñóùåñòâîâàíèå
íåêîòîðîãî îáúåêòà. Ìû ñìîæåì åãî ïîñòðîèòü, åñëè äîêàæåì ñëåäóþùóþ ëåììó.

Èìååò ìåñòî ñëåäóþùàÿ àëüòåðíàòèâà.
Ñèñòåìà Ax = b, x > 0 ñîâìåñòíà;
Ñóùåñòâóåò y ∈ R òàêîé, ÷òî A y > 0, y b < 0.

Ëåììà 5.44 (Farkas).



n

T

T

Ñíà÷àëà ìû äîêàæåì ñëåäóþùåå

Äàíû S  çàìêíóòîå âûïóêëîå ïîäìíîæåñòâî R è x ∈ R ëåæèò âíå S . Ïóñòü p ∈ S  ñàìàÿ áëèçêàÿ òî÷êà S ê x, òî åñòü p = arg min ||x − u||.
Òîãäà äëÿ ëþáîé z ∈ S âåðíî x − p, z − p 6 0.
Óòâåðæäåíèå 5.45.

n

n

u∈S

p0

x
z
p

Äîêàçàòåëüñòâî. Óñëîâèå ∀z ∈ S x − p, z −
p 6 0 ýêâèâàëåíòíî òîìó, ÷òî ëèáî x è âñå òî÷êè
S íàõîäÿòñÿ ïî ðàçíûå ñòîðîíû îò êàñàòåëüíîé â
òî÷êå p ãèïåðïëîñêîñòè γ [íà èëëþñòðàöèè îòìå÷åíà
→ −
→. Åñëè áû ýòî áûëî
ñàëàòîâûì öâåòîì], ëèáî −
xp⊥
zp
íå òàê, òî ïóñòü p0 ∈ S ëåæèò ïî òó æå ñòîðîíó îò
γ‘, ÷òî è x. Îïóñòèì ïåðïåíäèêóëÿð èç x íà ïðÿìóþ
(p0 p) è îáîçíà÷èì ïåðåñå÷åíèå çà z . Òàê êàê p è p0
ëåæàò ïî îäíó ñòîðîíó γ , òî åñòü

x − p, p0 − p > 0,

òî z ëåæèò íà îòðåçêå [p0 p]. Â ñèëó âûïóêëîñòè S òàê
êàê p, p0 ∈ S , òî z ∈ S . Êàòåò xz ÿâëÿåòñÿ êðàò÷àéøåé ñòîðîíîé â ∆xpz , ÷òî ïðîòèâîðå÷èò òîìó, ÷òî p
 ñàìàÿ áëèçêàÿ òî÷êà S ê x.

Äîêàçàòåëüñòâî ëåììû Ôàðêàøà. Ïóñòü ñèñòåìà Ax = b, x > 0 ñîâìåñòíà, äîêàæåì íàëè÷èå y , óäîâëåòâîðÿþùåãî óêàçàííûì óñëîâèÿì.
def
Îáîçíà÷èì ARn+ = {Ax|x > 0}, ëþáàÿ òî÷êà ýòîãî ìíîæåñòâà èìååò âèä Aw äëÿ
n
w > 0. Î÷åâèäíî, ARn
+  çàìêíóòîå ìíîæåñòâî. Áîëåå òîãî, AR+  âûïóêëîå: äëÿ ëþáûõ
Ax, Ay ∈ ARn
âñå
òî÷êè
ñîåäèíÿþùåãî
èõ
îòðåçêà
èìåþò
âèä
λAx
+ (1 − λ)Ay = A λx +
+

(1 − λ)y [äëÿ λ ∈ [0; 1]]; òàê êàê λ, 1 − λ > 0, òî λx + (1 − λ)y ∈ Rn
+ . Êðîìå òîãî, ñèñòåìà
Ax 6 b íåñîâìåñòíà, çíà÷èò, b ∈
/ ARn
+.
Òåïåðü ïóñòü w = arg minp∈Rn+ ||b − Ap||, òîãäà b − Aw, Ax − Aw 6 0 äëÿ ëþáîãî x > 0
ñîãëàñíî äîêàçàííîìó âûøå óòâåðæäåíèþ. Òåïåðü äîêàæåì, ÷òî y = Aw − b  èñêîìûé.

200

Ýëåìåíòû òåîðèè ñëîæíîñòè
Äåéñòâèòåëüíî,
0 > b − Aw, Ax − Aw = (b − Aw)T (Ax − Aw) = (b − Aw)T A(x − w) ⇒ (Aw − b)T A(x − w) > 0

äëÿ ëþáîãî x ∈ Rn+ ; òîãäà ðàññìîòðèì x = w + ei , ãäå ei = (0, . . . 0, 1, 0, . . . 0), è ïîëó÷èì
| {z } | {z }
i−1

n−i

(Aw − b)T Aei > 0, íî (Aw − b)T Aei ðàâåí i-îé êîìïîíåíòå, ïîýòîìó y T A > 0. Â òî æå
âðåìÿ
y T b = y T (Aw − y) = y T Aw − y T y.

Íî (b − Aw)T A(x − w) 6 0, ïîäñòàâèì x = 0 è ïîëó÷èì −(b − Aw)T Aw = y T Aw 6 0; òàê
êàê y T y > 0 [âåäü Aw − b 6= 0], òî y T b < 0.
Òåïåðü äîêàæåì, ÷òî â óñëîâèè äåéñòâèòåëüíî àëüòåðíàòèâà, òî åñòü îáà óñëîâèÿ íå
ìîãóò âûïîëíÿòüñÿ îäíîâðåìåííî. Èíûìè ñëîâàìè, åñëè åñòü y ∈ Rn òàêîé, ÷òî AT y > 0,
y T b < 0, òî ñèñòåìà íåðàâåíñòâ íå ìîæåò áûòü ñîâìåñòíîé. Åñëè áû ñèñòåìà Ax = b áûëà
ñîâìåñòíà, òî (y T A)x = y T (Ax) = y T b, y T A > 0, y T b < 0, òîãäà y T Ax > 0 è y T Ax < 0
îäíîâðåìåííî.

Òåïåðü âûâåäåì èç ëåììû Ôàðêàøà ñëåäóþùåå ñëåäñòâèå:

Èìååò ìåñòî ñëåäóþùàÿ àëüòåðíàòèâà.
• Ñèñòåìà Ax 6 b ñîâìåñòíà;
• Ñóùåñòâóåò y ∈ R òàêîé, ÷òî A y = 0, y
n
+

T

Äåéñòâèòåëüíî, ïóñòü íå ñóùåñòâóåò òàêîãî y ∈
ñèñòåìà


A11 . . . A1n b1
 A21 . . . A2n b2  


zT  .
..
..  = 0 . . .
..
 ..
.
.
.
An1 . . . Ann bn

T

b = −1

Rn
+,

0

.

÷òî AT y = 0, y T b = −1. Òîãäà


−1 ,

z>0



íåñîâìåñòíà. Òðàíñïîíèðóåì ðàâåíñòâî âûøå, ïîëó÷èì, ÷òî ñèñòåìà Ab z = 0 . . . 0 −1

T
íå èìååò ðåøåíèÿ. Ñëåäîâàòåëüíî, ñóùåñòâóåò òàêîé âåêòîð y1 y2 . . . yn+1 òàêîé,
÷òî





y1
A11 . . . A1n b1
y1

 A21 . . . A2n b2   y2 




 y2 

0 . . . 0 −1  .  < 0.
  .  > 0,
 .
.
.
.
..
..
..   .. 
 .. 
 ..
yn+1
yn+1
An1 . . . Ann bn

201

Ýëåìåíòû òåîðèè ñëîæíîñòè
Çäåñü yi ∈ R. Òîãäà â ñèëó ïîñëåäíåãî ðàâåíñòâà −yn+1 < 0, òî åñòü yn+1 > 0; òîãäà â
ñèëó ïåðâîãî ðàâåíñòâà


 
 
 
A11 . . . A1n b1
y1
A11 . . . A1n
y1
b1
 A21 . . . A2n b2   y2   A21 . . . A2n   y2 
 b2 


 
 
 
 .
..
..   ..  =  ..
..   ..  + yn+1  ..  > 0
..
..
 ..
.
.
.
.
.  .   .
.  . 
An1 . . . Ann bn
yn+1
An1 . . . Ann
yn
bn
iT
h
T

yn
y1
. . . yn+1
.
Òîãäà A y1 . . . yn > −yn+1 b, è ñèñòåìà Ax 6 b èìååò ðåøåíèå x = − yn+1
Ðàçóìååòñÿ, åñëè ñèñòåìà Ax 6 b ñîâìåñòíà, òî íå ñóùåñòâóåò òàêîãî y ∈ Rn+ , ÷òî AT y = 0,
y T b = −1; àëüòåðíàòèâíîñòü äîêàçûâàåòñÿ òàê æå, êàê â ëåììå Ôàðêàøà.
Èòàê, ïîëó÷àåòñÿ, ÷òî ÿçûê íåñîâìåñòíûõ ñèñòåì íåðàâåíñòâ ìîæíî çàäà÷òü ïðåäèêàòîì
R({A, b}, y) = ∃y ∈ RN ,

AT y = 0, y T b = −1

Îñòàëîñü òîëüêî ïðîâåðèòü, ÷òî y ïîëèíîìèàëüíî îãðàíè÷åí ïî âõîäó, à èñòèííîñòü
R({A, b}, y) ìîæíî ïðîâåðèòü çà íå áîëåå ÷åì ïîëèíîìèàëüíîå âðåìÿ; òåì ñàìûì ìû
äîêàæåì, ÷òî ÿçûê íåñîâìåñòíûõ ñèñòåì íåðàâåíñòâ ëåæèò â NP.
Íà âõîä ïîäàþòñÿ Aij , bi ∈ Z, èñêîìûé y ∈ QN ; äîêàæåì ïîëèíîìèàëüíîñòü ðàçìåðà
ñåðòèôèêàòà. Ïóñòü h = max Aij ; òîãäà ñóùåñòâóåò òàêîå ðåøåíèå AT z = 0, ÷òî
max zi 6

max

j1 ,...jrk(A)

det[Aj1 ,...jrk(A) ],

ãäå Aj1 ,...jrk(A)  ïîäìàòðèöà A, ñîñòàâëåííàÿ èç ñòîëáöîâ ñ íîìåðàìè j1 , . . . jrk(A) . Òàêèì îáðàçîì, äîñòàòî÷íî íàéòè z â êóáå [0; maxj1 ,...jrk(A) det[Aj1 ,...jrk(A) ]]N , à çàòåì óêàçàòü y = −z [êîíå÷íî, åñëè âñå êîîðäèíàòû ïîëîæèòåëüíû]. Ãðàíèöà íà êîîðäèíàòû
z,b

z ïîëèíîìèàëüíî îãðàíè÷åíà [íåêîòîðûì ìèíîðîì ïîäàííîé ìàòðèöû], òàêèì îáðàçîì,
êîîðäèíàòû y òàêæå îãðàíè÷åíû ïîëèíîìèàëüíî ïî âõîäó.
Èñòèííîñòü æå ïðåäèêàòà íà A, y, b ìîæíî ïðîâåðèòü çà ïîëèíîìèàëüíîå âðåìÿ: íóæíî ëèøü âû÷èñëèòü AT y è y T b, íà âû÷èñëåíèå èõ íóæíî íå áîëåå O(n3 ) àðèôìåòè÷åñêèõ
îïåðàöèé [ñëîæåíèÿ è óìíîæåíèÿ], àðôèìåòè÷åñêèå îïåðàöèè íà ÷èñëàõ íå áîëåå M ïî
ñëîæíîñòè íå ïðåâûøàþò (log M )2 . Ïðè âñå êîìïîíåíòû AT y ïîëèíîìèàëüíî îãðàíè÷åíû
[íàïðèìåð, n max |Aij | max |yi |], àíàëîãè÷íî
|y T b| = |y1 b1 + . . . + yn bn | 6 n max |yi | max |bi |.

Çíà÷èò, ïðîâåðêà èñòèííîñòè R({A, b}, y) ïîëèíîìèàëüíà ïî âðåìåíè.

202

Ýëåìåíòû òåîðèè ñëîæíîñòè

Ïîëèíîìèàëüíàÿ ñâîäèìîñòü
Àëãîðèòìû, ðåøàþùèå êîíêðåòíóþ çàäà÷ó, ìîæíî ÷àñòè÷íî óïîðÿäî÷èòü, îñíîâûâàÿñü íà èõ ñëîæíîñòè. Êëàññû çàäà÷ ìîæíî ÷àñòè÷íî óïîðÿäî÷èòü ïî âêëþ÷åíèþ, íàïðèìåð, P ∈ NP, à NP, â ñâîþ î÷åðåäü, âëîæåí â PSPACE. Íî êàê ñðàâíèòü ìåæäó
ñîáîé ðàçíûå çàäà÷è? Íàïðèìåð, î÷åâèäíî, ÷òî çàäà÷à ïîèñêà ìåäèàíû ïðîùå, ÷åì çàäà÷à ñîðòèðîâêè ìàññèâà, íî êàê ýòî ôîðìàëèçîâàòü? Äëÿ ýòèõ öåëåé ââîäèòñÿ ïîíÿòèå
.
Ïåðâîå, âïîëíå åñòåñòâåííîå îïðåäåëåíèå  ýòî ñâîäèìîñòü ïî Êóêó.

ñâîäèìîñòè

Îïðåäåëåíèå 5.46. Áóäåì ãîâîðèòü, ÷òî ÿçûê L1

ñâîäèòñÿ ïî Êóêó

ê L2 , åñëè ñóùåñòâóåò àëãîðèòì, êîòîðûé ìîæåò îáðàùàòüñÿ ê îðàêóëó äëÿ L2 (ò.å. âûçûâàòü ôóíêöèþ
f (y) = IL2 (y)) è ðàçðåøàåò L1 çà
âðåìÿ ïðè óñëîâèè, ÷òî êàæäûé âûçîâ
îðàêóëà òðåáóåò Θ(1) âðåìåíè.

ïîëèíîìèàëüíîå

Òî åñòü, åñëè ìû êàêèì-òî îáðàçîì ìîæåì áûñòðî óçíàòü, ïðèíàäëåæèò ëè ïðîèçâîëüíîå ñëîâî y ÿçûêó L2 , òî ìîæíî íàïèñàòü ïðîãðàììó, êîòîðàÿ ïðîâåðÿåò x ∈ L1
çà ïîëèíîìèàëüíîå âðåìÿ. Îäíàêî, îêàçûâàåòñÿ, ÷òî ýòà ñâîäèìîñòü çà÷àñòóþ ñëèøêîì
ñèëüíàÿ (òàê æå, êàê ñâîäèìîñòü ïî Òüþðèíãó): îíà äåéñòâóåò ìåæäó ðàçíûìè óðîâíÿìè
ïîëèíîìèàëüíîé èåðàðõèè, íî íå ïîçâîëÿåò äåòàëüíî èññëåäîâàòü îäèí óðîâåíü. Íàïðèìåð, î÷åâèäíî, ÷òî ëþáîé ÿçûê L ñâîäèòñÿ ïî Êóêó ê ñâîåìó äîïîëíåíèþ L, ïîýòîìó, â
÷àñòíîñòè, ëþáîé ÿçûê èç NP ñâîäèòñÿ ê íåêîòîðîìó ÿçûêó èç co − NP, è íàîáîðîò. Ýòî
îçíà÷àåò, ÷òî åñëè ìû õîòèì ðàçëè÷àòü êëàññû NP è co − NP (ñ îãîâîðêîé, ÷òî ìû íå
çíàåì, ñîâïàäàþò îíè èëè íåò), òî íåëüçÿ îòîæäåñòâëÿòü ÿçûêè, êîòîðûå ñâîäÿòñÿ äðóã
ê äðóãó ïî Êóêó.
Äðóãîé âèä ñõîäèìîñòè, êîòîðûé ìû è áóäåì èñïîëüçîâàòü  ýòî
(èëè
).

ñâîäèìîñòü

ïîëèíîìèàëüíàÿ

ñâîäèìîñòü ïî Êàðïó

ïîëèíîìèàëüíî ñâîäèòñÿ
ê L , åñëè ñóùåñòâóåò âû÷èñëèìàÿ âñþäó îïðåäåëåííàÿ ôóíêöèÿ f : Σ → Γ òàêàÿ, ÷òî

Îïðåäåëåíèå 5.47. Ïóñòü L1 ⊂ Σ∗ , L2 ⊂ Γ∗ , ãîâîðèì, ÷òî L1
2

∀x ∈ Σ∗





x ∈ L1 ⇐⇒ f (x) ∈ L2

Âûðàæåíèå L1 6m L2 ïîíèìàåòñÿ êàê ¾L1 p-ñâîäèòñÿ ê L2 ¿.
Ïîëèíîìèàëüíàÿ ñâîäèìîñòü îáëàäàåò ñëåäóþùèìè ñâîéñòâàìè:
(1)
(2)
(3)
(4)
(5)
(6)

L 6P L äëÿ ëþáîãî ÿçûêà L (ðåôëåêñèâíîñòü);
åñëè L1 6P L2 è L2 6P L3 , òî L1 6P L3 (òðàíçèòèâíîñòü);
åñëè L1 6P L2 , òî L1 6P L2 ;
åñëè L1 6 L2 ∈ P, òî L1 ∈ P;
åñëè L1 6 L2 ∈ NP, òî L1 ∈ NP;
åñëè L1 6 L2 ∈ co − NP, òî L1 ∈ co − NP.

203

Ýëåìåíòû òåîðèè ñëîæíîñòè
Ñëîæíîñòü êîíñòðóêòèâíîãî ðåøåíèÿ çàäà÷è ìîæíî ¾ðàñïðåäåëèòü¿ ìåæäó êîíñòðóêöèåé è äîêàçàòåëüñòâîì: ëèáî ñ áîëüøèìè òðóäíîñòÿìè äîêàçûâàòü êîððåêòíîñòü òðèâèàëüíîé êîíñòðóêöèè, ëèáî ñîçäàòü ãðîìîçäêóþ êîíñòðóêöèþ, äîêàçàòåëüñòâî êîððåêòíîñòè êîòîðîé ëåæèò íà ïîâåðõíîñòè. È îáû÷íî, ñòðîÿ ñâîäèìîñòè, ëþäè èçáèðàþò âòîðîé
ïóòü.

Ïðèìåð 5.48. ßçûê ÃÏ ñîñòîèò èç âñåõ ãðàôîâ, èìåþùèõ ãàìèëüòîíîâ ïóòü (íåñàìîïåðåñåêàþùèéñÿ ïóòü, ïðîõîäÿùèé ÷åðåç âñå âåðøèíû ãðàôà). ßçûê ÃÖ ñîñòîèò èç âñåõ
ãðàôîâ, èìåþùèõ ãàìèëüòîíîâ öèêë (öèêë, ïðîõîäÿùèé ÷åðåç âñå âåðøèíû, â êîòîðîì
âñå âåðøèíû, êðîìå ïåðâîé è ïîñëåäíåé, ïîïàðíî ðàçëè÷íû). Ïîñòðîèì ÿâíóþ ñâîäèìîñòü
ÿçûêîâ ÃÖ è ÃÏ äðóã ê äðóãó.
u0

u

v0

v1

v2

v1

u

v

vn
...

(a) HP 6p HC

...

vn
...

...

(b) HC 6p HP

Ñâîäèìîñòü ÃÖ ê ÃÏ ñòðîèòñÿ òðèâèàëüíî: ãðàôó G = (V, E) ñîïîñòàâèì ãðàô
Gu = (V ∪ {u}, E ∪ {(xu)|x ∈ V }); èíûìè ñëîâàìè, ïîëó÷èì íîâûé ãðàô èç G äîáàâëåíèåì íîâîé âåðøèíû, ñìåæíîé ñî âñåìè âåðøèíàìè ñòàðîãî ãðàôà. Òîãäà Gu ñîäåðæèò
ãàìèëüòîíîâ öèêë òèòòê G ñîäåðæèò ãàìèëüòîíîâ ïóòü: ïóñòü â ãàìèëüòîíîâîì öèêëå
â Gu âåðøèíû ðàñïîëîæåíû â ïîðÿäêå u, v1 , . . . , vn , u, òîãäà v1 , . . . , vn  ãàìèëüòîíîâ
ïóòü; åñëè æå v1 , . . . , vn  ãàìèëüòîíîâ ïóòü â G, òî u çàìûêàåò ýòîò ïóòü â ãàìèëüòîíîâ
öèêë â G. Íåñëîæíî óáåäèòüñÿ, ÷òî òàêàÿ ñâîäèìîñòü ïîëèíîìèàëüíà [äåòåðìèíèðîâàííûé àëãîðèòì äîáàâëÿåò íîâóþ ñòðî÷êó è íîâûé ñòîëáåö â ìàòðèöó ñìåæíîñòè ãðàôà,
çàïîëíåííûå åäèíèöàìè].
Òåïåðü ïî G = (V, E) è íåêîòîðîé v [íàïðèìåð, ïåðâîé ïî ïîðÿäêîâîìó íîìåðó 
ïîëîæèì, ÷òî âåðøèíû çàíóìåðîâàíû, à v  òà, ÷òî èìååò íîìåð 1] ïîñòðîèì íîâûé
ãðàô
Gv = (V ∪ {u, v 0 , u0 }, E ∪ {(v 0 x)|x ∈ V, ∃(vx) ∈ E} ∪ {(vu), (v 0 u0 )}).

204

Ýëåìåíòû òåîðèè ñëîæíîñòè
Ãîâîðÿ ïðîùå, ìû ¾êîïèðóåì¿ âåðøèíó v , äîáàâëÿÿ íîâóþ âåðøèíó v 0 ñ òåìè æå ñîñåäÿìè, ÷òî è v , à çàòåì äîñòðàèâàåì äâå âèñÿ÷èå âåðøèíû. Êîíñòðóêöèÿ çäåñü, êàê âîîáùå
â ñõîäèìîñòÿõ, îòíîñèòåëüíî ñëîæíà, çàòî äîêàçàòåëüñòâî êîððåêòíîñòè ñòàíîâèòñÿ òðèâèàëüíûì è ïðàêòè÷åñêè î÷åâèäíûì. Äåéñòâèòåëüíî, åñëè â G ñóùåñòâîâàë ãàìèëüòîíîâ
öèêë, òî ïóñòü îí ïðõîäèë âåðøèíû ãðàôà â ïîñëåäîâàòåëüíîñòè v1 → . . . → v → v1 (òî
åñòü v  ïîñëåäíÿÿ íåïîñåùåííàÿ âåðøèíà ãðàôà), òîãäà
u0 → v 0 → v 1 → . . . → v → u

 ãàìèëüòîíîâ ïóòü: ìû ïîñåòèëè u0 , v 0 è u ëèøü îäíàæäû, ïðîøëè ïî ãàìèëüòîíîâó
öèêëó â G, íå ïðîõîäÿ ïîñëåäíåå ðåáðî, òî åñòü ïîñåòèëè âñå âåðøèíû îðèãèíàëüíîãî
ãðàôà. Íàïðîòèâ, åñëè â Gv èìååòñÿ ãàìèëüòîíîâ ïóòü, òî åãî êîíöû åñòü íåïðåìåííî u è
u0 (ýòè âåðøèíû âèñÿ÷èå), è åñëè ãàìèëüòîíîâ ïóòü íà÷èíàåòñÿ â u0 , òî âòîðàÿ ïî ïîðÿäêó
âåðøèíà ðàâíà v 0 ; ïóñòü ãàìèëüòîíîâ ïóòü â Gv èìååò âèä
u0 → v 0 → v1 → . . . → v → u,

òîãäà
v1 → . . . → v → v1

åñòü ãàìèëüòîíîâ öèêë â G: ìû ïðîñòî óáðàëè u0 , v 0 è u, ïîëó÷èëè ÷àñòü ãàìèëüòîíîâà
ïóòè, ïðîõîäÿùóþ ïî âñåì âåðøèíàì G è çàìûêàåì åå â öèêë, òàê êàê v1 è v ñìåæíû.

Îïðåäåëåíèå 5.49. Ïóñòü äàí íåêîòîðûé êëàññ ÿçûêîâ C . ßçûê L íàçûâàåòñÿ C -òðóäíûì,
åñëè ëþáîé ÿçûê L0 ∈ C ïîëèíîìèàëüíî ñâîäèòñÿ ê L. ßçûê L íàçûâàåòñÿ C
L ∈ C è îí ÿâëÿåòñÿ C -òðóäíûì.

-ïîëíûì, åñëè

Ïîíÿòèå ïîëíîòû àíàëîãè÷íî ïîíÿòèþ óíèâåðñàëüíîãî ìíîæåñòâà äëÿ ïåðå÷èñëèìûõ
(èëè êîïåðå÷èñëèìûõ) ÿçûêîâ.
Î÷åâèäíû ñëåäóþùèå ñâîéñòâà ïîëíûõ è òðóäíûõ ÿçûêîâ:
(1) åñëè L1 6P L2 è L1  C -òðóäíûé, òî L2 òîæå C -òðóäíûé â ñèëó òðàíçèòèâíîñòè;
(2) åñëè L  C -òðóäíûé (ïîëíûé), òî L  co − C -òðóäíûé (ïîëíûé).
Ðàññìîòðèì êëàññ P. Êàæåòñÿ, âñå ÿçûêè äîëæíû áûòü P-òðóäíûìè, âåäü ìû ìîæåì
ïðîñòî ïðîâåðèòü, ïðèíàäëåæèò ëè ñëîâî ÿçûêó L ∈ P, çà ïîëèíîìèàëüíîå âðåìÿ. Îäíàêî, ñëåäóåò ïîìíèòü î äâóõ èñêëþ÷åíèÿõ  òðèâèàëüíûõ ÿçûêàõ ∅ è Σ∗ . Èç îïðåäåëåíèÿ
ñâîäèìîñòè ïî Êàðïó ñðàçó ñëåäóåò, ÷òî L 6P ∅ òîãäà è òîëüêî òîãäà, êîãäà L = ∅. Àíàëîãè÷íî, åäèíñòâåííûé ÿçûê, ñâîäÿùèéñÿ ê Σ∗  ýòî îí ñàì. Âñå æå îñòàëüíûå ÿçûêè
äåéñòâèòåëüíî ÿâëÿþòñÿ P-òðóäíûìè.
Ìåíåå î÷åâèäíî, êàê îáñòîÿò äåëà ñ êëàññàìè NP, co − NP è ò.ä., åñòü ëè äëÿ íèõ
òðóäíûå èëè ïîëíûå ÿçûêè? Îêàçûâàåòñÿ, åñòü. Êëàññè÷åñêèì ïðèìåðîì NP-ïîëíîãî
ÿçûêà ñëóæèò SAT, ò.å. ÿçûê âñåõ âûïîëíèìûõ áóëåâûõ ôîðìóë. Ïðèâåäåì íàáðîñîê
äîêàçàòåëüñòâà òîãî, ÷òî SAT ÿâëÿåòñÿ NP-òðóäíûì.
205

Ýëåìåíòû òåîðèè ñëîæíîñòè

Òåîðåìà 5.50 (òåîðåìà Êóêà-Ëåâèíà). Îïðåäåëèì SAT  ÿçûê áóëåâûõ ôîðìóë â êîíúþêòèâíîé íîðìàëüíîé ôîðìå, êîòîðûå âûïîëíèìû, òî åñòü ðàâíû 1 õîòÿ áû íà îäíîì
íàáîðå çíà÷åíèé ïåðåìåííûõ. ßçûê SAT ÿâëÿåòñÿ N P -ïîëíûì.
Äîêàçàòåëüñòâî. Ïóñòü L  íåêîòîðûé ÿçûê èç NP, à M  íåäåòåðìèíèðîâàííàÿ ÌÒ, ðàñïîçíàþùàÿ åãî çà âðåìÿ TM (n) 6 P (n). Ïóñòü Q  ìíîæåñòâî ñîñòîÿíèé
äàííîé ÌÒ, A  åå àëôàâèò (Σ ⊂ A). Äëÿ ñëîâà x ∈ Σ∗ ïîñòðîèì ñîîòâåòñòâóþùóþ áóëåâó ôîðìóëó FM,x = f (x). Âî-ïåðâûõ, ìîäèôèöèðóåì ÌÒ òàêèì îáðàçîì, ÷òîáû ïîñëå
ïåðåõîäà â ôèíàëüíîå ñîñòîÿíèå îíà çàöèêëèâàëàñü â íåì, ò.å. äîáàâèì ïåðåõîäû âèäà
(qA , a) → (qA , a, 0) è (qR , a) → (qR , a, 0). Çàòåì îïðåäåëèì ïåðåìåííûå, íàä êîòîðûìè ìû
t
ïîñòðîèì ôîðìóëó. Äëÿ íà÷àëà ââåäåì ïåðåìåííûå yi,a
, t, |i| 6 P (|x|), a ∈ A, êîòîðûå
áóäóò îòâå÷àòü çà òî, ÷òî íà øàãå t â ïîçèöèè i íà ëåíòå çàïèñàí ñèìâîë a. Ïåðåìåííûå
zit áóäóò èíäèêàòîðàìè òîãî, ÷òî íà øàãå t ãîëîâêà M íàõîäèòñÿ â ïîçèöèè i. Íàêîíåö, utq
áóäóò ïîêàçûâàòü, ÷òî íà t-ì øàãå ñîñòîÿíèå ìàøèíû åñòü q . Ôîðìóëó FM,x áóäåì ñòðîèòü êàê êîíúþíêöèþ ýëåìåíòàðíûõ âûðàæåíèé, îòâå÷àþùèõ çà íà÷àëüíîå ñîñòîÿíèå è
ïåðåõîäû ÌÒ. Âî-ïåðâûõ, ïîñòðîèì ÷àñòü ôîðìóëû, îòâå÷àþùóþ çà íà÷àëüíîå ñîñòîÿíèå:


 
 

|x|−1
^
^
^
^
0
0
0
0
0
yi,x ∧
Fstart := 
yi,a  ∧ z0 ∧
zi  ∧ uq0
u0q  .
i
i=0

a6=xi

|i|6P (|x|), i6=0

q∈Q\{q0 }

t
Çàòåì äëÿ êàæäîãî øàãà t 6 P (|x|) áóäåì äîáàâëÿòü ïîäôîðìóëó Ftrans
, îòâå÷àþùóþ çà
êîððåêòíîñòü ïåðåõîäà. Çàìåòèì, ÷òî ÌÒ ìîæåò ìåíÿòü ñîñòîÿíèå ëåíòû òîëüêî ëîêàëüíî, ïîýòîìó äëÿ ÿ÷ååê, êîòîðûå äîñòàòî÷íî äàëåêî îò ãîëîâêè, íóæíî ïðîñòî ñîõðàíèòü
òåêóùèé ñèìâîë:

t+1
t
t
t
zi−1
∨ zit ∨ zi+1
→ (yi,a
≡ yi,a
∧ zit+1 ≡ zit ).

Äëÿ òåõ æå ÿ÷ååê, êîòîðûå íàõîäÿòñÿ áëèçêî ê ãîëîâêå, òðåáóåòñÿ çàïèñàòü âñå äîïóñòèìûå èçìåíåíèÿ ñîãëàñíî ïðàâèëàì ïåðåõîäà äàííîé ÌÒ:
_
t
(zit ∧ utq ∧ yi,a
)→
...,
(q 0 ,b0 s)∈δ(q,a)

ãäå δ(q, a)  ìíîæåñòâî âñåõ äîïóñòèìûõ ïåðåõîäîâ èç ñîñòîÿíèÿ ãîëîâêè q è ñèìâîëà
(|x|)
íà ëåíòå a. Íàêîíåö, äîáàâèì ïðîâåðêó íà òî, ÷òî ìàøèíà ïðèíÿëà ñëîâî: uP
≡ 1.
qA
Ïîñòðîåííàÿ òàêèì îáðàçîì ôîðìóëà


^
t
(|x|)
FM,x = Fstart ∧ 
Ftrans  ∧ uP
qA
06t k .

(G, k) ëåæèò â ÿçûêå òèòòê ìíîæåñòâî âåðøèí ãðàôà ìîæíî ðàçáèòü íà äâà
íåïåðåñåêàþùèõñÿ ïîäìíîæåñòâà, ìåæäó êîòîðûìè ìîæíî ïðîâåñòè íå ìåíåå k
ðåáåð.

Ïîêàæåì, ÷òî íåêîòîðûå èç ýòèõ ÿçûêîâ òàêæå NP-ïîëíû.

Ïóñòü Ðîâíî-3-âûïîëíèìîñòü  ÿçûê ÊÍÔ, â êîòîðûõ êàæäûé äèçúþíêò ñîäåðæèò ðîâíî òðè ðàçëè÷íûõ ëèòåðàëà. ßçûê 3 − SAT ïîëèíîìèàëüíî ñâîäèòñÿ
ê ÿçûêó Ðîâíî-3-âûïîëíèìîñòü.
Òåîðåìà 5.51.

Äîêàçàòåëüñòâî. Ïóñòü íàì äàíà ÊÍÔ φ, â êîòîðîé íåêîòîðûå äèçúþíêòû, âîîáùå
ãîâîðÿ, ìîãóò ñîäåðæàòü íå áîëåå òðåõ ðàçëè÷íûõ ïåðåìåííûõ (îäíó èëè äâå, íàïðèìåð),
ïîñòðîèì ïî íåé φ̂ è ïîêàæåì, ÷òî

φ ∈ 3 − SAT ⇔ φ̂ ∈

Ðîâíî-3-âûïîëíèìîñòü

Ïðèâåäåì φ ê ÊÍÔ φ0 çàìåíîé êàæäîãî äèçúþíêòà íà äèçúþíêò, ñîäåðæàùèé òîëüêî
ðàçëè÷íûå ïåðåìåííûå. Íàïðèìåð, x ∨ y ∨ y ïåðåéäåò â x, à x ∨ x ∨ y ïåðåéäåò â x ∨ y .
Òåïåðü ïîñòðîèì φ̂ ïî φ0 , äîñòðîèâ êàæäûé äèçúþíêò äî 3-äèçúþíêòà, íå ìåíÿÿ
îáëàñòè èñòèííîñòè. Ïóñòü φ0 = α1 ∧ . . . αn ∧ β1 ∧ . . . ∧ βk ∧ γ1 ∧ . . . ∧ γl , ãäå αi ñîäåðæàò
îäíó ïåðåìåííóþ, βi  äâå, à γi  òðè. Äîáàâèì ïåðåìåííûå A, a, b è äëÿ êàæäîãî βi
ââåäåì
βei = (β ∨ ¬A) ∧ (A ∨ a ∨ b) ∧ (A ∨ ¬a ∨ b) ∧ (A ∨ a ∨ ¬b) ∧ (A ∨ ¬a ∨ ¬b).

Àíàëîãè÷íî äîáàâèì ïåðåìåííûå B, C, c, d, e, f è çàìåíèì êàæäûé αi íà αei [ïîëó÷èòñÿ
êîíúþíêöèÿ α ∨ ¬B ∨ ¬C è äèçúþêíòîâ âèäà B ∨ c±1 ∨ d±1 è C ∨ e±1 ∨ f ±1 ].
f1 ∧ . . . ∧ β
fk ∧ γ1 ∧ . . . ∧ γl  èñêîìàÿ. Äåéñòâèòåëüíî,
f1 ∧ . . . α
fn ∧ β
Äîêàæåì, ÷òî φ̂ = α
φ̂ ÿâëÿåòñÿ ðîâíî-3-ÊÍÔ, à åå îáëàñòü èñòèííîñòè ñîâïàäàåò ñ îáëàñòüþ èñòèííîñòè φ:
òàê êàê âñå äèçúþíêòû âèäà A ∨ a±1 ∨ ¬b±1 îäíîâðåìåííî âåðíû òîëüêî ïðè A = 1, òî
äèçúþíêò βi ∨¬A âûïîëíåí òèòòê âûïîëíåí βi ; ñèòóàöèÿ ñ αi ðàçáèðàåòñÿ àíàëîãè÷íî. 
 ñëåäóþùèõ íåñêîëüêèõ óòâåðæäåíèÿõ ψ(x1 , x2 , x3 ) = x1 ∨ x2 ∨ ¬x3 è χ(x1 , x2 ) =
(x1 ∨ x2 ) ∧ (x1 ∨ ¬x2 ) ∧ ¬x1 . Íàì ïðåäëàãàåòñÿ íà ýòèõ êîíêðåòíûõ ïðèìåðàõ ïîíÿòü
ïîëèíîìèàëüíûå ñâîäèìîñòè. Çàìåòèì, ÷òî ψ(1, 1, 1) = 1, ïîýòîìó ψ âûïîëíèìà, à χ
íèêîãäà íå âûïîëíèìà: ïåðâûå äâà ìîíîìà âûïîëíèìû îäíîâðåìåííî òîëüêî ïðè x1 = 1,
íî òîãäà íåâåðåí ïîñëåäíèé äèçúþíêò.

Òåîðåìà 5.52.

ßçûê 3 − SAT ïîëèíîìèàëüíî ñâîäèòñÿ ê ÿçûêó Âåðøèííîå ïîêðûòèå.

209

Ýëåìåíòû òåîðèè ñëîæíîñòè
Äîêàçàòåëüñòâî.

Ñ÷èòàåì áåç îãðàíè÷åíèÿ îáùíîñòè, ÷òî íàì äàíà ðîâíî-3-ÊÍÔ

φ = φ1 ∧ . . . ∧ φm ,

φi = φi [1] ∨ φi [2] ∨ φi [3],

φi [j] ∈ {x1 , . . . xn }.

Ïî ôîðìóëå φ ñòðîèòñÿ ãðàô Gφ = (Vφ , Eφ ), ãäå ìíîæåñòâî âåðøèí
!
!
[
[
Vφ =
{[xi ], [¬xi ]} ∪
{[φi [1]], [φi [2]], [φi [3]]} ,
i∈[1;n]

i∈[1;m]

à ðåáðà
Eφ =

[ n

[xi ], [¬xi ]

o

!

n

[



[φi [j1 ]], [φi [j2 ]]

o

!


i∈[1;m],j1 ,j2 ∈{1,2,3}

i∈[1;n]

n

[

!
o

[xi ], [φj [k]] |φj [k] ≡ xi
.

j∈[1;m], k∈{1,2,3}

Ãîâîðÿ ïðîùå, ìû ñòðîèì ãðàô Gφ òàêèì îáðàçîì. Äëÿ êàæäîé ëîãè÷åñêîé ïåðåìåííîé
xi îáðàçóåì ïàðó ñìåæíûõ ¾ëèòåðàëüíûõ¿ âåðøèí, ïîìå÷åííûõ, ñîîòâåòñòâåííî, xi è
¬xi , à äëÿ êàæäîãî 3-äèçúþíêòà φi îáðàçóåì òðè ñìåæíûå ¾äèçúþíêòíûå¿ âåðøèíû,
ïîìå÷åííûõ ïåðåìåííûìè ýòîãî äèçúþíêòà; êàæäóþ äèçúþíêòíóþ âåðøèíó ñîåäèíèì ñ
ñîîòâåòñòâóþùåé ëèòåðàëüíîé âåðøèíîé, èìåþùåé òó æå ìåòêó. Åñëè φ èìåëà m äèçúþêòîâ, òî, ïî ïîñòðîåíèþ, Gφ èìååò 2n + 3m âåðøèí è íå áîëåå 2n+3m
ðåáåð. Ïîýòîìó
2
ïîñòðîåíèå ãðàôà Gφ  ïîëèíîìèàëüíàÿ ïî äëèíå ôîðìóëû φ ïðîöåäóðà: n = O(|φ|),
m = O(|φ|).
×èòàòåëü ïðèãëàøàåòñÿ ñàìîñòîÿòåëüíî ïðîâåðèòü, ÷òî îòîáðàæåíèå φ 7→ Gφ äåéñòâèòåëüíî çàäàåò ñâîäèìîñòü, à â ýòîé çàäà÷å ìû ïîêàæåì, êàê òàêîå äîêàçàòåëüñòâî
ðàáîòàåò íà êîíêðåòíûõ ïðèìåðàõ.
(a) Äëÿ ψ(x1 , x2 , x3 ) = x1 ∨ x2 ∨ ¬x3 íàäî íàéòè 5-âåðøèííîå ïîêðûòèå. Âîò îíî:
x1

x2

x1

x3

x2

x3

φ[2]

φ[1]

φ[3]

Íåñëîæíî óáåäèòüñÿ â òîì, ÷òî âûäåëåííûå ãîëóáûì öâåòîì âåðøèíû äîñòàâëÿþò 5-ïîêðûòèå. Çàìåòèì, ÷òî ìû âûáðàëè íàáîð çíà÷åíèé x1 = 0, x2 = 1, x3 = 1
210

Ýëåìåíòû òåîðèè ñëîæíîñòè
è ñîîòâåòñòâóþùèì îáðàçîì âûáðàëè âåðøèíû: åñëè xi = 1, òî ìû âûáèðàåì [xi ]
â ïîêðûòèå, â ïðîòèâíîì ñëó÷àå âûáèðàåì [¬xi ]. Âûáðàâ ïî n ¾ëèòåðàëüíûõ¿
âåðøèí, ìû ïðîñòî äîáàâëÿåì åùå 2m ¾äèçúþíêòíûõ¿ âåðøèí, ÷òîáû ïîêðûòü
îñòàëüíûå ðåáðà  ïî äâà â êàæäûé ¾äèçúþíêòíûé¿
òðåóãîëüíèê.

(b) Çàìåòèì ñíà÷àëà, ÷òî ëþáîå ðåáðî [xi ], [¬xi ] äîëæíî áûòü ïîêðûòî õîòÿ áû
îäíîé âåðøèíîé, à êàæäûé òðåóãîëüíèê ñ âåðøèíàìè â [ψi [1]], [ψi [2]] è [ψi [3]]
äîëæåí áûòü ïîêðûò õîòÿ áû äâóìÿ âåðøèíàìè  îäíà âåðøèíà ïîêðûâàåò
ðîâíî äâå ñòîðîíû èç òðåõ. Òîãäà íåçàâèñèìî îò òîãî, íà êàêóþ ýêâèâàëåíòíóþ ðîâíî-3-ÊÍÔ ìû çàìåíèì èñõîäíóþ χ (à òàêèõ ìîãëî áûòü î÷åíü ìíîãî,
íàïðèìåð, χ(x1 , x2 ) ∨ ψ(y1(1) , y2(1) , y3(1) ) ∨ . . . ∨ ψ(y1(N ) , y2(N ) , y3(N ) ), ãäå ψ  3-ÊÍÔ,
êîòîðàÿ ðàññìàòðèâàëàñü ïóíêòîì âûøå, yj(i)  îòëè÷íûå îò x1 è x2 ïåðåìåííûå, à N ìîæåò áûòü ëþáûì), âåðøèííîå ïîêðûòèå áóäåò ñîäåðæàòü íå ìåíåå
nnew + 2mnew âåðøèí. Ïîêàæåì, ÷òî ðîâíî ñòîëüêî âåðøèí â âåðøèííîì ïîêðûòèè Gχ íå ìîæåò ñîäåðæàòüñÿ (îïÿòü-òàêè, íåçàâèñèìî îò ðîâíî-3-ÊÍÔ, íà
êîòîðóþ ìû çàìåíèëè ξ ).
Âîèñòèíó, åñëè â ïîêðûòèè ðîâíî nnew + 2mnew âåðøèí, òî èçêàæäûõ äâóõ
[xi ] è [¬xi ] âûáðàíà ðîâíî îäíà (ïîêðûâàþùàÿ ðåáðî [xi ], [¬xi ] ). Òîãäà ïîäñòàâèì â χ çíà÷åíèÿ xi = 1, åñëè â ïîêðûòèè âûáðàíà âåðøèíà [xi ], è xi = 0,
åñëè â ïîêðûòèè âûáðàíà âåðøèíà [¬xi ], è âûáåðåì èç êàæäîãî òðåóãîëüíèêà

ïî äâå âåðøòíû, ÷òîáû ïîêðûòü îñòàâøèåñÿ ðåáðà âèäà [x±
i ], [φj [k]] ; ïîêàæåì,
÷òî ïðè ïîëó÷åííîì íàáîðå çíà÷åíèé ïåðåìåííûõ χ = 1. Äåéñòâèòåëüíî, ìèíèìàëüíîå ïîêðûòèå ïîêðûâàåò âñå ðåáðà âèäà [xi ], [¬xi ] è òðåóãîëüíèêè âèäà
{φi [1], φi [2], φi [3]}, äâå èç òðåõ âûáðàííûõ
âåðøèí â òðåóãîëüíèêå ïîêðûâàþò

äâà ¾èñõîäÿùèõ¿ ðåáðà [xi ], [φj [k]] , ïîýòîìó òðåòüå ¾èñõîäÿùåå¿ ðåáðî äîëæíî áûòü ïîêðûòî ¾ëèòåðàëüíîé âåðøèíîé¿ [xi ] (èëè [¬xi ]). Ïîýòîìó êàæäûé
äèçúþíêò óäîâëåòâîðÿåòñÿ õîòÿ áû îäíîé ïåðåìåííîé (èëè åå îòðèöàíèåì), òàêèì îáðàçîì, φ = 1 íà òåêóùåì íàáîðå. Âûøå ìû óæå ïîêàçàëè, ÷òî òàêîãî
íàáîðà ïåðåìåííûõ íå ñóùåñòâóåò.
Ðåçþìèðóÿ, ìîæíî ñêàçàòü ñëåäóþùåå: íà ÿçûêå ãðàôîâ âûïîëíèìîñòü ÊÍÔ
âûðàæàåòñÿ êàê ¾õîòÿ áû îäíî èñõîäÿùåå ðåáðî êàæäîãî äèçúþíêòíîãî òðåóãîëüíèêà ïîêðûâàåòñÿ ëèòåðàëüíîé âåðøèíîé¿.


Òåîðåìà 5.53.

ßçûê 3 − SAT ïîëèíîìèàëüíî ñâîäèòñÿ ê ÿçûêó Êëèêà.

Äîêàçàòåëüñòâî. Âîîáùå ìû ìîæåì íè ÷åðòà íå äåëàòü, èìåÿ íà ðóêàõ ðåøåíèå
ïðîøëîé çàäà÷è, âåäü ñëåäóþùèå äâà óòâåðæäåíèÿ ýêâèâàëåíòíû:

• R ⊂ V (G)  âåðøèííîå ïîêðûòèå ãðàôà G;

211

Ýëåìåíòû òåîðèè ñëîæíîñòè
• V (G)\R ⊂ V (G{ )  êëèêà â äîïîëíåíèè ãðàôà G{ = (V, E { ), ãäå E { = {(xy)|x, y ∈
V, (xy) ∈
/ E}.

Äåéñòâèòåëüíî, R ⊂ V (G)  âåðøèííîå ïîêðûòèå ãðàôà G òèòòê V (G) \ R ⊂ V (G)
ÿâëÿåòñÿ íåçàâèñèìûì ìíîæåñòâîì: åñëè íåêîòîðûå äâå âåðøèíû v1 , v2 ∈ V (G) \ R ñîåäèíåíû ðåáðîì, òî õîòÿ áû îäíà èç ýòèõ äâóõ âåðøèí ëåæèò â R, ÷òî íåâîçìîæíî; îáðàòíîå âåðíî àíàëîãè÷íî. È V (G) \ R ⊂ V (G) ÿâëÿåòñÿ íåçàâèñèìûì ìíîæåñòâîì òèòòê
V (G) \ R ⊂ V (G{ ) îáðàçóåò êëèêó â äîïîëíåíèè ê ãðàôó: âñå íåñìåæíûå âåðøèíû â G
áóäóò ñìåæíû â G{ è íàîîáîðîò.

(a) Äëÿ ψ(x1 , x2 , x3 ) = x1 ∨ x2 ∨ ¬x3 íàäî íàéòè 4-êëèêó â G̃ψ . Âîçüìåì G̃ψ = G{ψ ,

à íà ðèñóíêå â ïðîøëîé çàäà÷å áûëè íå âûáðàíû âåðøèíû [¬x1 ], [¬x2 ], [x3 ] è
[φ[2]]. Îíè ïîïàðíî íåñìåæíû â Gψ , ñëåäîâàòåëüíî, â G̃ψ îíè îáðàçóþò 4-êëèêó.
(b) Êîìáèíèðóåì âòîðîé ïóíêò ïðåäûäóùåé çàäà÷è ñ äîêàçàííûì â íà÷àëå ýòîé
çàäà÷è óòâåðæäåíèå è ñðàçó ïðèõîäèì ê óñïåõó: ëþáîå âåðøèííîå ïîêðûòèå
G äîëæíî áûëî èìåòü áîëåå nnew + 2mnew , çíà÷èò, â äîïîëíåíèè êëèêà áóäåò
ñîäåðæàòü íå áîëåå nnew + mnew âåðøèí.


Òåîðåìà 5.54.
ê

ßçûê Ãàìèëüòîíîâ öèêë NP-ïîëîí.

Äîêàçàòåëüñòâî.

Ãàìèëüòîíîâ öèêë.

Òåîðåìà 5.55.

Ìîæíî íàïðÿìóþ ïîñòðîèòü ïîëèíîìèàëüíóþ ñâîäèìîñòü 3 − SAT
Äîêàçàòåëüñòâî ìîæíî íàéòè â [36] èëè [34].


ßçûê 3 − SAT ïîëèíîìèàëüíî ñâîäèòñÿ ê ÿçûêó MAX − 2 − SAT.

Äîêàçàòåëüñòâî. Ïî ðîâíî-3-ÊÍÔ φ = φ1 ∧ . . . ∧ φn ïîñòðîèì 2-ÊÍÔ Φ = Φ1 ∧ . . . ∧
Φn , ãäå äëÿ φi = ai ∨ bi ∨ ci (ai , bi , ci  ïåðåìåííûå èëè èõ îòðèöàíèÿ) Φi  êîíúþíêöèÿ
ñëåäóþùèõ äåñÿòè äèçúþíêòîâ

ai , bi , ci , di ,

¬ai ∨ ¬bi , ¬bi ∨ ¬ci , ¬ci ∨ ¬ai ,

ai ∨ ¬di , bi ∨ ¬di , ci ∨ ¬di .

Äîêàçàòåëüñòâî ñâîäèìîñòè îñíîâàíî íà ñëåäóþùåì óòâåðæäåíèè: φi âûïîëíèìà òèòòê
ïðè íåêîòîðîì çíà÷åíèè di â Φi âûïîëíèìî íå ìåíåå q äèçúþíêòîâ. Óòâåðæäàåòñÿ, ÷òî
q = 7. Äåéñòâèòåëüíî, åñëè õîòÿ áû êàêîé-òî èç äèçúþíêòîâ ai , bi è ci ðàâåí 1 è âëå÷åò
òàêèì îáðàçîì âûïîëíåíèå φi , òî ìîæíî ïîäîáðàòü íåêîòîðîå di :
• îäèí èç òðåõ ai , bi , ci âåðåí, ñ÷èòàåì áåç îãðàíè÷åíèÿ îáùíîñòè, ÷òî ai = 1,
bi = ci = 0, òîãäà ïðè di = 0 âåðíû
ai , ¬ai ∨ ¬bi , ¬bi ∨ ¬ci , ¬ci ∨ ¬ai , ai ∨ ¬di , bi ∨ ¬di , ci ∨ ¬di ,

òî åñòü 7 øòóê [à ïðè di = 1 ñòàíåò âûïîëíèìûì di è ïåðåñòàíåò bi ∨ ¬di , òàê
÷òî ÷èñëî âûïîëíèìûõ äèçúþíêòîâ íå óâåëè÷èòñÿ];
212

Ýëåìåíòû òåîðèè ñëîæíîñòè
• äâà èç òðåõ ai , bi , ci âåðåí, ñ÷èòàåì áåç îãðàíè÷åíèÿ îáùíîñòè, ÷òî ai = bi = 1,
ci = 0, òîãäà ïðè di = 1 âåðíû
ai , bi , di , ¬bi ∨ ¬ci , ¬ci ∨ ¬ai ,

ai ∨ ¬di , bi ∨ ¬di ,

è ñíîâà âûïîëíåíû 7 äèçúþíêòîâ [à ïðè di = 0 ïåðåñòàíåò âûïîëíÿòüñÿ di è
ñòàíåò âåðíûì ci ∨ ¬di , ÷èñëî âûïîëíèìûõ äèçúþêíòîâ íå ïðåâûñèò 7];
• âñå òðè ai , bi , ci âûïîëíåíû, òîãäà ïðè di = 1 âåðíû
ai , bi , ci , di , ai ∨ ¬di , bi ∨ ¬di , ci ∨ ¬di ,

òî åñòü 7 øòóê [à ïðè di = 0 íå âûïîëíÿëñÿ áû di , èñòèííîñòü îñòàëüíûõ äèçúþíêòîâ ñîõðàíèëàñü].
Íåðàññìîòðåííûå ñëó÷àè çíà÷åíèÿ ïåðåìåííûõ ñèììåòðè÷íû ðàññìîòðåííûì.
À åñëè ai = bi = ci = 0, òî ïðè di = 1 äèçúþíêòû ai , bi , ci , di íå áóäóò âûïîëíåíû,
à ïðè di = 0 íå âûïîëíåíû ai , bi , ci è âñå äèçúþíêòû, ñîäåðæàùèå di ; òàêèì îáðàçîì,
íå áîëåå 6 äèçúþíêòîâ áóäóò âûïîëíåíû. Áîëåå òîãî, â Φ = Φ1 ∧ . . . ∧ Φn áóäóò âûïîëíèìû 7n äèçúþíêòîâ òèòòê â êàæäîì Φi âûïîëíèìî 7 äèçúþíêòîâ [ìû ïåðåáðàëè âñå
âàðèàíòû âûøå, áîëüøå 7 äèçúþíêòîâ íå ìîãóò âåðíû îäíîâðåìåííî], ÷òî ýêâèâàëåíòíî
îäíîâðåìåííîé âûïîëíèìîñòè âñåõ φi .
Ïðîäåìîíñòðèðóåì ýòó ñâîäèìîñòü íà êîíêðåòíûõ ïðèìåðàõ. Äëÿ ψ = x1 ∨ x2 ∨ ¬x3
èìååì

ψ̃ = x1 ∧ x2 ∧ ¬x3 ∧ y ∧ (¬x1 ∨ ¬x2 ) ∧ (¬x2 ∨ x3 ) ∧ (x3 ∨ ¬x1 ) ∧ (x1 ∨ ¬y) ∧ (x2 ∨ ¬y) ∧ (¬x3 ∨ ¬y

Ïðè x1 = 1, x2 = 1, x3 = 0, y = 1 âûïîëíÿåòñÿ õîòÿ áû 7 äèçúþíêòîâ ôîðìóëû ψ̃ .

Òåîðåìà 5.56.



ßçûê Ðàçáèåíèå NP-ïîëîí.

Äîêàçàòåëüñòâî. Ñâåä¼ì ÿçûê 3 − SAT ê ÿçûêó Ðàçáèåíèå. Ðàññìîòðèì ïðîèçâîëüíóþ 3-ÊÍÔ ϕ, â êîòîðîé åñòü n ïåðåìåííûõ x1 , . . . , xn è m äèçúþíêòîâ c1 , . . . , cm .
Ïîñòðîèì ìíîæåñòâî S è ÷èñëî σ ñëåäóþùèì îáðàçîì. Äëÿ êàæäîé ïåðåìåííîé ïîñòðîèì
äâà ÷èñëà äëèíû n + m â äåñÿòè÷íîé ñèñòåìå ñ÷èñëåíèÿ: ti è fi . Çàäàäèì èõ ïî ïðàâèëàì:
• äëÿ i = 1, 2, . . . , n i-å öèôðû ÷èñåë ti è fi ðàâíû åäèíèöå;
• ÷èñëî ti èìååò j -þ öèôðó ðàâíóþ 1 äëÿ j = n + 1, n + 2, . . . , n + m, åñëè ëèòåðàë
xi åñòü â äèçúþíêòå cj−n ;
• ÷èñëî fi èìååò j -þ öèôðó ðàâíóþ 1 äëÿ j = n + 1, n + 2, . . . , n + m, åñëè ëèòåðàë
¬xi åñòü â äèçúþíêòå cj−n ;
• îñòàëüíûå öèôðû ÷èñåë ti è fi ïîëîæèì ðàâíûìè íóëþ.
Ïîëó÷èëè 2n ÷èñåë. Äîáàâèì âî ìíîæåñòâî S åù¼ 2m ÷èñåë äëèíû n + m. Äëÿ êàæäîãî
äèçúþíêòà ci ïîñòðîèì ÷èñëà yi è zi , êîòîðûå èìåþò (n + i)-þ öèôðû ðàâíóþ åäèíèöå, à
îñòàëüíûå öèôðû  íóëè. Íàïðèìåð, äëÿ 3-ÊÍÔ ϕ = (x1 ∨x2 ∨x3 )∧(¬x1 ∨¬x2 ∨x3 )∧(¬x1 ∨
x2 ∨ ¬x3 ) ∧ (x1 ∨ ¬x2 ∨ x3 ) ìû ïîëó÷èì ñëåäóþùèå ÷èñëà (äëÿ óäîáñòâà çàïèøåì ýòî âñ¼ â

213

Powered by TCPDF (www.tcpdf.org)

Ýëåìåíòû òåîðèè ñëîæíîñòè
âèäå òàáëèöû: â êàæäîé ñòðî÷êå, íà÷èíàÿ ñî âòîðîé, çàïèñàíû ñîîòâåòñòâóþùèå ÷èñëà;
ïîñëå ïåðâûõ n öèôð çàïèøåì ðàçäåëèòåëü îïÿòü-òàêè èñêëþ÷èòåëüíî äëÿ óäîáñòâà).
×èñëîì σ ó íàñ áóäåò ÷èñëî äëè1 2 3 # 1 2 3 4
íû n+m â äåñÿòè÷íîé çàïèñè, ó êît
1
0 0 # 1 0 0 1
1
òîðîãî i-ÿ öèôðà ðàâíà 1 äëÿ 1 6
f1 1 0 0 # 0 1 1 0
i 6 n è j -ÿ öèôðà ðàâíà 3 äëÿ n +
t2 0 1 0 # 1 0 1 0
1 6 j 6 n + m. Òàêèì îáðàçîì, ìû
f
0 1 0 # 0 1 0 1
2
ïîñòðîèëè ïîëèíîìèàëüíî âû÷èñt
0
0 1 # 1 1 0 1
3
ëèìóþ ñâîäÿùóþ ôóíêöèþ. Óòâåðf3 0 0 1 # 0 0 1 0
æäàåòñÿ, ÷òî èñõîäíàÿ 3-ÊÍÔ âû# # # # # # # # #
ïîëíèìà òîãäà è òîëüêî òîãäà, êîy1 0 0 0 # 1 0 0 0
ãäà ïîëó÷åííàÿ ïàðà (S, t) ëåæèò â
z1 0 0 0 # 1 0 0 0
Ðàçáèåíèå.
y2 0 0 0 # 0 1 0 0
Âî-ïåðâûõ, åñëè ôîðìóëà âûz2 0 0 0 # 0 1 0 0
ïîëíèìà, òî íóæíî âçÿòü â ñóììó
ti , åñëè xi = 1 íà âûïîëíÿþùåì
y3 0 0 0 # 0 0 1 0
íàáîðå, è fi  â ïðîòèâíîì ñëóz3 0 0 0 # 0 0 1 0
÷àå; êðîìå òîãî, âîçüì¼ì yi â ñóìy4 0 0 0 # 0 0 0 1
ìó, åñëè â ci íå áîëåå äâóõ ëèòåz4 0 0 0 # 0 0 0 1
ðàëîâ ðàâíî åäèíèöå, à åñëè ðîâíî
îäèí ëèòåðàë  âîçüì¼ì åù¼ è yi .
Òîãäà ïåðâûå n öèôð ñóììû áóäåò ðàâíû åäèíèöå, à ïîñëåäíèå m öèôð áóäóò ðàâíû
3, ÷òî è òðåáîâàëîñü, òî åñòü (S, σ) ëåæèò â Ðàçáèåíèå.
Îáðàòíî: ïóñòü (S, σ) ëåæèò â Ðàçáèåíèå. Ïîêàæåì, ÷òî ôîðìóëà âûïîëíèìà. Âûïîëíÿþùèé íàáîð ñòðîèòñÿ ïî ñëàãàåìûì, âõîäÿùèì â ñóììó òî÷íî òàê æå, êàê ìû âûáèðàëè ñëàãàåìûå â ñóììó ïî âûïîëíÿþùåìó íàáîðó (íóæíî òîëüêî âñ¼ â îáðàòíîì ïîðÿäêå
ïðîäåëàòü).

Óòâåðæäåíèå ïðåäûäóùåé òåîðåìû âåðíî, åñëè ìîùíîñòü àëôàâèòà õîòÿ áû 2. Â óíàðíîì
àëôàâèòå çàäà÷à ðàçáèåíèÿ â ñóììó ìíîæåñòâ ðàçðåøèìà çà ïîëèíîìèàëüíîå âðåìÿ.

Óòâåðæäåíèå 5.57.

Ïóñòü Óíàðíîå ðàçáèåíèå  ÿçûê

n
({aa1 , . . . aan })

∀i ai ∈ N, ∃B ⊂ [1; n],

Ýòîò ÿçûê ïðèíàäëåæèò êëàññó P.

X
i∈B

ai =

X

o
ai .

i∈B
/

Äîêàçàòåëüñòâî. Çàìåòèì, ÷òî ðàçìåð âõîäà âûðîñ ýêñïîíåíöèàëüíî. Åñëè ïåðåâåñòè åãî â äâîè÷íóþ ñèñòåìó ñ÷èñëåíèÿ, òî ïîëó÷èì çàäà÷ó Ðàçáèåíèå, êîòîðàÿ ïîëíà
â N P . Ïîñêîëüêó NP ⊆ EXPTIME è ýêñïîíåíöèàëüíîå ïî âõîäó ÿçûêà Ðàçáèåíèå

214

Ýëåìåíòû òåîðèè ñëîæíîñòè
âðåìÿ  ýòî ïîëèíîìèàëüíîå ïî âõîäó ÿçûêà
ðàçáèåíèå ëåæèò â P.

Óíàðíîå ðàçáèåíèå

âðåìÿ, òî

Óíàðíîå



Îñòîâíûå äåðåâüÿ ñ îãðàíè÷åíèÿìè. Èòàê, êàê ìû âèäåëè âûøå, çàäà÷à íàõîæäåíèÿ ìèíèìàëüíîãî îñòîâíîãî äåðåâà ìîæåò áûòü ðåøåíà çà ïîëèíîìèàëüíîå âðåìÿ.
Îäíàêî çàäà÷è ïîèñêà ìèíèìàëüíîãî îñòîâíîãî äåðåâà ñ íåêîòîðûìè îãðàíè÷åíèÿìè [íà
÷èñëî ëèñòüåâ, ñòåïåíü âåðøèí èòä.] îêàçûâàþòñÿ NP-ñëîæíû.
Îñòîâíîå äåðåâî ñî ñòåïåíüþ îãðàíè÷åíèÿ: Ïóñòü G  ñâÿçíûé ãðàô, à k ïîëîæèòåëüíîå öåëîå ÷èñëî. Ñóùåñòâóåò ëè îñòîâíîå äåðåâî T äëÿ G ñ ìàêñèìàëüíîé
ñòåïåíüþ íå áîëåå k?
Ìàêñèìàëüíîå ëèñòîâîå îñòîâíîå äåðåâî: Ïóñòü G  ñâÿçíûé ãðàô, à k ïîëîæèòåëüíîå öåëîå ÷èñëî. Åñòü ëè îñòîâíîå äåðåâî äëÿ G, èìåþùåå ïî êðàéíåé ìåðå
k ëèñòüåâ?
Ìèíèìàëüíîå ëèñòîâîå îñòîâíîå äåðåâî: Ïóñòü G  ñâÿçíûé ãðàô, à k ïîëîæèòåëüíîå öåëîå ÷èñëî. Åñòü ëè îñòîâíîå äåðåâî äëÿ G, èìåþùåå íå áîëåå k ëèñòüåâ?
Èçîìîðôíîå îñòîâíîå äåðåâî: Ïóñòü G  ñâÿçíûé ãðàô, à T  äåðåâî (ñêàæåì, îáà
îïðåäåëåíû íà n âåðøèíàõ). Åñòü ëè ó G îñòîâíîå äåðåâî, èçîìîðôíîå T ?
Ôîðìàëüíî îïðåäåëèì
• L1 = {(G, k) | ∃T  îñòîâíîå äåðåâî G, max degT (u) 6 k}
• L2 = {(G, k) | ∃T  îñòîâíîå äåðåâî G, T èìååò íå ìåíåå k ëèñòüåâ}
• L3 = {(G, k) | ∃T  îñòîâíîå äåðåâî G, T èìååò íå áîëåå k ëèñòüåâ}
• L4 = {(G, H) | ∃T  îñòîâíîå äåðåâî G, T ' H}
Òåîðåìà 5.58.

Âñå âåäåííûå âûøå ÿçûêè NP-ïîëíû.

Íåòðóäíî ïîñòðîèòü ïîëèíîìèàëüíóþ ñâîäèìîñòü ÿçûêà Ãàìèëüê ÿçûêàì L1 , L3 è L4 . Äåéñòâèòåëüíî, îñòîâíîå äåðåâî T ÿâëÿåòñÿ ãàìèëüòîíîâûì ïóòåì òèòòê âûïîëíåíû ñëåäóþùèå óñëîâèÿ:
• Âñå âåðøèíû èìåþò ñòåïåíü 1 èëè 2 â T .
• èìååò ðîâíî äâà ëèñòà.
•  ýòî ïóòü.
Òàêèì îáðàçîì, îòîáðàæåíèÿ
Äîêàçàòåëüñòâî.

òîíîâ ïóòü

f1 : G 7→ (G, 2),

f3 : G 7→ (G, 2),

f4 : ({v1 , . . . vn }, E) 7→ (({v1 , . . . vn }, E), ({v1 , . . . vn }, {v1 v2 , v2 v3 , . . . vn−1 vn }))

äåéñòâèòåëüíî çàäàþò ïîëèíîìèàëüíûå ñâîäèìîñòè Ãàìèëüòîíîâ
è L4 .

ïóòü

ê ÿçûêàì L1 , L3
215

Ýëåìåíòû òåîðèè ñëîæíîñòè
Äàëåå ìû ïîñòðîèì Äîìèíèðóþùåå ìíîæåñòâî 6p L2 . Äîñòàòî÷íî ïîêàçàòü, ÷òî
G èìååò ñâÿçíîå äîìèíèðóþùåå ìíîæåñòâî ðàçìåðîì íå áîëåå k òîãäà è òîëüêî òîãäà,
êîãäà G èìååò îñòîâíîå äåðåâî, èìåþùåå |V | − k ëèñòüåâ.
Ñíà÷àëà ïóñòü D  ñâÿçíîå äîìèíèðóþùåå ìíîæåñòâî G ñ ðàçìåðîì íå áîëåå k. Òàê
êàê GD (èíäóöèðîâàííûé ãðàô íà ïîäìíîæåñòâå âåðøèí D) ñâÿçåí, ó íåãî åñòü îñòîâíîå äåðåâî TD . Ìû ðàñøèðÿåì TD äî îñòîâíîãî äåðåâà T èç G ñëåäóþùèì îáðàçîì. Ïî
îïðåäåëåíèþ ëþáàÿ âåðøèíà u ∈
/ D èìååò ñîñåëà v ∈ D; ìû äîáàâëÿåì ñîîòâåòñòâóþùåå
ðåáðî eu = uv ê TU . Ñäåëàâ òàê äëÿ âñåõ u ∈
/ D, ìû ïîëó÷èì îñòîâíîå äåðåâî T äëÿ G, è
âñå ýòè âåðøèíû u ÿâëÿþòñÿ ëèñòüÿìè ïî ïîñòðîåíèþ. Òàêèì îáðàçîì, G äåéñòâèòåëüíî
èìååò îñòîâíîå äåðåâî ïî êðàéíåé ìåðå ñ |V | − k ëèñòüÿìè.
 îáðàòíóþ ñòîðîíó, ïóñòü T - îñòîâíîå äåðåâî äëÿ G ñ õîòÿ áû |V | − k ëèñòüÿìè.
Âûáåðåì D â êà÷åñòâå ìíîæåñòâà âñåõ âåðøèí, íå ÿâëÿþùèõñÿ ëèñòüÿìè T , òàê ÷òî
|D| 6 k. Êðîìå òîãî, D ÿâëÿåòñÿ äîìèíèðóþùèì ìíîæåñòâîì, òàê êàê êàæäûé ëèñò T
ñìåæåí ñ íå ëèñòîì, òàê êàê ìû ìîæåì ïðåäïîëîæèòü, ÷òî G èìååò êàê ìèíèìóì òðè
âåðøèíû. Î÷åâèäíî, ÷òî TD ÿâëÿåòñÿ îñòîâíûì äåðåâîì äëÿ GD , òàê ÷òî D äåéñòâèòåëüíî
ÿâëÿåòñÿ ñâÿçíûì äîìèíèðóþùèì ìíîæåñòâîì.


Âû÷èñëåíèå ïåðåñå÷åíèÿ ãðóïï. Òåïåðü ðàññìîòðèì çàäà÷ó Ïåðåñå÷åíèå ãðóïï:
äëÿ äàííûõ G = A è H = B  ïîäãðóïï â Symn  íàéòè G ∩ H .
Ïîêà íå èçâåñòåí ïîëèíîìèàëüíûé àëãîðèòì, ðàçðåøàþùèé ýòó çàäà÷ó, è ìû íå îæèäàåì, ÷òî îí ñóùåñòâóåò, èç-çà ñëåäóþùåé òåîðåìû.
Òåîðåìà 5.59.

set-stab

ïîëèíîìèàëüíî ñâîäèòñÿ ê Ïåðåñå÷åíèå ãðóïï è íàîîáîðîò.

6P Ïåðåñå÷åíèå ãðóïï:
Ïðåäïîëîæèì, ∆  ìíîæåñòâî, êîòîðûé ìû õîòèì ñòàáèëèçèðîâàòü, âñå, ÷òî íàì
íóæíî ñäåëàòü  âû÷èñëèòü G ∩ {Sym∆ × SymΩ\∆ }. Ìîæíî âûáðàòü òðàíñïîçèöèè êàê
ïîðîæäàþùåå ìíîæåñòâî ïðîèçâåäåíèÿ. Ïåðåñå÷åíèå äâóõ ìíîæåñòâ äàåò â òî÷íîñòè
Stab∆ (G).
Ïåðåñå÷åíèå ãðóïï 6P set-stab:
Ðàññìîòðèì ïðîèçâåäåíèå G × H 6 SymΩ × SymΩ 6 SymΩ×Ω è ïóñòü äåéñòâèå áóäåò
ïîêîîðäèíàòíûì, (g, h)(i, j) = (ig , j h ). Òåïåðü ñòàáèëèçèðóåì äèàãîíàëü:
Äîêàçàòåëüñòâî. set-stab

Ω × Ω = {(i, i) | i ∈ Ω},

è ýòî äàñò G ∩ H .



È ïîñêîëüêó ìû ãîâîðèì, ÷òî èçîìîðôèçì ãðàôîâ ñâîäèòñÿ ê set-stab, ìàëîâåðîÿòíî, ÷òî ó íàñ åñòü ïîëèíîìèàëüíûé àëãîðèòì äëÿ ðåøåíèÿ çàäà÷è ïåðåñå÷åíèÿ.
Îäíàêî äëÿ ÷àñòíîãî ñëó÷àÿ, êîãäà G íîðìàëèçóåò H (òî åñòü G 6 NSymΩ (H)), ìû
ìîæåì ðåøèòü çàäà÷ó ïåðåñå÷åíèÿ çà ïîëèíîìèàëüíîå âðåìÿ.
216

Ýëåìåíòû òåîðèè ñëîæíîñòè

Óòâåðæäåíèå5.60.

ëèíîìèàëüíîå âðåìÿ.

Åñëè G íîðìàëèçóåò H , òî ìû ìîæåì âû÷èñëèòü G ∩ H çà ïî-

Äîêàçàòåëüñòâî. Ìû èùåì áàøíþ ïîäãðóïï ñ õîðîøèìè ñâîéñòâàìè. È ïîñêîëüêó G íîðìàëèçóåò H , îñíîâíàÿ èäåÿ çàêëþ÷àåòñÿ â òîì, ÷òî GH = {gh | g ∈ G, h ∈ H}
ÿâëÿåòñÿ ïîäãðóïïîé â Symn . À òàêæå äëÿ âñåõ i ìíîæåñòâî G(i) H òàêæå ÿâëÿåòñÿ ïîäãðóïïîé. Äàëåå, ïîñêîëüêó G íîðìàëèçóåò H , òî H  GH .
Áàøíÿ, êîòîðóþ ìû èùåì, åñòü

G ∩ H = G ∩ G(n−1) H 6 G ∩ G(n−2) H 6 · · · 6 G ∩ GH = G

À òàê êàê ïîðîæäàþùèé íàáîð äëÿ G(i) H ÿâëÿåòñÿ îáúåäèíåíèåì ïîðîæäàþùèõ ìíîæåñòâ äëÿ G(i) è H , ìû ìîæåì ïðîâåðèòü ïðèíàäëåæíîñòü G ∩ G(i) H . Òàêèì îáðàçîì,
èñïîëüçóÿ ëåììó Øðåéåðà è àëãîðèòì Reduce, ìû ìîæåì ñïóñòèòüñÿ â áàøíþ âû÷èñëåíèé ïîðîæäàþùèéíûå óñòàíîâêè.
Äîïîëíèòåëüíîå ñâîéñòâî, êîòîðîå íàì íóæíî, ýòî òî, ÷òî èíäåêñû ïîñëåäîâàòåëüíûõ
ýëåìåíòîâ áàøíè ìàëûå. ×èòàòåëü ìîæåò ïðîâåðèòü, ÷òî [G ∩ G(i−1) H : G ∩ G(i) H] 6
n − i.


217

×àñòü 6

Èçáðàííûå çàäà÷è è ðåøåíèÿ

Çàäà÷à 2. Ñèììåòðè÷íàÿ ìîíåòà áðîñàåòñÿ 10 ðàç. Ïîäñ÷èòàéòå âåðîÿòíîñòè ñëåäóþùèõ

ñîáûòèé:

(a)
(b)
(c)
(d)

÷èñëî âûïàâøèõ ¾îðëîâ¿ ðàâíî ÷èñëó ¾ðåøåê¿;
âûïàëî áîëüøå ¾îðëîâ¿, ÷åì ¾ðåøåê¿;
ïðè i = 1, . . . , 5 îäèíàêîâû ðåçóëüòàòû i-ãî è 11 − i-ãî áðîñàíèé;
¾îðåë¿ âûïàë íå ìåíåå ÷åòûðåõ ðàç ïîäðÿä.

(a) Âûïàëî 5 îðëîâ, ñîîòâåòñòâóþùèõ
ïîñëåäîâàòåëüíîñòåé áðîñêîâ

 −10
, çíà÷èò, âåðîÿòíîñòü ðàâíà 10
2
.
5
(b) Îðëîâ è ðåøåê ëèáî ïîðîâíó, ëèáî êîãî-òî èç íèõ áîëüøå, è ÷èñëî êîìáèíàöèé,
â êîòîðûõ îðëîâ áîëüøå, ðàâíî ÷èñëó êîìáèíàöèé, â êîòîðûõ ðåøåê áîëüøå.
Ïîëüçóåìñÿ ïðåäûäóùèì ïóíêòîì è ïîëó÷àåì
!
10 −11
1

2
.
2
5

Ðåøåíèå.
10
5

(c) Ïàëèíäðîìîâ äëèíû 10 âñåãî 25 , ïîýòîìó âåðîÿòíîñòü òàêîãî ñîáûòèÿ ðàâíà

1
2−5 = 32
.
(d) Âîñïîëüçóåìñÿ ôîðìóëîé ïîëíîé âåðîÿòíîñòè: ìàêñèìàëüíûé îòðåçîê èç îðëîâ
ìîæåò èìåòü äëèíó îò 4 äî 10, àêêóðàòíî ïåðåñ÷èòàåì âñå ýòè âåðîÿòíîñòè:
• 10 îðëîâ âûïàäàþò ëèøü â 1 ñëó÷àå;
• 9 îðëîâ ïîäðÿä âûïàäàþò ëèøü â 2 ñëó÷àÿõ  âûïàëî 9 îðëîâ è îäíà ðåøêà
ëèáî â íà÷àëå, ëèáî â êîíöå;
• 8 îðëîâ ïîäðÿä âûïàäàþò â 5 ñëó÷àÿõ  ïîñëåäîâàòåëüíîñòü åñòü ëèáî
...Ð} Î, ëèáî Ð
...Ð} OX (íà ìåñòå Õ ìîæåò ñòîÿòü ëèáî Ð,
XO Ð
...Ð}, ëèáî O |Ð{z
| {z
| {z
8

ðàç

8

ðàç

8

ðàç

ëèáî Î);
• 7 îðëîâ ïîäðÿä âûïàäàþò â 2·(4+2) = 12 ñëó÷àÿõ  ðàññóæäåíèÿ àíàëîãè÷íû (¾îòðåçîê¿ èç îðëîâ äîëæåí áûòü ¾îãðàíè÷åí¿ ðåøêàìè, â îñòàëüíûõ
ïîçèöèÿõ ìîæåò ñòîÿòü âñå, ÷òî óãîäíî  ìû ó÷èòûâàåì òå ñëó÷àè, â êîòîðûõ ¾îòðåçîê¿ èç ñåìè îðëîâ ìàêñèìàëåí);
• 6 îðëîâ ïîäðÿä âûïàäàþò â 2 · (8 + 4) + 4 = 28 ñëó÷àÿõ;
• 5 îðëîâ ïîäðÿä âûïàäàþò â 2 · (16 + 8 + 8) = 64 ñëó÷àÿõ;
• 4 îðëà ïîäðÿä âûïàäàþò â 2·(32+16+16)+16−5 = ñëó÷àÿõ  ýòî ïðèäåòñÿ
ó÷åñòü èíà÷å, çäåñü ìîãóò ñëó÷àè, óæå ó÷òåííûå ðàíåå, òî åñòü ñíà÷àëà
íàäî ðàññìîòðåòü âñå ñëó÷àè ñ îòðåçêîì èç 4 îðëîâ, à çàòåì èñêëþ÷èòü äâà
ñëó÷àÿ, êîãäà âñòðå÷àþòñÿ îòðåçêè äëèí 5 è 4 (òàêèõ ðîâíî äâà),à òàêæå
ñëó÷àè, ãäå åñòü äâà îòðåçêà äëèíû 4;
251
.
 èòîãå ïîëó÷èì 1024


Èçáðàííûå çàäà÷è è ðåøåíèÿ

Çàäà÷à 3. Ïðè äâóõ áðîñêàõ èãðàëüíîé êîñòè âûïàëî X1 è X2 , ñîîòâåòñòâåííî. Âû÷èñëèòå E[max{X1 , X2 }] + E[min{X1 , X2 }].
Ðåøåíèå.

Âîñïîëüçóåìñÿ ëèíåéíîñòüþ ìàòîæèäàíèÿ:

E[max{X1 , X2 }] + E[min{X1 , X2 }] = E[max{X1 , X2 } + min{X1 , X2 }] = E[X1 + X2 ] = 2E[X1 ],

òàê êàê äâå êîñòè îäèíàêîâûå. Çàìåòèì, ÷òî E[X1 ] =
7.

1+2+3+4+5+6
6

=

7
,
2

ïîýòîìó îòâåò


Çàäà÷à 4.  äâóõ ñïè÷å÷íûõ êîðîáêàõ èìååòñÿ ïî n ñïè÷åê. Êàæäûé ðàç, êîãäà ÷åëîâåêó
íóæíà ñïè÷êà, îí áåðåò åå èç ñëó÷àéíîãî êîðîáêà (ðàâíîâåðîÿòíî). Íàéäèòå âåðîÿòíîñòü
òîãî, ÷òî êîãäà îäèí êîðîáîê îïóñòååò, à â äðóãîì îñòàíåòñÿ ðîâíî k ñïè÷åê.
Ðåøåíèå. Ìîæíî ñ÷èòàòü, ÷òî ðå÷ü èäåò î ïóòÿõ â êâàäðàòå n × n. Ñíà÷àëà âåðîÿòíîñòü òîãî, ÷òî êàê òîëüêî ïåðâûé
êîðîáîê îïóñòååò, âî âòîðîì îñòàíåòñÿ k ñïè÷åê.  òåðìèíàõ êâàäðàòà ñîáûòèå ¾îäèí êîðîáîê îïóñòååò, à â äðóãîì
îñòàíåòñÿ ðîâíî k ñïè÷åê¿ åñòü ïðîñòî ¾ïóòü âïåðâûå äîñòèã
ïðàâîé ñòîðîíû íà âûñîòå k¿. Òî åñòü ýòî âñå ïóòè, êîòîðûå ñòàðòóþò â ñèíåé òî÷êå, ïîñåùàþò êðàñíóþ òî÷êó, ìèíóÿ æåëòóþ: â ïðîòèâíîì ñëó÷àå ÷åëîâåê âûíóë ïîñëåäíþþ
ñïè÷êó èç ïåðâîãî êîðîáêà, âî âòîðîì îñòàëîñü
áîëüøå k ñïè
÷åê. Òàêèõ âîçìîæíîñòåé ðîâíî 2n−k−1
.
Ìåæäó
òåì, âñåãî
n−1

ïóòåé â êâàäðàòå 2n
.
Òîãäà
ïîëó÷èòñÿ
n

2 2n−k−1
n−1

P=
2n
n



Çàäà÷à 5. Èìååòñÿ ãåíåðàòîð ñëó÷àéíûõ áèòîâ, êîòîðûé âûäàåò 0 èëè 1 ñ âåðîÿòíîñòüþ 12 . Ïðåäëîæèòå àëãîðèòì, êîòîðûé, èñïîëüçóÿ äàííûé ãåíåðàòîð, âîçâðàùàåò 0 ñ
âåðîÿòíîñòüþ 13 è 1 ñ âåðîÿòíîñòüþ 23 .
Ðåøåíèå.

íàäî ïîñòðîèòü

Çäåñü âåðîÿòíîñòíîå ïðîñòðàíñòâî åñòü Ω = {0, 1}N . Íàì äàí ãåíåðàòîð
1
Gen2  ãåíåðàòîð ξ, P(ξ = 0) = P(ξ = 1) = ,
2
Gen3  ãåíåðàòîð ξ, P(ξ = 0) =

Ïðåäëîæèì ñëåäóþùèé àëãîðèòì:
1: procedure Gen3(Gen2 )

1
2
, P(ξ = 1) = .
3
3

221

Èçáðàííûå çàäà÷è è ðåøåíèÿ
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:

ξ1 ← 0; ξ2 ← 0
ξRet ← 0
while ξ1 = 1 ∧ ξ2 = 0 do
ξ1 = Gen2 ()
ξ2 = Gen2 ();

end while
if ξ1 = ξ2 then
ξRet = 1

end ifreturn ξRet
end procedure

Çäåñü ìû â òå÷åíèå êàæäîãî òàêòà çàïóñêàåì äâàæäû ãåíåðàòîð ñëó÷àéíîé âåëè÷èíû.
Åñëè âûïàëî äâàæäû îäèíàêîâîå çíà÷åíèå, òî åñòü 11 èëè 00, ìû âîçâðàùàåì 1 è ïîêèäàåì
öèêë, åñëè âûïàëî 01, òî âîçâðàùàåì 0 è îñòàíàâëèâàåìñÿ, à åñëè âûïàëî 10, òî ìû
ïðîäîëæàåì öèêë.
Âåðîÿòíîñòü òîãî, ÷òî ðåçóëüòàò äâóõ áðîñêîâ ñòàíåò âïåðâûå îòëè÷åí îò 10 è áóäåò
1
ðàâåí íåêîòîðîé x ∈ {01, 11, 00}, ðàâíà 41 + 412 + . . . + 41k + . . . = 1−4 1 = 31 .
4
Òåïåðü îöåíèì
: ïîíÿòíî, ÷òî ýòîò àëãîðèòì ìîæåò íèêîãäà
íå îñòàíîâèòüñÿ, âûäàâàÿ ïîñëåäîâàòåëüíîñòü 1010 . . ., íî òàêîå ïðîèñõîäèò ñ íóëåâîé
âåðîÿòíîñòüþ. Èòàê, k áðîñêîâ ñîâåðøàåòñÿ ñ âåðîÿòíîñòüþ ( 41 )k−1 34 : ñíà÷àëà k − 1 ðàç
âûïàäàåò 10, â ïîñëåäíèé ðàç âûïàäàåò ÷òî-òî îòëè÷íîå îò 10. Ñ÷èòàåì ñóììó:



 1 k−1 3
X
3  X k−1 
3  X k 0
3  1 0
=
=
=
=
Et =
k
kz
z
4
4
4
4
4 1−z
1
1
1
k=1
k=1
k=1

ñðåäíåå âðåìÿ ðàáîòû

z= 4

=

Èòàê, â ñðåäíåì íóæíî ñîâåðøèòü

4
3

áðîñêîâ.

z= 4

z= 4

3
1
4 (1 − z)2

=
z= 1
4

4
3


Çàäà÷à 6. Äàí ìàññèâ èç n ýëåìåíòîâ, íà êîòîðûõ îïðåäåëåíî îòíîøåíèå ðàâåíñòâà.

Ïîñòðîéòå on-line àëãîðèòì, êîòîðûé â ¾ïîòîêîâîì ðåæèìå îáðàáîòêè äàííûõ¿ îïðåäåëÿåò, åñòü ëè â ìàññèâå ýëåìåíò, ïîâòîðÿþùèéñÿ áîëüøå n2 ðàç. Ñ÷èòàåòñÿ, ÷òî â Âàøåì
ðàñïîðÿæåíèè åñòü ïàìÿòü îáúåìîì O(log n) áèòîâ.
Ðåøåíèå. Ôîðìàëüíîå îïèñàíèå àëãîðèòìà íàõîäèòñÿ íèæå (â ÷åñòü èçîáðåòàòåëÿ
äàííîãî àëãîðèòìà íàçîâåì ïðîöåäóðó Moore).
1: procedure Moore(w[1 : n])
2:
k = 0, h = 0
3:
for i = 1; i 6 n; i+ = 1 do
4:
if h = 0 then

222

Èçáðàííûå çàäà÷è è ðåøåíèÿ
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:

k=i
h+ = 1

end if
if h > 0 è w[i] = w[k] then
h+ = 1

end if
if h > 0 è w[i] 6= w[k] then
h− = 1
if h = 0 then
k=0

end if
end if
end for

i=0
for i = 1; i 6 n; i+ = 1 do
if w[i] = w[k] then
i+ = 1

end if
end for
if i > n2 then
return w[k]
else

print(NO x EXISTS)

end if
end procedure

Ïðåäëîæèì ñëåäóþùèé àëãîðèòì, èñïîëüçóþùèé âñåãî îäèí ïðîõîä ïî ìàññèâó è
O(log n) áèòîâ. Ìû áóäåì õðàíèòü êàíäèäàòà C , êîòîðûé ìîæåò ïîâòîðÿòüñÿ áîëåå n2 ðàç,
è ¾âûñîòó¿ h. Êàæäûé ðàç, âñòðå÷àÿ íîâûé ýëåìåíò w[i], åñëè âûñîòà ïîëîæèòåëüíàÿ, òî
ìû óâåëè÷èì âûñîòó, åñëè w[i] = C , è óìåíüøèì â èíîì ñëó÷àå. Åñëè æå âûñîòà ðàâíà 0,
òî ìû ïðèñâàèâàåì C çíà÷åíèå ïåðâîãî âñòðå÷åííîãî w[i].
Ïðåæäå ÷åì äîêàçàòü êîððåêòíîñòü àëãîðèòìà, ïðîäåìîíñòðèðóåì åãî ðàáîòó íà
íåêîòîðûõ ïðèìåðàõ (çäåñü A îò absent, îòñóòñòâèå êàíäèäàòà):

Ìàññèâ
Êàíäèäàò A
Ñ÷åò÷èê
0
Ýëåìåíò 1 ïîâòîðÿåòñÿ

1 2
1 A
1 0
4 ðàçà

1 3 1 2
1 A 1 A
1 0 1 0
â ìàññèâå èç 7

1
1
1
ýëåìåíòîâ
223

Èçáðàííûå çàäà÷è è ðåøåíèÿ
Ìàññèâ
1 2 2 2
Êàíäèäàò A 1 A 2 2
Ñ÷åò÷èê
0 1 0 1 2
Ýëåìåíò 2 ïîâòîðÿåòñÿ 3 ðàçà â ìàññèâå èç 6 ýëåìåíòîâ,
ðàçà
Ìàññèâ
1
Êàíäèäàò A 1
Ñ÷åò÷èê
0 1
Ýëåìåíò 1 ïîâòîðÿåòñÿ 5

2
A
0
ðàç

3 3 1
3 3 3
1 2 1
â ìàññèâå

3 1
2 A
1 0
íèêòî íå ïîâòîðÿåòñÿ õîòÿ áû 4
1
A
0
èç

1 1
1 1
1 2
9 ýëåìåíòîâ

Ìàññèâ
1 2 3 3 3 7
Êàíäèäàò A 1 A 3 3 3 3
Ñ÷åò÷èê
0 1 0 1 2 3 2
Ýëåìåíò 3 ïîâòîðÿåòñÿ 3 ðàç â ìàññèâå èç 6 ýëåìåíòîâ; îí âûäàåòñÿ êàê êàíäèäàò, íî íå
ïîâòîðÿåòñÿ áîëåå 4 ðàç  òàêèå êîëëèçèè íóæíî óñòðàíÿòü âòîðûì ïðîõîäîì
Òåïåðü äîêàæåì, ÷òî äëÿ ëþáîãî i ∈ [1; n] äàííûé àëãîðèòì ïîñëå n øàãîâ ïîçâîëÿåò
ïðåäñòàâèòü w[1 : i] êàê îáúåäèíåíèå ìíîæåñòâ A è B , ãäå

âûñîòîé),

• A ñîñòîèò èç K êîïèé C (â äàëüíåéøåì áóäåì èìåíîâàòü K
• B  ìíîæåñòâî, â êîòîðîì ëþáîé ýëåìåíò ïîâòîðÿåòñÿ íå áîëåå

i
.
2

Ýòî ìîæíî ñäåëàòü èíäóêöèåé ïî i. Äåéñòâèòåëüíî, áàçà ïðè i = 1 óñòàíàâëèâàåòñÿ òðèâèàëüíî; øàã æå äîêàçûâàåòñÿ ðàññìîòðåíèåì òðåõ âîçìîæíîñòåé, âîçíèêàþùèõ ïðè ÷òåíèè
w[i + 1]:
• âûñîòà ðàâíà 0, òîãäà ëþáîé ýëåìåíò çäåñü ïîâòîðÿåòñÿ çäåñü íå áîëåå 2i , äîáàâëåíèå íîâîãî ýëåìåíòà äåëàåò ìíîæåñòâî A íåïóñòûì (ñîäåðæàùèì îäèí ýëåìåíò) è íå ìåíÿåò B ;
• âûñîòà ïîëîæèòåëüíà è w[i + 1] = C , òîãäà ê ìíîæåñòâó A äîáàâëÿåòñÿ w[i + 1],
à ìíîæåñòâî B íå ìåíÿåòñÿ, ðàçáèåíèå â A ∪ B ñíîâà èìååò ìåñòî;
• âûñîòà ïîëîæèòåëüíàÿ è w[i + 1] 6= C , òîãäà ìîùíîñòü A óìåíüøàåòñÿ íà 1
(çà ñ÷åò íåêîòîðîãî ýëåìåíòà, ðàâíîãî C ), à ìîùíîñòü B  óâåëè÷èâàåòñÿ íà
2, ïðè ýòîì ýëåìåíòîâ, ðàâíûõ C , áûëî íå áîëåå i−1
(äî ïðî÷òåíèÿ w[i + 1]
2
áûëî |A| = h), çíà÷èò, òåïåðü èõ ñòàëî íå áîëåå i+1
(äîáàâëÿþòñÿ
äâà ðàçíûõ
2
ýëåìåíòà). Äåéñòâèòåëüíî, çà øàã äî ýòîãî |A| ìîãëà ëèáî óâåëè÷èâàòüñÿ, ëèáî
óìåíüøàòüñÿ íà 1, è â îáîèõ ñëó÷àÿõ ïîëó÷àåòñÿ, ÷òî ëþáîé ýëåìåíò âñòðå÷àëñÿ
íå áîëåå i−1−|A|
ðàç (ïî ïðåäïîëîæåíèþ èíäóêöèè).
2
i
i−1
i+1
B
2

Íàïðèìåð, åñëè âûñîòà íà -îì øàãå ðàâíÿëàñü 1, òî ïî ïðåäïîëîæåíèþ
øàãå äîáàâëÿþòñÿ
ëþáîé ýëåìåíò â ïîâòîðÿåòñÿ íå áîëåå ðàç, íà
äâà ðàçíûõ ýëåìåíòà, ïîëó÷àåòñÿ íå áîëåå ïîâòîðåíèé.
i+1
2

224

Èçáðàííûå çàäà÷è è ðåøåíèÿ
Ñ ïîìîùüþ ýòîãî óòâåðæäåíèÿ äîêàæåì êîððåêòíîñòü àëãîðèòìà. Ïóñòü â ìàññèâå
åñòü ýëåìåíò X , ïîâòîðÿþùèéñÿ áîëåå n2 ðàç; ïîêàæåì, ÷òî êàíäèäàò áóäåò ðàâåí X . Äîïóñòèì, ýòî íå òàê, è òàêîé ýëåìåíò ðàâåí Y 6= C . Òîãäà ñîãëàñíî ëåììå åñòü K âõîæäåíèé
C è, ñëåäîâàòåëüíî, íå áîëåå n−C
âõîæäåíèé ýòîãî Y 6= C , íî Y äîëæåí âõîäèòü áîëåå n2 .
2
Åñëè æå íåò ýëåìåíòà, âñòðå÷àþùåãîñÿ áîëåå ïîëîâèíû ðàç, òî âòîðîé ïðîõîä ïî ìàññèâó
ýòî âûÿâèò.

Ïîñëåäíèé ìîìåíò: ìû õðàíèì íå ñàìîãî êàíäèäàòà, à íîìåð ÿ÷åéêè ìàññèâà, ãäå
âïåðâûå âñòðåòèëè åãî. Òåì ñàìûì ìû èñïîëüçóåì íå áîëåå 2 log(n) áèòîâ, è íàø àëãîðèòì íå çàâèñèò îò âåëè÷èíû ýëåìåíòîâ ìàññèâà.

Çàäà÷à 7. Íà âõîä ïîäàåòñÿ îïèñàíèÿ n ñîáûòèé â ôîðìàòå (s, f )  âðåìÿ íà÷àëà è âðåìÿ
îêîí÷àíèÿ. Òðåáóåòñÿ ñîñòàâèòü ðàñïèñàíèå äëÿ ÷åëîâåêà, êîòîðûé õî÷åò ïðèíÿòü ó÷àñòèå
â ìàêñèìàëüíîì êîëè÷åñòâå ñîáûòèé. Íàïðèìåð, ñîáûòèÿ ýòî äîêëàäû íà êîíôåðåöèè
èëè êèíîñåàíñû íà ôåñòèâàëå, êîòîðûå ïðîõîäÿò â ðàçíûõ àóäèòîðèÿõ. Ïðåäïîëîæèì,
÷òî ó÷àñòâîâàòü ìîæíî òîëüêî ñ íà÷àëà ñîáûòèÿ è äî êîíöà. Ðàññìîòðèì òðè æàäíûõ
àëãîðèòìà.

(a) Âûáåðåì ñîáûòèå êðàò÷àéøåé äëèòåëüíîñòè, äîáàâèì åãî â ðàñïèñàíèå, èñêëþ-

÷èì èç ðàññìîòðåíèÿ ñîáûòèÿ, ïåðåñåêàþùèåñÿ ñ âûáðàííûì. Ïðîäîëæèì äåëàòü òî æå ñàìîå äàëåå.
(b) Âûáåðåì ñîáûòèå, íàñòóïàþùåå ðàíüøå âñåõ, äîáàâèì åãî â ðàñïèñàíèå, èñêëþ÷èì èç ðàññìîòðåíèÿ ñîáûòèÿ, ïåðåñåêàþùèåñÿ ñ âûáðàííûì. Ïðîäîëæèì äåëàòü òî æå ñàìîå äàëåå.
(c) Âûáåðåì ñîáûòèå, çàâåðøàþùååñÿ ðàíüøå âñåõ, äîáàâèì åãî â ðàñïèñàíèå, èñêëþ÷èì èç ðàññìîòðåíèÿ ñîáûòèÿ, ïåðåñåêàþùèåñÿ ñ âûáðàííûì. Ïðîäîëæèì
äåëàòü òî æå ñàìîå äàëåå.
Êàêîé àëãîðèòì âû âûáåðåòå?  êà÷åñòâå îáîñíîâàíèÿ äëÿ êàæäîé ïðîöåäóðû ïðîâåðüòå, ÷òî îíà ÿâëÿåòñÿ îïòèìàëüíîé èëè ïîñòðîéòå êîíêðåòíûé êîíòðïðèìåð.

(a) Ýòîò àëãîðèòì íå ÿâëÿåòñÿ îïòèìàëüíûì, çäåñü ìîæíî ïðèâåñòè
ñëåäóþùèé êîíòðïðèìåð:

Ðåøåíèå.

Ôîðìàëüíî, íà÷àëüíûå äàííûå åñòü ÷åòûðå èíòåðâàëà
(0, 3), (2, 4), (3, 6), (6, 9)

225

Èçáðàííûå çàäà÷è è ðåøåíèÿ
Íåòðóäíî âèäåòü, ÷òî àëãîðèòì âûáèðàåò ëèøü æåëòûå èíòåðâàëû è äàåò ìàêñèìóì èç äâóõ ñîáûòèé: íà ïåðâîì øàãå âûáèðàåòñÿ èíòåðâàë (2, 4) è èñêëþ÷àþòñÿ
èç ðàññìîòðåíèÿ (0, 3) è (3, 6), íà âòîðîì øàãå áåðåòñÿ ïîñëåäíèé èíòåðâàë (6, 9).
Ìåæäó òåì, âûáîð òðåõ èíòåðâàëîâ äëèíû 3 äàåò îòâåò 3 è ÿâëÿåòñÿ îïòèìàëüíûì â äàííîé ñèòóàöèè.
(b) Êîíòðïðèìåð ïîñòðîåí íèæå è àíàëîãè÷åí ïðåäûäóùåìó:

Ôîðìàëüíî, íà÷àëüíûå äàííûå åñòü ÷åòûðå èíòåðâàëà
(0, 8), (1, 3), (3, 5), (5, 7)

Íåòðóäíî âèäåòü, ÷òî àëãîðèòì âûáèðàåò ëèøü îäèí æåëòûé èíòåðâàë è äàåò
ìàêñèìóì èç îäíîãî ñîáûòèÿ, â òî âðåìÿ êàê ìîæíî ïîñåòèòü òðè ñîáûòèÿ.
(c) À â ýòîì ïóíêòå àëãîðèòì ÿâëÿåòñÿ îïòèìàëüíûì. Äîêàæåì ýòî îò ïðîòèâíîãî.
Ïóñòü äëÿ íåêîòîðûõ íà÷àëüíûõ äàííûõ {a1 , . . . ak }  ìíîæåñòâî èíòåðâàëîâ,
âûäàííîå íàøèì àëãîðèìòîì, à ìàêñèìàëüíî âîçìîæíîå ÷èñëî íåïåðåñåêàþùèõñÿ ñîáûòèé ðàâíî n, ñîîòâåòñòâóþùàÿ âûáîðêà (èëè õîòÿ áû îäíà èç âîçìîæíûõ) åñòü {b1 , . . . bn }. Òîãäà b1 çàêàí÷èâàåòñÿ íå ðàíüøå a1 , òàê êàê ñîáûòèå
a1 çàêàí÷èâàåòñÿ ðàíüøå âñåõ. Çàìåòèì òàêæå, ÷òî b2 íà÷èíàåòñÿ íå ðàíüøå
êîíöà a1 è çàêàí÷èâàåòñÿ íå ðàíüøå a2  âåäü èç âñåõ ñîáûòèé, íà÷èíàþùèõñÿ ïîñëå êîíöà a1 , a2 çàêàí÷èâàåòñÿ ðàíüøå âñåõ. Àíàëîãè÷íî ïîëó÷èì, ÷òî bi
íà÷èíàåòñÿ íå ðàíüøå, ÷åì çàêàí÷èâàåòñÿ ai−1 , è çàêàí÷èâàåòñÿ íå ðàíüøå ai .
Òîãäà åñëè k < n, òî bk+1 íà÷èíàåòñÿ ïîñëå êîíöà ak ; â òàêîì ñëó÷àå àëãîðèòì
ìîã âûáðàòü õîòÿ áû n − k ñîáûòèé.


Çàäà÷à 8. Ïîêàæèòå, ÷òî ÿçûê ôàêòîðèçàöèè
Lf actor = {(N, M ) ∈ Z2 | 1 < M < N è N èìååò äåëèòåëü d, 1 < d 6 M }

ïðèíàäëåæèò NP ∩ co − NP.
Ðåøåíèå. Ñíà÷àëà ïîêàæåì, ÷òî Lf actor ∈ NP. Ïðåäúÿâèì äëÿ ýòîãî âñþäó îïðåäåëåííûé ïðåäèêàò

R (N, M ), d = (1 < d 6 M ) ∧ (1 < M < N ) ∧ (d|N )

ßñíî, ÷òî (N, M ) ∈ Lf actor òèòòê ñóùåñòâóåò d òàêîé, ÷òî R (N, M ), d = 1. Òàê êàê
d < M , òî îí ïîëèíîìèàëåí ïî âõîäó (M, N ); ïðîâåðèòü æå èñòèííîñòü R (N, M ), d

226

Èçáðàííûå çàäà÷è è ðåøåíèÿ
ìîæíî äåòåðìèíèðîâàííûì ïîëèíîìèàëüíûì àëãîðèòìîì çà O(log(N ) log(M )), ñíà÷àëà
ñðàâíèâ d ñ M çà O(log(M )), à çàòåì ïîäåëèâ N íà d ñ îñòàòêîì çà O(log(N ) log(M )).
Òåïåðü ïîêàæåì, ÷òî Lf actor ∈ co − NP. Äëÿ ýòîãî çàìåòèì, ÷òî (N, M ) ∈
/ Lf actor
òèòòê âûïîëíåíî õîòÿ áû îäíî èç ñëåäóþùèõ óñëîâèé:
• M = 1 èëè M > N ;
• N  ïðîñòîå;
• N èìååò äåëèòåëü d ∈ (M ; N ).
Äåéñòâèòåëüíî, (N, M ) ∈
/ Lf actor òèòòê ëèáî íå âûïîëíåíî îãðàíè÷åíèå íà M è N , ëèáî íå ñóùåñòâóåò äåëèòåëÿ N , íå ïðåâûøàþùåãî M ; òîãäà ëèáî äåëèòåëü áîëüøå M è
òàêèì îáðàçîì ëåæèò â èíòåðâàëå (M ; N ), ëèáî äåëèòåëÿ íåò âîîáùå. Òîãäà ïîêàæåì,
÷òî Lf actor ∈ co − NP, ïðåäñòàâèâ äîïîëíåíèå êàê L1 , L2 , L3 è ïîêàçàâ ïðèíàäëåæíîñòü
êàæäîãî èç òðåõ ÿçûêîâ NP. Äåéñòâèòåëüíî, ïóñòü
• L1 = {(N, M ) ∈ Z2 |M = 1 ∨ M > N };
• L2 = {(N, M ) ∈ Z2 |N  ïðîñòîå};
• L3 = {(N, M ) ∈ Z2 |∃d, M < d < N, d|N }.
Âûøå óæå áûëî ïîêàçàíî, ÷òî (N, M ) ∈
/ Lf actor òèòòê (N, M ) ∈ Li äëÿ íåêîòîðîãî i ∈
{1, 2, 3}. Ïåðâûé ÿçûê L1 ∈ P, òàê êàê ìîæíî äåòåðìèíèðîâàííîé ïîëèíîìèàëüíîé ÌÒ
ïðîâåðèòü îáà óñëîâèÿ M = 1 è M > N [îáà çà O(log M ) è O(log N ), ñîîòâåòñòâåííî].
Âòîðîé ÿçûê L2 ∈ NP ñîãëàñíî ïðåäûäóùåé çàäà÷å. Òðåòèé ÿçûê L3 ∈ NP, òàê êàê
ñóùåñòâóåò ïðåäèêàò

RL3 (N, M ), d = (M < d < N ) ∧ (1 < M < N ) ∧ (d|N ),
èñòèííîñòü êîòîðîãî ìîæíî ïðîâåðèòü äåòåðìèíèðîâàííûì ïîëèíîìèàëüíûì àëãîðèòìîì çà O(log(N )2 ), ñíà÷àëà ñðàâíèâ d ñ M çà O(log(N )), à çàòåì ïîäåëèâ N íà d ñ îñòàòêîì çà O(log(N )2 ); ïðè ýòîì (N, M) ∈ L3 òèòòê ïðè íåêîòîðîì M < d < N ïðèíèìàåò
çíà÷åíèå 1 ïðåäèêàò RL3 (N, M ), d . Òàê êàê îáúåäèíåíèå ÿçûêîâ èç NP ñàìî ëåæèò â

NP, òî è Lf actor = L1 ∪ L2 ∪ L3 ∈ NP.

Çàäà÷à 9. Îöåíèòü àñèìïòîòèêó T (n), åñëè T (n) = T (n − 1) + 2T (n − 2) + . . . + 2n−1 T (0),
ãäå T (0) = 1.

Ðåøåíèå.

Èç óñëîâèÿ ïîëó÷àåì:

T (n + 1)

=
=

T (n) + 2T (n − 1) + . . . + 2n T (0)

T (n) + 2 T (n − 1) + 2T (n − 2) + . . . + 2n−1 T (0)
|
{z
}

=

3T (n),

T (n)

îòêóäà è èç íà÷àëüíîãî óñëîâèÿ ñëåäóåò, ÷òî T (n) = 3n .



Çàäà÷à 10. Ïóñòü L ∈ co − NP, à N  íåïóñòîé ïîäúÿûê L. Âåðíî ëè, ÷òî N ∈ co − NP?
227

Èçáðàííûå çàäà÷è è ðåøåíèÿ

Ðåøåíèå. Íåâåðíî. Ïóñòü L = Σ . Òîãäà L ∈ P ⊆ co − NP. Òàê êàê ëþáîé ÿçûê 
ýòî ïîäìíîæåñòâî ÿçûêà Σ∗ , òî â êà÷åñòâå N ìîæíî âçÿòü ëþáîé ÿçûê íå èç co − NP.
Íàïðèìåð, ïîäîéä¼ò ëþáîé íåðàçðåøèìûé ÿçûê â êà÷åñòâå N .


Çàäà÷à 11. ßçûê EUCLID ñîñòîèò èç òðîåê (a, b, c) òàêèõ, ÷òî gcd ab = c (÷èñëà çàäàþòñÿ
â äâîè÷íîì âèäå). ßçûê NOHAMPATH ñîñòîèò èç îïèñàíèé ãðàôîâ, êîòîðûå íå ñîäåðæàò
ãàìèëüòîíîâà öèêëà. Ïóñòü NOHAMPATH ïîëèíîìèàëüíî ñâîäèòñÿ ê EUCLID. Âåðíî ëè,
÷òî òîãäà NP = co − NP?
Äîêàçàòåëüñòâî. Âåðíî. Èç óñëîâèÿ ñëåäóåò, ÷òî co − NP = P, ò.ê. ÿçûê NOHAMPATH
ïîëîí â êëàññå co − NP (òàê êàê åãî äîïîëíåíèå (HAMPATH) ïîëíî â NP). Íî òîãäà
P = NP = co − NP â ñèëó çàìêíóòîñòè êëàññà P îòíîñèòåëüíî âçÿòèÿ äîïîëíåíèÿ. 

Çàäà÷à 12. ßçûê supwL íàäñëîâ ÿçûêà L îïðåäåëèì ïî ôîðìóëå:
supwL = {u = wsv | w, v ∈ Σ∗ , s ∈ L}
. Âåðíî ëè, ÷òî åñëè L ∈ P, òî è supwL ∈ P?
Äîêàçàòåëüñòâî. Âåðíî. Íóæíî íàéòè ïîäñòðîêó èç ÿçûêà L. Äëÿ ýòîãî áóäåì
ïåðåáèðàòü âñå ïîäñòðîêè äëèíû 1, äëèíû 2, äëèíû 3 è ò. ä. Ïóñòü p(n)  ïîëèíîì,
îãðàíè÷èâàþùèé âðåìÿ ðàáîòû àëãîðèòìà, ðàñïîçíàþùåãî ÿçûê L, íà âõîäå äëèíû n.
Òîãäà âðåìÿ ðàáîòû ïîñòðîåííîãî àëãîðèòìà íå ïðåâîñõîäèò

n · p(1) + (n − 1) · p(n) + . . . + 2 · p(n − 1) + p(n) 6 n2 · p(n).

Ïîñëåäíåå íåðàâåíñòâî âåðíî íå äëÿ âñåõ ïîëèíîìîâ, íî ìû ìîæåì âçÿòü â êà÷åñòâå
p(n) âîçðàñòàþùèé ïîëèíîì (ïðîñòî âçÿòü p(n) òàê, ÷òîáû âñå åãî êîýôôèöèåíòû áûëè
ïîëîæèòåëüíûìè; ýòî íå óìåíüøèò åãî çíà÷åíèÿ âî âñåõ ïîëîæèòåëüíûõ òî÷êàõ).


Çàäà÷à 13. Îïðåäåëèì ãðàô Gn íà ìíîæåñòâå {1, 2, . . . , n}, ãäå âåðøèíû  ýòî ÷èñëà, à

äâå âåðøèíû ñîåäèíåíû ðåáðîì òîãäà è òîëüêî òîãäà, êîãäà îäíî ÷èñëî äåëèòñÿ íà äðóãîå.
Âåðíî ëè, ÷òî ÿçûê L = {(n, k) | â Gn åñòü êëèêà ðàçìåðà k} ïðèíàäëåæèò êëàññó NPC?
×èñëà çàäàþòñÿ äâîè÷íîé çàïèñüþ.
Ðåøåíèå. Íåâåðíî. Îöåíèì ðàçìåð ìàêñèìàëüíîé êëèêè â ãðàôå Gn . Äëÿ ýòîãî
ïðîéä¼ì â íåé îò ìèíèìóìà äî ìàêñèìóìà. Ïîëó÷èì ïîñëåäîâàòåëüíîñòü 1 → k1 m →
k1 k2 m → . . . → k1 k2 . . . kl m, ãäå âñå kj > 2 (â ìàêñèìàëüíóþ êëèêó âñåãäà âõîäèò ÷èñëî
1, ïîòîìó ÷òî îíî äåëèò ëþáîå ÷èñëî). Ïîýòîìó ÷èñåë â ìàêñèìàëüíîé êëèêå íå áîëåå
blog2 nc + 1. Ïîýòîìó, åñëè k > blog2 nc + 1, òî âûäà¼ì îòâåò 0.  ïðîòèâíîì ñëó÷àå â
ãðàôå åñòü êëèêà íóæíîãî ðàçìåðà: ÷èñëà 1, 2, 22 , . . . , 2k−1 îáðàçóþò êëèêó ëèáî íóæíîãî
ðàçìåðà. Ïðè ýòîì íàèáîëüøåå ÷èñëî â ýòîé êëèêå ìåíüøå n, òàê êàê 2k−1 6 2blog2 nc 6 n.
Òàêèì îáðàçîì, ðàçðåøàþùèé àëãîðèòì ðàáîòàåò çà îäíî ñðàâíåíèå.


228

Èçáðàííûå çàäà÷è è ðåøåíèÿ

Çàäà÷à 14.  ìàññèâå a[1 . . . N ] çàïèñàíî N öåëûõ ÷èñåë. Âñå âòðå÷àþòñÿ ïî 2 ðàçà,

êðîìå îäíîãî, êîòîðîå âñòðå÷àåòñÿ 3 ðàçà. Òðåáóåòñÿ íàéòè ÷èñëî, âñòðå÷àþùååñÿ 3 ðàçà.
Îãðàíè÷åíèÿ ñëåäóþùèå: âðåìÿ ðàáîòû  O(N log(max a[i])), ïàìÿòü  O(log(max a[i])).
i

i

Ñäåëàåì ïîáèòîâóþ îïåðàöèþ XOR âñåõ çàïèñàííûõ ÷èñåë (ýòî äåëàåòñÿ
çà âðåìÿ O(N log(max a[i])); ïðè ýòîì ïàìÿòü, êîòîðóþ ìû èñïîëüçóåì åñòü O(log(max a[i]))).
i
i
Ïîëó÷åííîå ÷èñëî  èñêîìîå.

Ðåøåíèå.

Çàäà÷à 15.  ìàññèâå a[1 . . . N ] çàïèñàíî N öåëûõ ÷èñåë. Âñå âòðå÷àþòñÿ ïî 3 ðàçà,
êðîìå îäíîãî, êîòîðîå âñòðå÷àåòñÿ 1 ðàç. Òðåáóåòñÿ íàéòè ÷èñëî, âñòðå÷àþùååñÿ 1 ðàç.
Îãðàíè÷åíèÿ ñëåäóþùèå: âðåìÿ ðàáîòû  O(N log3 (max a[i])), ïàìÿòü  O(log(max a[i])).
i

i

Ðåøåíèå. Ïåðåâåä¼ì ÷èñëà â òðîè÷íóþ ñèñòåìó ñ÷èñëåíèÿ. Äëÿ êàæäîãî îòäåëüíîãî ÷èñëà ýòî äåëàåòñÿ çà O(log(a[i])) äåëåíèé íà ÷èñëî 3 (âû÷èòàíèÿ ìû íå ó÷èòûâàåì).
 èòîãå çà O(N log3 (max a[i])) ìîæíî ïðåîáðàçîâàòü âñå ÷èñëà â òðîè÷íóþ ñèñòåìó ñ÷èñi
ëåíèÿ. Äàëåå ìû ñêëàäûâàåì ÷èñëà ïîðàçðÿäíî ïî ìîäóëþ 3. Òî, ÷òî ïîëó÷èòñÿ â èòîãå,
è åñòü èñêîìîå ÷èñëî.


Çàäà÷à 16. Ïîêàæèòå, ÷òî åñëè íà âõîä ïîäà¼òñÿ äâîè÷íîå ÷èñëî, ãàðàíòèðîâàííî ÿâëÿþùååñÿ ïîëíûì êâàäðàòîì, òî èçâëå÷ü êâàäðàòíûé êîðåíü èç íåãî ìîæíî çà ïîëèíîìèàëüíîå âðåìÿ.

Ðåøåíèå. Áóäåì èñïîëüçîâàòü áèíàðíûé ïîèñê: äåëèì îòðåçîê íà äâå ðàâíûå (èëè
c,
ïî÷òè ðàâíûå ÷àñòè) è áåð¼ì ¾ñðåäíåå¿ ÷èñëî c (äîãîâîðèìñÿ, ÷òî áóäåì áðàòü c = b a+b
2
ãäå a è b  ëåâàÿ è ïðàâàÿ ãðàíèöû òåêóùåãî îòðåçêà ñîîòâåòñòâåííî; â ñàìîì íà÷àëå
a = 1 è b = n). Åñëè c2 > n, òî ïåðåõîäèì ê ïðàâîé ïîëîâèíå: a := c è b := b; åñëè
c2 < n, òî ïåðåõîäèì ê ëåâîé ïîëîâèíå: a := a è b := c; åñëè æå c2 = n, òî îñòàíàâëèâàåìñÿ è âûäà¼ì îòâåò c. Çàìåòèì, ÷òî äåëåíèé îòðåçêà ïîïîëàì ìû ñäåëàåì íå áîëüøå
log2 n äåëåíèé îòðåçêà ïîïîëàì. Ïîñëå êàæäîãî äåëåíèÿ îòðåçêà ïîïîëàì ìû âû÷èñëÿåì ðåçóëüòàò äåëåíèÿ îäíîãî ÷èñëà íà äðóãîå, âîçâîäèì ÷èñëî â êâàäðàò è ñðàâíèâàåì
äâà ÷èñëà (äëèíû âñåõ ïîëó÷àåìûõ â ïðîöåññå ðàáîòû ÷èñåë íå áîëüøå 2 log2 n, òàê êàê
log2 n2 = 2 log2 n). Ñëîæíîñòü àëãîðèòìà: O(log32 n). Îòìåòèì, ÷òî ýòîò àëãîðèòì ìîæåò
îòâåòèòü òàêæå è íà âîïðîñ, ÿâëÿåòñÿ ëè öåëîå ÷èñëî ïîëíûì êâàäðàòîì, åñëè â êîíöå
âîçâðàùàòü ¾íåò¿, åñëè íå áóäåò íàéäåíî íóæíî ÷èñëî, êîãäà ëåâàÿ è ïðàâàÿ ãðàíèöû
òåêóùåãî îòðåçêà ñîâïàäóò.


Çàäà÷à 17. Íà êàðòèíêå íèæå èçîáðàæåí ãðàô. Ïóñòü gn  ýòî ÷èñëî ïóòåé â G äëèíû
n, êîòîðûå íà÷èíàþòñÿ â âåðøèíå 1. Èç îïðåäåëåíèÿ ñëåäóåò, ÷òî g(0) = 1 (åäèíñòâåííûé
ïóòü: 0 → 0), à g(1) = 4 (ïóòè: 1 → 1, 1 → 2, 1 → 4, 1 → 3).

229

Èçáðàííûå çàäà÷è è ðåøåíèÿ
Ðàññìîòðèì A, ìàòðèöó

1 1
1 0
A=
1 0
1 1

2
1

4

ñìåæíîñòè ãðàôà G:

1
1
.
1
1

1
0
0
1

3

(a) Âû÷èñëèòå ÷èñëî g(2) ïóòåé â G äëèíû 2 è ïðîâåðüòå, ÷òî îíî ðàâíî ñóììå

ýëåìåíòîâ ïåðâîé ñòðîêè ìàòðèöû A2 . Îáúÿñíèòå ýòî ñîâïàäåíèå è äîêàæèòå
îáùóþ ôîðìóëó äëÿ g(n).
(b) Íàéäèòå ðåêóððåíòíîå ñîîòíîøåíèå, êîòîðîìó óäîâëåòâîðÿåò ïîñëåäîâàòåëüíîñòü {gn , n = 0, 1, . . .}.
(c) Íåïîñðåäñòâåííîå âû÷èñëåíèå ïî ðåêóððåíòíîé ôîðìóëå. Îöåíèòå åãî òðóäîåìêîñòü ïðè âû÷èñëåíèè A = g20000 mod 29.
(d) Äîêàæèòå, ÷òî ïîñëåäîâàòåëüíîñòü {gn } ïåðèîäè÷íà ïî ëþáîìó ìîäóëþ. Îöåíèòå åå ïåðèîä äëÿ mod 29 è íàéäèòå òðóäîåìêîñòü âû÷èñëåíèÿ ýòèì ñïîñîáîì.

(a) ¾Ñîâïàäåíèå¿ íà ñàìîì äåëå èíêîðïîðèðîâàíî â îïðåäåëåíèå
óìíîæåíèÿ ìàòðèö, ïîýòîìó ñðàçó ê äîêàçàòåëüñòâó óòâåðæäåíèÿ:

Ðåøåíèå.

∀n > 1

(An )ij = ÷èñëî ïóòåé äëèíû n èç âåðøèíû i â âåðøèíó j

Äîêàçûâàåì åãî èíäóêöèåé ïî n ∈ N: äëÿ n = 1 óòâåðæäåíèå âåðíî ïî îïðåäåëåíèþ ìàòðèöû A, à ïåðåõîä êîððåêòåí, òàê êàê
(An )ij =

4
X

(An−1 )ik Akj ,

k=1

à (A
)ik Akj  ÷èñëî ïóòåé äëèíû n èç i â j , ïðåäïîñëåäíÿÿ âåðøèíà êîòîðûõ
 k; ñîîòâåòñòâóþùèå ìíîæåñòâà íå ïåðåñåêàþòñÿ è â îáúåäèíåíèè äàþò âñå
èñêîìûå ïóòè.
4
P
Èç âûøåñêàçàííîãî ñðàçó ñëåäóåò, ÷òî g(n) =
A1i , à g(2) = 4 + 2 + 2 + 4 =
n−1

12.
(b) Ñîãëàñíî ïðåäûäóùåìó ïóíêòó
 
1

 n  1 

g(n) = 1 0 0 0 A  
= 1
1
1

230

i=1



0

0

1
 1

0 
1
1

1
0
0
1

1
0
0
1

n  
1
1
 
1
 1 .
1 1
1
1

Èçáðàííûå çàäà÷è è ðåøåíèÿ
Åñëè ìû ïîëó÷èì ðåêêóðåíòíîå âûðàæåíèå íà An , òî èç íåãî ñðàçó æå ïîëó÷èì
ðåêêóðåíòíîå óðàâíåíèå íà g(n).
Ìû íàéäåì ðåêêóðåíòíîå ïîëèíîìèàëüíîå óðàâíåíèå
P íài A, åñëè âû÷èñëèì
ìèíèìàëüíûé ìíîãî÷ëåí A, òî åñòü ïîëèíîì f (X) =
bi X ìèíèìàëüíîé ñòåïåíè ñî ñòàðøèì êîýôôèöèåíòîì 1 òàêîé, ÷òî f (A). Çàìåòèì, ÷òî A = AT ,
òî åñòü A  ìàòðèöà ñàìîñîïðÿæåííîãî ëèíåéíîãî îïåðàòîðà, ñëåäîâàòåëüíî, â
íåêîòîðîì áàçèñå A ìîæåò áûòü çàïèñàíà äèàãîíàëüíîé ìàòðèöåé, è ìèíèìàëüíûé ìíîãî÷ëåí A áóäåò äåëèòü õàðàêòåðèñòè÷åñêèé. [Îòäåëüíî ñòîèò îòìåòèòü,
÷òî òàêàÿ ñõåìà ðàññóæäåíèé ðàáîòàåò ñ ëþáûì íåîðèåíòèðîâàííûì ãðàôîì.]
Çäåñü æå
1−λ
1
1
1

Çàìåòèì,

1
1

A=
1
1

1
−λ
0
1

1
0
−λ
1

1
1
= λ4 − 2λ3 + 4λ2 = (λ2 − 2λ + 4)λ2
1
1−λ

÷òî A3 − 2A2 + 4A = 0:


1 1 1
4

0 0 1
 , A2 = 2
2
0 0 1
1 1 1
4

2
2
2
2

2
2
2
2


4
2
,
2
4



12
8
3

A =
8
12

8
4
4
8

8
4
4
8


12
8

8
12

Ïðè ýòîì A2 − 2A + 4Id 6= 0, ïîýòîìó çàäà÷ó î ïîèñêå ðåêêóðåíòû íóæíî ñòàâèòü
òàê:
∀n > 3

g(n) = 2g(n − 1) + 4g(n − 2),

(c) Íà ïðîèçâîäÿùóþ ôóíêöèþ G(z) =


P

g(1) = 4, g(2) = 12.

g(n)z n−1 ýòîé ïîñëåäîâàòåëüíîñòè ïîëó-

k=1

÷àåòñÿ óðàâíåíèå

G(z) − 4 − 12z = 2z(G(z) − 4) + 4z 2 G(z),

2
1+z
îòêóäà G(z) = 4 1−2z−4z
5, è ðåøåíèÿ
2 . Çàìåòèì, ÷òî êîðíè 1 − 2z − 4z åñòü 1 ±
√ n
√ n
ìîæíî èñêàòü â âèäå g(n) = α(1 + 5) + β(1 − 5) . Èç óñëîâèé
(


α(1 + 5) + β(1 − 5) = 4

√ 2
α(1 + 5) + β(1 − 5)2 = 12

èìååì α =


5+3 5
,
10


5−3 5
.
10

Èòîãî
√ 

√ n 5 − 3 5 
√ n
5+3 5
g(n) =
1+ 5 +
1− 5 .
10
10
α=

231

Èçáðàííûå çàäà÷è è ðåøåíèÿ
Óðàâíåíèå íà ïðîèçâîäÿùóþ ôóíêöèþ ìîæíî çàïèñàòü è ïî ìîäóëþ 29, ïîëó÷èòñÿ ôîðìàëüíûé ðÿä ñ êîýôôèöèåíòàìè gn ∈ Z/29Z, âû÷èñëèì èõ ÿâíî.
Çàìåòèì äëÿ íà÷àëà, ÷òî 5 ÿâëÿåòñÿ êâàäðàòè÷íûì âû÷åòîì ïî ýòîìó ìîäóëþ:
â ñèëó êâàäðàòè÷íîãî çàêîíà âçàèìíîñòè
  
5−1 29−1
5
29
= (−1) 2 2 = (−1)28 = 1,
29
5
à 29 ≡ 22 mod 5. Ðåøåíèé x2 = 5 â Z/29Z ðîâíî 2, íàéäåì õîòÿ áû îäíî. Ìîæíî
÷åñòíî íàéòè ïåðâîîáðàçíûé êîðåíü è âîçâåñòè â íóæíóþ ñòåïåíü, íî ìîæíî
çàìåòèòü, ÷òî 112 = 121 = 29 · 4 + 5, è òîãäà êîðíè åñòü 11 è 18. Òîãäà çàìåíèì

5 íà 11 è ïîëó÷èì
n
38 n −28 
g(n) mod 29 =
12 +
− 10 = −2 · 12n + 3 · 19n
10
10

[åñëè áû ìû çàìåíèëè 5 íà 18, ïîëó÷èëàñü áû òà æå ôîðìóëà  ñëàãàåìûå
ïîìåíÿëèñü áû ìåñòàìè].
Ìîæíî íàïðÿìóþ âîçâåñòè â ñòåïåíü è âçÿòü îñòàòîê ïî ìîäóëþ 29. Îäíàêî
ìû âîñïîëüçóåìñÿ èíûì ñïîñîáîì: åñëè èçâåñòíû äâà ñîñåäíèõ ÷ëåíà ïîñëåäîâàòåëüíîñòè, òî ñëåäóþùèé ÷ëåí ìîæíî âû÷èñëèòü çà O(1), ñîâåðøèâ íåñêîëüêî
ñëîæåíèé è âçÿòèé îñòàòêà ïî ìîäóëþ 29. Âñå ýòè îïåðàöèè ìîæíî ñ÷èòàòü çà
ïîñòîÿííîå ïî n âðåìÿ: íàì äîñòàòî÷íî ðàáîòàòü ñ îñòàòêàìè gn ïî ìîäóëþ 29,
ìû ìîæåì âû÷èñëèòü (2gn−1 + 4gn−2 ) mod 29, ïðèáàâëÿÿ ïîøàãîâî gn−1 mod 29
èëè gn−2 mod 29 è çàòåì ñíîâà áåðÿ îñòàòîê ïî ìîäóëþ 29 [ëèáî ñðàçó ïîëó÷àåòñÿ îñòàòîê, ëèáî ïðèäåòñÿ âû÷åñòü 29]. Íàïðèìåð, äëÿ g(1) = 4 è g(2) = 12
âû÷èñëåíèÿ ïðîéäóò ñëåäóþùèì îáðàçîì: íàäî íàéòè g(3) = 2g(2) + 4g(1), òîãäà
ìû íà÷èíàåì ñ 0 è
• ïðèáàâëÿåì g(2) mod 29 = 12, ïîëó÷àåì 12, âû÷èòàòü 29 íå íàäî;
• ïðèáàâëÿåì g(2) mod 29 = 12, ïîëó÷àåì 24, âû÷èòàòü 29 íå íàäî;
• ïðèáàâëÿåì g(1) mod 29 = 4, ïîëó÷àåì 28, âû÷èòàòü 29 íå íàäî;
• ïðèáàâëÿåì g(1) mod 29 = 4, ïîëó÷àåì 32, âû÷èòàåì 29 è ïîëó÷àåì 3;
• ïðèáàâëÿåì g(1) mod 29 = 4, ïîëó÷àåì 7, âû÷èòàòü 29 íå íàäî;
• ïðèáàâëÿåì g(1) mod 29 = 4, ïîëó÷àåì 11, âû÷èòàòü 29 íå íàäî.
 èòîãå g(3) mod 29 = 11.
Îïèñàííûì âûøå ñïîñîáîì ìîæíî âû÷èñëèòü g(n) mod 29 çà O(n) øàãîâ.
(d) Ìû óæå çíàåì, ÷òî g(n) = 2g(n − 1) + 4g(n − 2), ïîýòîìó ïàðà îñòàòêîâ
(g(n − 1) mod 29, g(n − 2) mod 29)

îäíîçíà÷íî îïðåäåëÿåò g(n) mod 29. Òîãäà ïåðèîä îãðàíè÷åí ÷èñëîì ïàð îñòàòêîâ ïî ìîäóëþ 29, òî åñòü 292 = 841. Îòìåòèì, ÷òî ñîâåðøåííî íå îáÿçàòåëüíî
ïåðèîä äîëæåí ðàâíÿòüñÿ 292 , îí ìîæåò áûòü ñóùåñòâåííî ìåíüøå, êàê è äëÿ
232

Èçáðàííûå çàäà÷è è ðåøåíèÿ

Áèáëèîãðàôèÿ

äðóãèõ àíàëîãè÷íûõ ðåêêóðåíò âòîðîãî ïîðÿäêà. Íàïðèìåð, ïåðèîä Fn mod 11
ðàâåí 10 [ïðîâåðüòå ñàìîñòîÿòåëüíî]. Íî äëÿ ñëîæíîñòè íàøèõ âû÷èñëåíèé ýòî
íåñóùåñòâåííî: íàì äîñòàòî÷íî íàéòè ïåðèîä T 6 841, âçÿòü îñòàòîê n ïî ìîäóëþ T è âû÷èñëèòü gn mod T mod 29. Ñîãëàñíî ïðåäûäóùåìó ïóíêòó, âû÷èñëåíèå
ïåðèîäà ïîòðåáóåò O(T ) àðèôìåòè÷åñêèõ îïåðàöèé â ëþáîì ñëó÷àå, ÷òî íå çàâèñèò îò n. Âçÿòèå îñòàòêà n ïî ìîäóëþ T ìîæíî îñóùåñòâèòü çà O(log(n) log(T ))
îïåðàöèé, ïðîñòî ðàçäåëèâ ñ îñòàòêîì. Çàòåì çà ïîñòîÿííîå ïî n âðåìÿ ïðîäåëàòü îïåðàöèè èç ïðåäûäóùåãî ïóíêòà  íàì ïðèäåòñÿ ñ÷èòàòü íå áîëåå T
ïîñëåäîâàòåëüíûõ ÷ëåíîâ. Èòàê, ñëîæíîñòü ïî n ïîëó÷àåòñÿ ðàâíîé O(log(n)).
Èòàê, ïåðèîä ìîã áûòü ñóùåñòâåííî ìåíüøå 292 , íî îí îãðàíè÷åí êîíñòàíòîé, íå çàâèñÿùåé îò n, è ïîýòîìó ìû ëåãêî ïðîäåëàëè íàøè âû÷èñëåíèÿ.


233

Áèáëèîãðàôèÿ

Ñòàíäàðòíàÿ ëèòåðàòóðà ïî òåìå  [32, 28]. Õîðîøåå ââåäåíèå â àëãîðèòìû ñ òî÷êè
çðåíèÿ ïðîãðàììèñòà íàïèñàíî Ñåäæâèêîì [37], ìîæíî òàêæå ïîñåòèòü ñòðàíè÷êó åãî
êóðñà.
[1] Manindra Agrawal, Neeraj Kayal è Nitin Saxena. PRIMES is in P. Â:
160 (2004), ñ. 781793. url: https : / / www . cse . iitk . ac . in / users /
manindra/algebra/primality_v6.pdf.
[2] Manindra Agrawal è Chandan Saha. A Survey of Techniques Used in Algebraic and
Number Theoretic Algorithms. Â: (). url: https://drona.csa.iisc.ac.in/~chandan/
research/survey_CNT.pdf.
[3] S. Arora è B. Barak.
. Cambridge University
Press, 2009.
[4] J. A. Bondy è U.S.R. Murty.
. Springer, 2008.
[5] Joan Boyar. Inferring Sequences Produced by Pseudo-random Number Generators. Â:
36.1 (1989), ñ. 129141. issn: 0004-5411. doi: 10.1145/58562.59305. url:
http://doi.acm.org/10.1145/58562.59305.
[6] Alfred Brauer. On addition chains. Â:
45
(1939), ñ. 736739.
[7] Alonzo Church. An Unsolvable Problem of Elementary Number Theory. Â:
58.2 (1936). JSTOR, www.jstor.org/stable/2371045, ñ. 345
363.
[8] Neill Michael Clift. Calculating optimal addition chains. Â:
91.3 (2011),
ñ. 265284. issn: 1436-5057. doi: 10.1007/s00607- 010- 0118- 8. url: https://doi.
org/10.1007/s00607-010-0118-8.
[9] Leonard Eugene Dickson.
. Carnegie Institue of Washington,
1919. url: https://archive.org/details/historyoftheoryo01dick/page/1.
[10] Bakir Farhi. An identity involving the least common multiple of binomial coecients
and its application. Â:
, arXiv:0906.2295 (èþíü 2009), arXiv:0906.2295.
arXiv: 0906.2295 [math.NT].
[11] P. G
acs è L. Lovasz.
. lecture notes, 1999.
[12] M. Goresky è A. Klapper.
. CUP, 2012.
[13] R.L. Graham è Pavol Hell. On the History of the Minimum Spanning Tree Problem.
Â:
7 (ôåâð. 1985), ñ. 4357. doi: 10.1109/MAHC.
1985.10011.
[14] G. Grimmett è D. Stirzaker.
. Oxford University
Press, 2001.
[15] D. Jungnickel.
. Springer, 2013.
[16] R. Motwani è P. Raghavan.
. Cambridge University Press, 1995.
[17] M. Nair. On Chebyshev-Type Inequalities for Primes. Â:
89.2 (1982), ñ. 126129. url: http://www.jstor.org/stable/2320934.

Annals of

Mathematics

Computational complexity: a modern approach
Graph theory

J. ACM

Journal of Mathematics

Bulletin American Mathematical Society
American
Computing

History of the Theory of Numbers

arXiv e-prints
Complexity of algorithms
Algebraic Shift Register Sequences
Annals of the History of Computing
One thousand exercises in probability
Graphs, Networks and Algorithms
Randomized algorithms
The American Mathematical
Monthly

Èçáðàííûå çàäà÷è è ðåøåíèÿ
[18]
[19]
[20]
[21]

[22]
[23]
[24]
[25]
[26]
[27]
[28]
[29]
[30]
[31]
[32]
[33]
[34]
[35]
[36]
[37]
[38]

Áèáëèîãðàôèÿ

SIAM Journal of Computing

Vaughn Pratt. Every prime has a succint serticate. Â:
4.3 (1975), ñ. 214220. url: http://boole.stanford.edu/pub/SucCert.pdf.
J. Barkley Rosser è Lowell Schoenfeld. Approximate formulas for some functions of
prime numbers. Â:
6.1 (ìàðò 1962), ñ. 6494. doi: 10.1215/ijm/
1255631807. url: https://doi.org/10.1215/ijm/1255631807.
V. Shoup.
. 2009. url: http://e-maxx.
ru/bookz/files/shoup.pdf.
A. M. Turing. On Computable Numbers, with an Application to the Entscheidungsproblem.
A Correction. Â:
s2-43.1 (1938), ñ. 544
546. doi: 10.1112/plms/s2-43.6.544. eprint: https://londmathsoc.onlinelibrary.
wiley . com / doi / pdf / 10 . 1112 / plms / s2 - 43 . 6 . 544. url: https : / / londmathsoc .
onlinelibrary.wiley.com/doi/abs/10.1112/plms/s2-43.6.544.
Í. Àëîí è Äæ. Ñïåíñåð.
. Ìîñêâà: Áèíîì, 2011.
Ì. Áàëàçàð.
. ÌÖÍÌÎ, 2013.
url: http://www.mccme.ru/free-books/dubna/balazard.pdf.
È. Âèíîãðàäîâ.
. Ìîñêâà: Ãîñòåõèçäàò, 1952.
Ä. Ãèëüáåðò è Â. Àêêåðìàí.
. Ìîñêâà: Èíîñòðàííàÿ
ëèòåðàòóðà, 1947.
À.À. Ãëèáè÷óê è äð.
. ÌÖÍÌÎ, 2016. url: https:
//www.mccme.ru/circles/oim/discrbook.pdf.
Ì. Ãýðè è Ä. Äæîíñîí.
. Ìîñêâà:
Ìèð, 1982.
Ñ. Äàñãóïòà, Õ. Ïàïàäèìèòðèó è Ó. Âàçèðàíè.
. Ìîñêâà: ÌÖÍÌÎ, 2014.
À. Çâîíêèí è Ñ. Ëàíäî.
. Ìîñêâà: ÌÖÍÌÎ, 2010.
À. Êèòàåâ, À. Øåíü è Ì. Âÿëûé.
. Ìîñêâà:
ÌÖÍÌÎ, 1999.
Ä. Êíóò.
. Ìîñêâà: Âèëüÿìñ, 2002.
Ò. Êîðìåí è äð.
. 3-å èçä. Ìîñêâà: Âèëüÿìñ, 2013.
Í. Êóçþðèí è Ñ. Ôîìèí.
.
Ìîñêâà: Ìèð, 1979.
Ä. Â. Ìóñàòîâ.
. êîíñïåêò ëåêöèé. ÌÔÒÈ, 2016. url: http://
ru.discrete-mathematics.org/fall2016/3/complexity/compl-book.pdf.
Àë. Îìåëü÷åíêî.
. Ìîñêâà: ÌÖÍÌÎ, 2018.
Õ. Ïàïàäèìèòðèó è Ê. Ñòàéãëèö.
. Ìîñêâà: Ìèð, 1985.
Ð. Ñåäæâèê.
. Ì.: Äèà-Ñîôò, 2001.
À. Øèðÿåâ.
. Ìîñêâà: ÌÖÍÌÎ, 2003.

Illinois J. Math.
A computuational introduction to group theory

Proceedings of the London Mathematical Society

Âåðîòÿíîñòíûé ìåòîä
Àñèìïòîòè÷åñêèé çàêîí ðàñïðåäåëåíèÿ ïðîñòûõ ÷èñåë
Îñíîâû òåîðèè ÷èñåë
Îñíîâû òåîðåòè÷åñêîé ëîãèêè
Ýëåìåíòû ìàòåìàòèêè â çàäà÷àõ
Âû÷èñëèòåëüíûå ìàøèíû è òðóäíîðåøàåìûå çàäà÷è
Àëãîðèòìû
Ãðàôû íà ïîâåðõíîñòÿõ è èõ ïðèëîæåíèÿ
Êëàññè÷åñêèå è êâàíòîâûå âû÷èñëåíèÿ
Èñêóññòâî ïðîãðàììèðîâàíèÿ äëÿ ÝÂÌ
Àëãîðèòìû: ïîñòðîåíèå è àíàëèç
Ýôôåêòèâíûå àëãîðèòìû è ñëîæíîñòü âû÷èñëåíèé
Òåîðèÿ ñëîæíîñòè
Òåîðèÿ ãðàôîâ
Êîìáèíàòîðíàÿ îïòèìèçàöèÿ. Àëãîðèòìû è
ñëîæíîñòü
Ôóíäàìåíòàëüíûå àëãîðèòìû íà C++
Âåðîÿòíîñòü
237

Powered by TCPDF (www.tcpdf.org)