×àñòü 5. Ýëåìåíòû òåîðèè ñëîæíîñòè
Âåðîÿòíîñòíûå àëãîðèòìû: îïðåäåëåíèÿ
Êëàññû P, NP è co − NP
P RIM ES ⊂ NP ∩ co − NP
Ñèñòåìû ëèíåéíûõ íåðàâåíñòâ
Ïîëèíîìèàëüíàÿ ñâîäèìîñòü
ôóíêöèÿ ïîëèíîìèàëüíîãî ðîñòà, ò.å. äëÿ ëþáîãî 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
òî 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 ).
Óñëîâíàÿ âåðîÿòíîñòü 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 âûïîëíåíà ôîðìóëà ïîëíîé âåðîÿòíîñòè:
Ñîðòèðîâêè è ìåäèàíû
Ïîñêîëüêó 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]
Ñîðòèðîâêè è ìåäèàíû
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
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.
ãäå 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.
Åñëè 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)).
íàçûâàþò òàêîå ìíîæåñòâî 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.
 àëãîðèòì 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:
ãäå 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.
Ïóñòü 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:
Âûâîä 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 . Ïðåäñòàâèì ìàòðèöû â áëî÷íîì âèäå:
Áûñòðîå âîçâåäåíèå â ñòåïåíü
Ïóñòü íóæíî âû÷èñëèòü 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
Àëãåáðà è òåîðèÿ ÷èñåë
Äîêàçàòåëüñòâî. Ïî çàäàííîìó k ìû ÿâíî ïîñòðîèì àääèòèâíóþ öåïî÷êó ÷èñëà n
è ïîêàæåì, ÷òî åå äëèíà îãðàíè÷åíà ïðàâîé ÷àñòüþ íåðàâåíñòâà â ôîðìóëèðîâêå òåîðåìû.
Ïóñòü m = 2k , à
log2k m+1
X
dt−i mi
n=
i=0
m-è÷íîå ïðåäñòàâëåíèå ÷èñëà n. Ðàññìîòðèì ïîñëåäîâàòåëüíîñòü
1, . . . m − 1,
2
Ìû ñíà÷àëà ïîëó÷àåì âñåâîçìîæíûå çíà÷åíèÿ 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)
Àëãåáðà è òåîðèÿ ÷èñåë
 ñèììåòðè÷åñêîé êðèïòîñèñòåìå Àëèñà è Áîá èñïîëüçóþò îäèí è òîò æå êëþ÷ äëÿ
øèôðîâàíèÿ è äåøèôðîâàíèÿ ñîîáùåíèÿ, ïåðåäàâàòü ýòîò êëþ÷ îíè ìîãóò ëèøü ïî îòêðûòîìó êàíàëó. Äèôôè è Õåëëìàí ïðåäëîæèëè äîñòàòî÷íî êðèïîòóñòîé÷èâóþ ñèììåòðè÷åñêóþ ñõåìó.
(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:
(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 .
Îáîáùåíèÿ è íåêîòîðûå ïðèìåíåíèÿ ÁÏÔ. Òåïåðü ïîêàæåì, êàê ïîëó÷èòü
ÁÏÔ äëÿ ïðîèçâîëüíîãî 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
Ïóñòü ÍÎÄ(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 ñóùåñòâóåò.
Òåîðåìà 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 |
öåëûõ 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:
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
Äåéñòâèòåëüíî, ïîñêîëüêó |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
ïðîñòîå ÷èñëî.
Äîêàçàòåëüñòâî. Êîãäà 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) áèòîâûõ
îïåðàöèé.
• Ïóñòü φ : 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
îòêóäà 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 âðåìÿ [àëãîðèòì ñòðîèòñÿ àíàëîãè÷íî òåñòó
Ðàáèíà-Ìèëëåðà].
Íåòðóäíî òàêæå ïðîâåðèòü, ÷òî 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. Îáîçíà÷èì
Êðîìå òîãî, îáðàòèìûé êâàäðàò ïî ìîäóëþ 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 |
Àëãåáðà è òåîðèÿ ÷èñåë
Òàêèì îáðàçîì, íàì ïîíàäîáèòñÿ â ñðåäíåì íå áîëåå 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
Àëãîðèòì Äèêñîíà ñîâåðøàåò â ñðåäíåì Õ
òîâûõ îïåðàöèé.
Òåîðåìà 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
Àëãåáðà è òåîðèÿ ÷èñåë
òèòòê âñå åãî ìîíîìû èìåþò ñòåïåíü êðàòíóþ 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))
Åñëè 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,
ðàññìîòðèì îòîáðàæåíèå
Äîêàçàòåëüñòâî.
Ãðóïïà 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
Íà îñíîâå äîêàçàòåëüñòâà ýòîé òåîðåìû ìîæíî ïîñòðîèòü àëãîðèòì, íàõîäÿùèé ýéëåðîâ öèêë â ýéëåðîâîì ãðàôå çà ëèíåéíîå âðåìÿ. Íà âõîä ìû áóäåì ïîäàâàòü ãðàô â
âèäå ñïèñêà ñìåæíîñòè {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 ðàñïàäàåòñÿ íà êîíå÷íîå ÷èñëî êîìïîíåíò ñâÿçíîñòè, åñëè
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
Äîêàçàòåëüñòâî. Ìîæíî ñ÷èòàòü, ÷òî 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-äåðåâà îòìå÷åíû êðàñíûì öâåòîì.
Ïóñòü 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 })
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
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|) îïåðàöèé.
Ãðàôû è àëãîðèòìû
Òåïåðü ïîêàæåì, ÷òî èñõîäíàÿ ÊÍÔ âûïîëíèìà òîãäà è òîëüêî òîãäà, êîãäà íå ñóùåñòâóåò ïóòè èç 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:
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 äâóäîëüíûé.
Ïóñòü 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.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π áîëüøå íåò.
Àëãîðèòì Äåéêñòðû. Àëãîðèòì Äåéêñòðû ïîçâîëÿåò íàéòè êðàò÷àéøèå ïóòè èç
âåðøèíû 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.
(
(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
Îïðåäåëåíèå 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
Èñòîðèÿ ïîÿâëåíèÿ àëãîðèòìîâ íàõîæäåíèÿ ìèíèìàëüíîãî
îñòîâíîãî äåðåâà. Ïî ïîðÿäêó çäåñü çàíóìåðîâàíû àëãîðèòì Êðóñêàëà,
Ïðèìà è Áîðóâêè. Ïîñëåäíèå äâà àëãîðèòìà, 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:
Òåïåðü ïåðåéäåì ê
. Ñíà÷àëà äàäèì íåñêîëüêî îáùóþ âåðñèþ.
Ïóñòü 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}
ïîìåñòèòü 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}
• Îãðàíè÷åíèÿ ïðîïóñêíûõ ñïîñîáíîñòåé: 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
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).
Îïðåäåëåíèå 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 ìàêñèìàëåí.
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 .
ïîìåòèòü 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
Õîòÿ àëãîðèòì Ford-Fulkerson
êîððåêòíî ðàáîòàåò íà öåëî÷èñëåííûõ
ñåòÿõ, îí íå ïîëèíîìèàëåí: êîëè÷åñòâî
óâåëè÷èâàíèé çàâèñèò íå òîëüêî îò |V | è
|E|, íî è îò çíà÷åíèé c. Ðàññìîòðèì
ïðèìåð ñåòè íà êàðòèíêå ñëåâà. Åñëè ìû
èñïîëüçóåì ïóòè s → a → b → e → f → t è
s → d → e → b → c → t, òî íàì
ïîíàäîáèòñÿ 2n èòåðàöèé äëÿ ïîëó÷åíèÿ
ìàêñèìàëüíîãî ïîòîêà.
Ãðàôû è àëãîðèòìû
Ìû ïîêàæåì, ÷òî àëãîðèòì Òàðüÿíà-Ãîëäáåðãà íàõîäèò ìàêñèìàëüíûé ïîòîê â ñåòè
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.
Åñëè àëãîðèòì 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 äàåò
ÿâëÿåòñÿ ðàçðåçîì äëÿ êàæäîãî i < D. Ïîñêîëüêó êàæäîå ðåáðî e, äëÿ êîòîðîãî e− ∈ Si
è e+ ∈ Ti , óäîâëåòâîðÿåò óñëîâèÿì e− ∈ Vi è e+ ∈ Vi+1 , à N ÿâëÿåòñÿ 0-1-ñåòüþ, èç ìû
ïîëó÷àåì
M 6 c(Si , Ti ) 6 |Vi | × |Vi + 1|,
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|).
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, ïîëó÷àåì óòâåðæäåíèå.
Äîêàçàòåëüñòâî. Ïóñòü 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:
Äîêàçàòåëüñòâî. Åñëè 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),
Îïðåäåëåíèå 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
Ïî÷åìó ýòà ÌÒ êîððåêòíà? Ïóñòü íà êàêîì-òî øàãå îíà íàõîäèòñÿ â êîíôèãóðàöèè
âèäà 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 ].
, 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. Âîçìîæíîñòü âêëþ÷åíèÿ â îáðàòíóþ
ñòîðîíó äî ñèõ ïîð îñòàåòñÿ îòêðûòûì âîïðîñîì.
Èìååò ìåñòî ñëåäóþùàÿ àëüòåðíàòèâà.
Ñèñòåìà 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 èñêîìûé.
äëÿ ëþáîãî 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
îäíîâðåìåííî.
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 |.
Ñâîäèìîñòü ÃÖ ê ÃÏ ñòðîèòñÿ òðèâèàëüíî: ãðàôó 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
Ïðèâåäåì φ ê ÊÍÔ φ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).
Ýëåìåíòû òåîðèè ñëîæíîñòè
• 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{ è íàîîáîðîò.
à íà ðèñóíêå â ïðîøëîé çàäà÷å áûëè íå âûáðàíû âåðøèíû [¬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
èìååì
äåéñòâèòåëüíî çàäàþò ïîëèíîìèàëüíûå ñâîäèìîñòè Ãàìèëüòîíîâ
è 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
ïîëèíîìèàëüíî ñâîäèòñÿ ê Ïåðåñå÷åíèå ãðóïï è íàîîáîðîò.
È ïîñêîëüêó ìû ãîâîðèì, ÷òî èçîìîðôèçì ãðàôîâ ñâîäèòñÿ ê 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.
Íåòðóäíî âèäåòü, ÷òî àëãîðèòì âûáèðàåò ëèøü îäèí æåëòûé èíòåðâàë è äàåò
ìàêñèìóì èç îäíîãî ñîáûòèÿ, â òî âðåìÿ êàê ìîæíî ïîñåòèòü òðè ñîáûòèÿ.
(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 îòíîñèòåëüíî âçÿòèÿ äîïîëíåíèÿ.
äðóãèõ àíàëîãè÷íûõ ðåêêóðåíò âòîðîãî ïîðÿäêà. Íàïðèìåð, ïåðèîä 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
Последние комментарии
4 часов 37 минут назад
5 часов 32 минут назад
5 часов 35 минут назад
16 часов 26 минут назад
16 часов 28 минут назад
1 день 5 часов назад