260
A A I (A)= - log b p(A), p(A) A 2, n n 8 1 8. A, P (A)=1/8 I (A)= - log 2 (1/8)) = 3. A, [1,...,m],

Теория алгоритмов. Котов В.М., Соболевская Е.П

Embed Size (px)

Citation preview

Page 1: Теория алгоритмов. Котов В.М., Соболевская Е.П

à ë à â à 1

Ïðîåêòèðîâàíèå è àíàëèç1.1. Òðóäîåìêîñòü àëãîðèòìà

Ïðåæäå ÷åì ââåñòè òàêèå ïîíÿòèÿ, êàê ðàçìåðíîñòü çàäà÷è èòðóäîåìêîñòü àëãîðèòìà, íàì áóäåò íåîáõîäèìî áóäåò äàòü îïðåäå-ëåíèå èíôîðìàöèè .Îïðåäåëåíèå 1.1. Ïóñòü A íåêîòîðàÿ ñëó÷àéíàÿ âåëè÷èíà, òî-ãäà êîëè÷åñòâî èíôîðìàöèè, êîòîðîãî äîñòàòî÷íî äëÿ çíàíèÿ òîãî,÷òî ñîáûòèå A ïðîèçîøëî îïðåäåëÿåòñÿ ïî ñëåäóþùåìó ïðàâèëó:

I(A) = − logb p(A),

ãäå p(A) âåðîÿòíîñòü, ñ êîòîðîé ñîáûòèå A ïðîèçîéäåò.Åñëè â êà÷åñòâå îñíîâàíèÿ ëîãàðèôìà âçÿòü 2, òî åäèíèöåé èç-

ìåðåíèÿ èíôîðìàöèè áóäåò áèò.Âïåðâûå ââåñòè ìåðó èíôîðìàöèè ïîïûòàëñÿ Ð. Õàðòëè â 1928

ãîäó.  ñâîèõ ðàññóæäåíèÿõ îí èñõîäèë èç èíòóèòèâíîé èäåè î òîì,÷òî ñîîáùåíèå, ñîñòîÿùåå èç n ñèìâîëîâ, äîëæíî íåñòè n ðàç áîëü-øå èíôîðìàöèè, ÷åì ñîîáùåíèå, ñîñòîÿùåå èç îäíîãî ñèìâîëà. Åäèí-ñòâåííîé ôóíêöèåé, êîòîðàÿ óäîâëåòâîðÿåò ýòîìó ñâîéñòâó, ÿâëÿåòñÿëîãàðèôìè÷åñêàÿ ôóíêöèÿ.Ïðèìåð 1.1. Ïóñòü èìååòñÿ 8 øàðîâ, ñ íîìåðàìè îò 1 äî 8. Êàêîãî êî-ëè÷åñòâà èíôîðìàöèè äîñòàòî÷íî äëÿ óñòàíîâëåíèÿ íîìåðà âûáðàííîãîñëó÷àéíûì îáðàçîì øàðà?Ðåøåíèå. Òàê êàê ëþáîé øàð ìîæåò áûòü âûáðàí ñ ðàâíîé âåðîÿò-íîñòüþ, òî âåðîÿòíîñòü ñîáûòèÿ A, çàêëþ÷àþùåãîñÿ â îïðåäåëåíèèíîìåðà âûáðàííîãî øàðà, åñòü P (A) = 1/8 è I(A) = − log2(1/8)) = 3.Çàìåòèì, ÷òî äåéñòâèòåëüíî òðåõ áèòîâ äîñòàòî÷íî, ÷òîáû çàäàòü âïàìÿòè êîìïüþòåðà ëþáîå ÷èñëî îò 1 äî 8.Ïðèìåð 1.2. Ïðåäïîëîæèì, ÷òî íà âõîä ïîñòóïàåò íåêîòîðîå ÷èñëîA, êîòîðîå ìîæåò áûòü âûáðàíî èç èíòåðâàëà [1, . . . , m], ïðè÷åì ëþáîé

3

Page 2: Теория алгоритмов. Котов В.М., Соболевская Е.П

âûáîð ÿâëÿåòñÿ ðàâíîâåðîÿòíûì. Êàêîå êîëè÷åñòâî áèòîâ íåîáõîäèìîäëÿ îïðåäåëåíèÿ òîãî, êàêîå êîíêðåòíî ÷èñëî ìû âûáðàëè?Ðåøåíèå. Èç îïðåäåëåíèÿ èíôîðìàöèè ñëåäóåò, ÷òî

I(A) = dlog2 me

åñòü òî êîëè÷åñòâî áèòîâ, êîòîðîå íåîáõîäèìî äëÿ îïðåäåëåíèÿ òîãî,êàêîå êîíêðåòíî ÷èñëî ìû âûáðàëè.

Çäåñü è äàëåå ñèìâîë dxe áóäåò îçíà÷àòü íàèìåíüøåå öåëîå, íåìåíüøåå x.

Îïðåäåëåíèå 1.2. Ðàçìåðíîñòüþ çàäà÷è l áóäåì íàçûâàòü êîëè÷å-ñòâî èíôîðìàöèè, êîòîðîé äîñòàòî÷íî äëÿ ôîðìàëüíîãî îïèñàíèÿçàäà÷è.

Ïîä ôîðìàëüíûì îïèñàíèåì çàäà÷è ìû ïîíèìàåò òàêîå åå îïèñà-íèå, êîãäà íàñ íå èíòåðåñóåò êîíêðåòíûé àëãîðèòì ðåøåíèÿ çàäà÷è,à ñàìà çàäà÷à îïèñûâàåòñÿ êàê íåêîòîðàÿ ôóíêöèÿ íà âõîäå êîòîðîéïîñòóïàþò íåêîòîðûå ôîðìàëüíûå ïàðàìåòðû, çàäàþùèå åå âõîäíûåè âûõîäíûå ïàðàìåòðû.

 äàëüíåéøåì ìû ïîêàæåì, ÷òî åñëè ïðåäïîëîæèòü, ÷òî ðàçìåð-íîñòü ìàøèííîãî ñëîâà äîñòàòî÷íà äëÿ ïðåäñòàâëåíèÿ (ðàçðóøåíèÿíåîïðåäåëåííîñòè) ëþáîãî ÷èñëà, òî ðàçìåðíîñòü çàäà÷è áóäåò ðàâíà÷èñëó åå èñõîäíûõ äàííûõ â åå ôîðìàëüíîì îïèñàíèè.Ïðèìåð 1.3. Ïðåäïîëîæèì, ÷òî íà âõîä íåêîòîðîãî àëãîðèòìà ïîñòó-ïàþò äâà ÷èñëà: a è b. Îïðåäåëèòü ðàçìåðíîñòü çàäà÷è.Ðåøåíèå. Ðàçìåðíîñòü çàäà÷è (ò. å. êîëè÷åñòâî èíôîðìàöèè, äîñòà-òî÷íîé äëÿ çàäàíèÿ ýòèõ ÷èñåë), ðàâíà l = l1 + l2, ãäå l1 = dlog2 ae èl2 = dlog2 be.Ïðèìåð 1.4. Ïðåäïîëîæèì, ÷òî íà âõîä ïîñòóïàåò n ÷èñåë a1, . . . , an.Îïðåäåëèòü ðàçìåðíîñòü çàäà÷è.Ðåøåíèå. Ðàçìåðíîñòü çàäà÷è åñòü

l =n∑

i=1

dlog2 aie.

Åñëè ïðåäïîëîæèòü, ÷òî ðàçìåðíîñòè ìàøèííîãî ñëîâà äîñòàòî÷íîäëÿ ïðåäñòàâëåíèÿ ëþáîãî èç ÷èñåë (ò. å. maxi=1,...,ndlog2 aie ≤ const),òî ðàçìåðíîñòü çàäà÷è l ìîæíî îöåíèòü âåëè÷èíîé n.

4

Page 3: Теория алгоритмов. Котов В.М., Соболевская Е.П

Îïðåäåëåíèå 1.3. Âðåìÿ, çàòðà÷èâàåìîå àëãîðèòìîì êàê ôóíê-öèÿ îò ðàçìåðíîñòè çàäà÷è íàçûâàåòñÿ âðåìåííîé ñëîæíîñòüþ àë-ãîðèòìà. Ýòî ôóíêöèÿ, êîòîðàÿ çàäà÷å ðàçìåðíîñòè l ñòàâèò â ñî-îòâåòñòâèå âðåìÿ f(l), çàòðà÷èâàåìîå àëãîðèòìîì äëÿ åå ðåøåíèÿ.Îáúåì ïàìÿòè, òðåáóåìûé äëÿ ðåàëèçàöèè àëãîðèòìà êàê ôóíê-öèÿ îò ðàçìåðíîñòè çàäà÷è, íàçûâàåòñÿ åìêîñòíîé ñëîæíîñòüþàëãîðèòìà. Ïîâåäåíèå âðåìåííîé (åìêîñòíîé) ñëîæíîñòè ïðè óâå-ëè÷åíèè ðàçìåðíîñòè çàäà÷è äî áåñêîíå÷íîñòè íàçûâàåòñÿ àñèìï-òîòè÷åñêîé âðåìåííîé ñëîæíîñòüþ (àñèìïòîòè÷åñêîé åìêîñòíîéñëîæíîñòüþ).

Åñëè ïðè äàííîé ðàçìåðíîñòè â êà÷åñòâå ìåðû ñëîæíîñòè áåðåò-ñÿ íàèáîëüøàÿ èç ñëîæíîñòåé (ïî âñåì âõîäàì ýòîé ðàçìåðíîñòè),òî îíà íàçûâàåòñÿ ñëîæíîñòüþ â õóäøåì ñëó÷àå. Åñëè ïðè äàííîìðàçìåðå â êà÷åñòâå ìåðû ñëîæíîñòè áåðåòñÿ ñðåäíÿÿ ñëîæíîñòü (ïîâñåì âõîäàì äàííîé ðàçìåðíîñòè), òî îíà íàçûâàåòñÿ ñðåäíåé ñëîæ-íîñòüþ. Îáû÷íî ñðåäíþþ ñëîæíîñòü íàéòè òðóäíåå, ÷åì ñëîæíîñòüâ õóäøåì ñëó÷àå. Îäíàêî íå ñëåäóåò çàáûâàòü, ÷òî àëãîðèòì ñ íàè-ìåíüøåé ñëîæíîñòüþ â õóäøåì ñëó÷àå íå îáÿçàòåëüíî èìååò ëó÷øóþñêîðîñòü â ñðåäíåì.

Åñëè íåêîòîðûé àëãîðèòì îáðàáàòûâàåò âõîäû äëèíû n çà âðåìÿCn2, ãäå C íåêîòîðàÿ êîíñòàíòà, òî ãîâîðÿò, ÷òî âðåìåííàÿ ñëîæ-íîñòü ýòîãî àëãîðèòìà åñòü O(n2) ("ïîðÿäêà n2").

 îáùåì ñëó÷àå áóäåì ãîâîðèòü, ÷òî íåîòðèöàòåëüíàÿ ôóíêöèÿ• T (n) åñòü O(f(n)), åñëè ñóùåñòâóåò òàêàÿ êîíñòàíòà C è n0, ÷òî

T (n) ≤ Cf(n) äëÿ âñåõ n ≥ n0;

• T (n) åñòü Ω(f(n)), åñëè ñóùåñòâóåò òàêàÿ êîíñòàíòà C è n0, ÷òîT (n) ≥ Cf(n) äëÿ âñåõ n ≥ n0;

• T (n) åñòü Θ(f(n)), òîãäà è òîëüêî òîãäà, êîãäà T (n) = O(f(n))è T (n) = Ω(f(n)).

Äëÿ àñèìïòîòèê ñïðàâåäëèâû ñëåäóþùèå ïðàâèëà.1. Åñëè f(n) åñòü O(g(n)) è g(n) åñòü O(h(n)), òî f(n) åñòü O(h(n)).

2. Åñëè f(n) åñòü O(kg(n)) äëÿ íåêîòîðîé êîíñòàíòû k > 0, òî f(n)åñòü O(g(n)).

3. Åñëè f1(n) åñòü O(g1(n)) è f2(n) åñòü O(g2(n)), òî f1(n) + f2(n)åñòü O(max(g1(n), g2(n))).

5

Page 4: Теория алгоритмов. Котов В.М., Соболевская Е.П

4. Åñëè f1(n) åñòü O(g1(n)) è f2(n) åñòü O(g2(n)), òî f1(n) · f2(n)åñòü O(g1(n) · g2(n)).

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

f(l) = O(p(l)),

ãäå p(l) íåêîòîðàÿ ïîëèíîìèàëüíàÿ ôóíêöèÿ, à l ðàçìåðíîñòüçàäà÷è. Àëãîðèòìû, ó êîòîðûõ âðåìåííàÿ ñëîæíîñòü ðàâíà

f(l) = Ω(exp(l)),

ãäå exp(l) íåêîòîðàÿ ýêñïîíåíöèàëüíàÿ ôóíêöèÿ, íàçûâàþòñÿ ýêñ-ïîíåíöèàëüíûìè.

Äðóãèìè ñëîâàìè, àëãîðèòì ÿâëÿåòñÿ ïîëèíîìèàëüíûì, åñëè ìà-æîðàíòà åãî òðóäîåìêîñòè ÿâëÿåòñÿ ïîëèíîìîì è ýêñïîíåíöèàëüíûì,åñëè ìèíîðàíòà åãî òðóäîåìêîñòè ÿâëÿåòñÿ ýêñïîíåíòîé. Îòìåòèì,÷òî åñëè ìàæîðàíòà òðóäîåìêîñòè àëãîðèòìà ÿâëÿåòñÿ ýêñïîíåíòîé,òî î òðóäîåìêîñòè àëãîðèòìà íåëüçÿ íè÷åãî ñêàçàòü.

Ðàçëè÷èå ìåæäó ïîëèíîìèàëüíûìè è ýêñïîíåíöèàëüíûìè àëãî-ðèòìàìè çàìåòíî ïðè ðåøåíèè çàäà÷ áîëüøîé ðàçìåðíîñòè.

Âðåìåííàÿ ñëîæíîñòü n = 10 n = 20 n = 30

n 0.00001 c 0.00002 c 0.00003 cn2 0.0001 c 0.0004 c 0.0009 cn3 0.001 c 0.008 c 0.027 cn5 0.1 c 3.2 c 24.3 c2n 0.001 c 1 c 17.9 ìèí3n 0.059 c 58 ìèí 6.5 ëåò

Ñëåäóåò îòìåòèòü î÷åíü áûñòðûé ðîñò äâóõ ïðèâåäåííûõ ýêñïî-íåíò. Ðàçëè÷èå ìåæäó ïîëèíîìèàëüíûìè è ýêñïîíåíöèàëüíûìè àëãî-ðèòìàìè ïðîÿâëÿåòñÿ åùå áîëåå óáåäèòåëüíî, åñëè ïðîàíàëèçèðîâàòüâëèÿíèå óâåëè÷åíèÿ áûñòðîäåéñòâèÿ ÝÂÌ íà âðåìÿ ðàáîòû àëãîðèò-ìîâ. Òàê, äëÿ ôóíêöèè f = 2n óâåëè÷åíèå ñêîðîñòè âû÷èñëåíèé â

6

Page 5: Теория алгоритмов. Котов В.М., Соболевская Е.П

1000 ðàç ïðèâîäèò ëèøü ê òîìó, ÷òî ðàçìåðíîñòü íàèáîëüøåé çàäà÷è,ðàçðåøèìîé çà îäèí ÷àñ, âîçðàñòåò òîëüêî íà 10, â òî âðåìÿ êàê äëÿôóíêöèè f(n) = n5 ýòà ðàçìåðíîñòü âîçðàñòåò ïî÷òè â 4 ðàçà. Òàêèìîáðàçîì, êîëîññàëüíûé ðîñò ñêîðîñòè âû÷èñëåíèé, âûçâàííûé ïîÿâ-ëåíèåì íûíåøíåãî ïîêîëåíèÿ öèôðîâûõ âû÷èñëèòåëüíûõ ìàøèí, íåóìåíüøàåò çíà÷åíèå ýôôåêòèâíûõ àëãîðèòìîâ.

Ñ äðóãîé ñòîðîíû, íåêîòîðûå ýêñïîíåíöèàëüíûå àëãîðèòìû äî-ñòàòî÷íî ýôôåêòèâíû íà ïðàêòèêå, êîãäà ðàçìåðû ðåøàåìûõ çàäà÷íåâåëèêè. Òàê, ôóíêöèÿ f(n) = 2n âåäåò ñåáÿ ëó÷øå, ÷åì f(n) = n5

ïðè n ≤ 20). Êðîìå òîãî, èçâåñòíû íåêîòîðûå ýêñïîíåíöèàëüíûå àë-ãîðèòìû, âåñüìà õîðîøî çàðåêîìåíäîâàâøèå ñåáÿ íà ïðàêòèêå. Äå-ëî â òîì, ÷òî âðåìåííàÿ ñëîæíîñòü îïðåäåëåíà êàê ìåðà ïîâåäåíèÿàëãîðèòìà â íàèõóäøåì ñëó÷àå (óòâåðæäåíèå î òîì, ÷òî àëãîðèòìèìååò âðåìåííóþ ñëîæíîñòü 2n, îçíà÷àåò, ÷òî ðåøåíèå ïî êðàéíåéìåðå îäíîé çàäà÷è ðàçìåðíîñòè n òðåáóåò âðåìåíè ïîðÿäêà 2n) íàñàìîì äåëå ìîæåò îêàçàòüñÿ, ÷òî äëÿ áîëüøèíñòâà äðóãèõ çàäà÷ çà-òðàòû âðåìåíè çíà÷èòåëüíî ìåíüøå (ñèìïëåêñ-ìåòîä, ìåòîä âåòâåé èãðàíèö ðåøåíèÿ çàäà÷è î ðþêçàêå).

Ñëåäóåò îòìåòèòü, ÷òî áîëüøèíñòâî ýêñïîíåíöèàëüíûõ àëãîðèò-ìîâ ýòî ïðîñòî âàðèàíòû ïîëíîãî ïåðåáîðà.

Äëÿ òîãî, ÷òîáû âû÷èñëÿòü ñëîæíîñòü àëãîðèòìà, íåîáõîäèìîîïðåäåëèòü ìîäåëü âû÷èñëèòåëüíîãî óñòðîéñòâà, êîòîðîå èñïîëüçó-åòñÿ äëÿ ðåàëèçàöèè àëãîðèòìà, à òàêæå óñëîâèòüñÿ, ÷òî ïîíèìàòüïîä ýëåìåíòàðíûì øàãîì âû÷èñëåíèÿ. Ìû áóäåì èñïîëüçîâàòü ðàâ-íîäîñòóïíóþ àäðåñíóþ ìàøèíó (ÐÀÌ), êîòîðàÿ ïðåäñòàâëÿåò èç ñåáÿâû÷èñëèòåëüíóþ ìàøèíó ñ îäíèì ñóììàòîðîì, â êîòîðîì êîìàíäûïðîãðàììû íå ìîãóò èçìåíÿòü ñàìè ñåáÿ. ÐÀÌ ñîñòîèò èç âõîäíîéëåíòû, ñ êîòîðîé îíà ìîæåò òîëüêî ñ÷èòûâàòü, âûõîäíîé ëåíòû, íàêîòîðóþ îíà ìîæåò òîëüêî çàïèñûâàòü, è ïàìÿòè, êîòîðàÿ ñîñòîèòèç ïîñëåäîâàòåëüíîñòè ðåãèñòðîâ. Ñàìà ïðîãðàììà ïîñëåäîâàòåëü-íîñòü êîìàíä, îíà íå çàïèñûâàåòñÿ â ïàìÿòü.

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

7

Page 6: Теория алгоритмов. Котов В.М., Соболевская Е.П

êàæäîé ÐÀÌ-êîìàíäû, è îáúåì ïàìÿòè, èñïîëüçóåìûé êàæäûì ðåãè-ñòðîì. Äëÿ ýòîãî ñóùåñòâóåò ðÿä êðèòåðèåâ, ìû áóäåì â äàëüíåéøåìèñïîëüçîâàòü "ðàâíîìåðíûé âåñîâîé êðèòåðèé":

• êàæäàÿ êîìàíäà çàòðà÷èâàåò îäíó åäèíèöó âðåìåíè;

• êàæäûé ðåãèñòð èñïîëüçóåò îäíó åäèíèöó ïàìÿòè.Ó÷èòûâàÿ ñäåëàííîå ðàíåå ïðåäïîëîæåíèå î òîì, ÷òî äëÿ ïðåäñòàâ-ëåíèÿ ëþáîãî ÷èñëà íàì äîñòàòî÷íî îäíîãî ìàøèííîãî ñëîâà, ïîëó-÷àåì, ÷òî åìêîñòíàÿ ñëîæíîñòü àëãîðèòìà (ðàçìåðíîñòü ïàìÿòè) äëÿçàäàíèÿ n ýëåìåíòîâ, åñòü O(n).

Åñëè â êà÷åñòâå ìîäåëè âû÷èñëåíèé âçÿòü íåâåòâÿùóþñÿ ïðî-ãðàììó, òî âðåìåííàÿ ñëîæíîñòü ïîñëåäîâàòåëüíîñòè ïðîãðàìì ðàâ-íà ÷èñëó øàãîâ n-îé ïðîãðàììû, êàê ôóíêöèè îò n. Íàáîð øàãîâíåâåòâÿùåéñÿ ïðîãðàììû ìîæåò áûòü ïðåäñòàâëåí ñëåäóþùèì îáðà-çîì:

y + z → x

y − z → x

y · z → x

y/z → x

i → x

Òàêèì îáðàçîì, âðåìåííàÿ ñëîæíîñòü ÷èñëî àðèôìåòè÷åñêèõ îïå-ðàöèé, à åìêîñòíàÿ ñëîæíîñòü ÷èñëî ïåðåìåííûõ â ïðîãðàììå.

 íåêîòîðûõ çàäà÷àõ óäîáíî â êà÷åñòâå îñíîâíîé ìåðû ñëîæíî-ñòè áðàòü ÷èñëî âûïîëíÿåìûõ êîìàíä ðàçâåòâëåíèÿ.  ñëó÷àå ñîð-òèðîâêè ðàçóìíî ðàññìàòðèâàòü òàêóþ ìîäåëü, â êîòîðîé âñå øàãèäàþò ðàçâåòâëåíèÿ, âîçíèêàþùèå â ðåçóëüòàòå ñðàâíåíèÿ äâóõ âåëè-÷èí. Òàêóþ ïðîãðàììó ïðåäñòàâëÿþò â âèäå äâîè÷íîãî äåðåâà. Êàæ-äûé óçåë òàêîãî äåðåâà îäèí èç øàãîâ ðåøåíèÿ. Íóæíûé âûõîäíàõîäèòñÿ â îäíîì èç ëèñòüåâ.

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

Çàìåòèì, ÷òî îáùåå ÷èñëî óçëîâ â äåðåâå ìîæåò çíà÷èòåëüíî ïðå-âîñõîäèòü åãî âûñîòó. Íàïðèìåð, äåðåâî ðåøåíèé äëÿ ñîðòèðîâêè n

8

Page 7: Теория алгоритмов. Котов В.М., Соболевская Е.П

÷èñåë äîëæíî ñîäåðæàòü ïî êðàéíåé ìåðå n! ëèñòüåâ, õîòÿ åãî âûñîòàìîæåò áûòü n log n.

Ïðèìåð 1.5. Îïðåäåëèòü âðåìåííóþ ñëîæíîñòü àëãîðèòìà ñëîæåíèÿïåðâûõ n íàòóðàëüíûõ ÷èñåë.Ðåøåíèå. Òàê êàê íà âõîä ïîñòóïàåò íåêîòîðîå ÷èñëî n, òî ðàçìåð-íîñòü äàííîé çàäà÷è åñòü l = log2 n (n = 2l).

Åñëè äëÿ âû÷èñëåíèÿ ñóììû èñïîëüçóåòñÿ ñëåäóþùèé àëãîðèòì:S := 0;for i := 1 to n do

S := S + i;

òî êîëè÷åñòâî îïåðàöèé àëãîðèòìà ðàâíî Ω(n), è òàê êàê n = 2l, òîäàííûé àëãîðèòì ÿâëÿåòñÿ ýêñïîíåíöèàëüíûì.

Åñëè äëÿ íàõîæäåíèÿ ñóììû ïåðâûõ n ÷èñåë èñïîëüçîâàòü ôîð-ìóëó ñóììû àðèôìåòè÷åñêîé ïðîãðåññèè:

S :=n(n + 1)

2,

òî êîëè÷åñòâî îïåðàöèé ðàâíî êîíñòàíòå (O(1)).Ñëåäóåò îòìåòèòü, ÷òî åñëè ïðèâåäåííûì âûøå àëãîðèòìîì íà-

õîäèòü ñóììó ïðîèçâîëüíûõ ÷èñåë

a1, a2, . . . , an,òî ðàçìåðíîñòü çàäà÷è åñòü l = Ω(n) (ñì. Ïðèìåð 1.4) è àëãîðèòìÿâëÿåòñÿ ïîëèíîìèàëüíûì.Ïðèìåð 1.6. Îïðåäåëèòü, ÿâëÿåòñÿ ëè íåêîòîðîå ÷èñëî x ïðîñòûì.Ðåøåíèå. Ðàçìåðíîñòü äàííîé çàäà÷è åñòü l = log2 x (x = 2l). Ðåøàòüçàäà÷ó áóäåì ñëåäóþùèì àëãîðèòìîì:

for i := 2 to √x doif x mod i = 0 then

÷èñëî íå ïðîñòîå;exit;

Êîëè÷åñòâî îïåðàöèé àëãîðèòìà ðàâíî Ω(√

x). Âðåìåííàÿ ñëîæíîñòüàëãîðèòìà åñòü Ω(2l/2) = Ω (exp(l)) . Ïðèâåäåííûé àëãîðèòì îïðåäå-ëåíèÿ ïðîñòîòû ÷èñëà ÿâëÿåòñÿ ýêñïîíåíöèàëüíûì.Óïðàæíåíèå. Îïðåäåëèòü âðåìåííóþ ñëîæíîñòü àëãîðèòìà âû÷èñ-ëåíèÿ n! (T := 1; for i := 1 to n do T := T · i).

9

Page 8: Теория алгоритмов. Котов В.М., Соболевская Е.П

1.2. Ïîíÿòèå ðåêóððåíòíîãî óðàâíåíèÿÄëÿ íåêîòîðîé çàäà÷è ïîä ïîäçàäà÷åé ìû áóäåì ïîíèìàòü òó æå

çàäà÷ó, íî ñ ìåíüøèì ÷èñëîì ïàðàìåòðîâ èëè çàäà÷ó ñ òåì æå ÷èñëîìïàðàìåòðîâ, íî ïðè ýòîì õîòÿ áû îäèí èç ïàðàìåòðîâ èìååò ìåíüøååçíà÷åíèå. Îäíèì èç îñíîâíûõ ñïîñîáîâ ðåøåíèÿ çàäà÷ ÿâëÿåòñÿ èõñâåäåíèå ê ðåøåíèþ òàêîãî íàáîðà ïîäçàäà÷, ÷òîáû, èñõîäÿ èç ðå-øåíèé ïîäçàäà÷, áûëî âîçìîæíî ïîëó÷èòü ðåøåíèå èñõîäíîé çàäà÷è.Íàéäåííûé ñïîñîá ñâåäåíèÿ èñõîäíîé çàäà÷è ê ðåøåíèþ íåêîòîðûõïîäçàäà÷ ìîæåò áûòü çàïèñàí â âèäå ñîîòíîøåíèé, â êîòîðûõ çíà÷å-íèå ôóíêöèè, ñîîòâåòñòâóþùåé èñõîäíîé çàäà÷å, âûðàæàåòñÿ ÷åðåççíà÷åíèÿ ôóíêöèé, ñîîòâåòñòâóþùèõ ïîäçàäà÷àì.Îïðåäåëåíèå 1.5. Ñîîòíîøåíèÿ, êîòîðûå ñâÿçûâàþò îäíè è òåæå ôóíêöèè, íî ñ ðàçëè÷íûìè àðãóìåíòàìè, íàçûâàþòñÿ ðåêóð-ðåíòíûìè ñîîòíîøåíèÿìè, èëè ðåêóððåíòíûìè óðàâíåíèÿìè.Îïðåäåëåíèå 1.6. Ðåêóððåíòíîå óðàâíåíèå áóäåì íàçûâàòü ïðàâè-ëüíûì, åñëè çíà÷åíèÿ àðãóìåíòîâ ó ëþáîé èç ôóíêöèé â ïðàâîé ÷à-ñòè ñîîòíîøåíèÿ ìåíüøå çíà÷åíèÿ àðãóìåíòîâ ó ëþáîé èç ôóíêöèéâ ëåâîé ÷àñòè ñîîòíîøåíèÿ; åñëè àðãóìåíòîâ íåñêîëüêî, òî äîñòà-òî÷íî óìåíüøåíèå îäíîãî èç íèõ.Ïðèìåð 1.7.

T (n) = T (n− 1) + T (n− 2) ïðàâèëüíîå ðåêóð. óð.;

T (n) = T (n− 1) + T (n + 1) íåïðàâèëüíîå ðåêóð. óð.Îïðåäåëåíèå 1.7. Ïðàâèëüíîå ðåêóððåíòíîå óðàâíåíèå íàçûâàåò-ñÿ ïîëíûì, åñëè îíî îïðåäåëåíî äëÿ âñåõ äîïóñòèìûõ çíà÷åíèé àð-ãóìåíòîâ.Ïðèìåð 1.8. Ïðèâåäåì ïðèìåð ïîëíîãî ðåêóððåíòíîãî óðàâíåíèÿ.

T (i) = T (i− 1) + ai, i > 1;

T (1) = a1.

Ïðèìåð 1.9. Ïîèñê ìàêñèìàëüíîãî ýëåìåíòà â ìàññèâå.

T (n) = T (n− 1) + C;

T (1) = 0,

ãäå C = O(1).

10

Page 9: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðèìåð 1.10. Ïîèñê ìàêñèìàëüíîãî è ìèíèìàëüíîãî ýëåìåíòà èç nýëåìåíòîâ ìàññèâà.

T (n) = 1, ïðèn = 2;

T (n) = 2T(n

2

)+ 2, ïðè n > 2.

1.3. Ðåøåíèå ðåêóððåíòíûõ óðàâíåíèéÐàññìîòðèì îñíîâíûå ìåòîäû ðåøåíèÿ ðåêóððåíòíûõ óðàâíå-

íèé.

1. Ìåòîä ïîäñòàíîâîê.

2. Ìåòîä èòåðàöèé.

3. Ìåòîä ðåêóðñèâíûõ äåðåâüåâ.

Îöåíêà ðåøåíèÿ ðåêóððåíòíîãî óðàâíåíèÿ.Ìåòîä ïîäñòàíîâîê.

Ðàññìîòðèì ñëåäóþùåå ïðàâèëüíîå ðåêóððåíòíîå óðàâíåíèå

T (n) = f(T (a1n), . . . , T (aln), n), n > 1; (1.1)T (1) = C,

ãäå f íåêîòîðàÿ íåóáûâàþùàÿ ôóíêöèÿ ïî êàæäîé èç ïåðåìåí-íûõ. Èç ïðàâèëüíîñòè ðåêóððåíòíîãî óðàâíåíèÿ ñëåäóåò, ÷òî 0 <a1, a2, . . . , al < 1.

Îïðåäåëèì ìàæîðèðóþùóþ ôóíêöèþ (èëè ìàæîðàíòó) g(n) äëÿT (n) êàê

g(n) ≥ T (n), ∀n. (1.2)Ìåòîä ïîäñòàíîâîê ñîñòîèò â ïîäáîðå ìàæîðàíòû äëÿ T (n). Ïðè

ýòîì íàäî ñòðåìèòüñÿ ê òîìó, ÷òîáû ìàæîðàíòà èìåëà íàèìåíüøèéâîçìîæíûé ïîðÿäîê. Ñíà÷àëà ìåòîäîì ïîäáîðà îïðåäåëÿåòñÿ òîëüêîåå îáùèé âèä, íàïðèìåð g(n) = an2 +b, ãäå a, b íåêîòîðûå ïîêà åùåíå îïðåäåëåííûå ïàðàìåòðû, à çàòåì äåëàåòñÿ ïîïûòêà îïðåäåëèòüçíà÷åíèå ïàðàìåòðîâ (â íàøåì ïðèìåðå ýòî a è b,) êîòîðûå íå äîëæíûçàâèñåòü îò n.

11

Page 10: Теория алгоритмов. Котов В.М., Соболевская Е.П

Òåîðåìà 1.1. Ôóíêöèÿ g(n) ÿâëÿåòñÿ ìàæîðàíòîé äëÿ T (n), åñëèñóùåñòâóþò åå íå çàâèñÿùèå îò n ïàðàìåòðû, ÷òî

g(n) ≥ f(g(a1n), g(a2n), . . . g(aln), n)). (1.3)

Äîêàçàòåëüñòâî. Äëÿ äîêàçàòåëüñòâà òîãî, ÷òî ôóíêöèÿ g(n) ÿâëÿ-åòñÿ ìàæîðàíòîé äëÿ ôóíêöèè T (n) âîñïîëüçóåìñÿ ìåòîäîì ìàòåìà-òè÷åñêîé èíäóêöèè. Ñíà÷àëà ïðîâåðÿåì èñòèííîñòü íåðàâåíñòâà (1.2)äëÿ n = 1. Åñëè îíî íå âûïîëíÿåòñÿ, òî ìàæîðèðóþùàÿ ôóíêöèÿ âû-áðàíà ñëèøêîì ìàëåíüêîé è íåîáõîäèìî åå èçìåíèòü (ò. å. óâåëè÷èòü)ïóòåì äîáàâëåíèÿ íåêîòîðîé êîíñòàíòû, íå çàâèñÿùåé îò n, ëèáî ïó-òåì óâåëè÷åíèÿ ïîðÿäêà ôóíêöèè. Ïîñëå ÷åãî ïîâòîðèòü ïîïûòêóäîêàçàòåëüñòâà òåîðåìû ñ ìîäèôèöèðîâàííîé ôóíêöèåé g(n).

Åñëè íåðàâåíñòâî (1.2) äëÿ n = 1 âûïîëíÿåòñÿ, òî ïðåäïîëàãàåì,÷òî îíî âåðíî äëÿ âñåõ k < n :

g(k) ≥ T (k) (1.4)è ïûòàåìñÿ îïðåäåëèòü ñóùåñòâóþò ëè òàêèå íåîïðåäåëåííûå ïàðà-ìåòðû ôóíêöèè g(n) (äëÿ ðàíåå ïðèâåäåííîãî ïðèìåðà ýòî a è b), ÷òîíåðàâåíñòâî (1.4) âåðíî äëÿ k = n.

Ðàññìîòðèì íåêîòîðóþ íåóáûâàþùóþ ôóíêöèþ h(x). Î÷åâèäíî,÷òî äëÿ ýòîé ôóíêöèè èç ïðåäïîëîæåíèÿ (1.4) ñëåäóåò

h (g(k)) ≥ h (T (k)) .

Àíàëîãè÷íî, èç (1.4), ïðèíèìàÿ âî âíèìàíèå (1.1), ñëåäóåò, ÷òî

f(g(a1n), . . . , g(aln), n)) ≥ f(T (a1n), . . . , T (aln), n) = T (n). (1.5)

Ïîýòîìó, åñëè ìû íàéäåì òàêóþ ôóíêöèþ g(n) , ÷òî âûïîëíÿåòñÿíåðàâåíñòâî (1.3), òî èç íåðàâåíñòâà (1.5) áóäåò ñëåäîâàòü, ÷òî

g(n) ≥ T (n),

ò. å. íåðàâåíñòâî (1.4) áóäåò âåðíî äëÿ k = n.  ýòîì ñëó÷àå, â ñèëóìàòåìàòè÷åñêîé èíäóêöèè, ôóíêöèÿ g(n) ÿâëÿåòñÿ ìàæîðàíòîé äëÿôóíêöèè T (n).  ïðîòèâíîì ñëó÷àå ôóíêöèÿ g(n) âûáðàíà íåïðà-âèëüíî è íåîáõîäèìî âûáðàòü äðóãóþ ôóíêöèþ g(n), âîçìîæíî áîëü-øåãî ïîðÿäêà, è ïîâòîðèòü äëÿ íåå îïèñàííûé âûøå ïðîöåññ ïðîâåð-êè. 2

12

Page 11: Теория алгоритмов. Котов В.М., Соболевская Е.П

Òàêèì îáðàçîì, ìåòîä ïîäñòàíîâîê çàêëþ÷àåòñÿ â òîì, ÷òî ìåòî-äîì ïîäáîðà íàõîäèòñÿ òàêàÿ ôóíêöèÿ g(n)( êàê ïðàâèëî, íà íà÷àëü-íîì ýòàïå â êà÷åñòâå ìàæîðèðóþùåé ôóíêöèè áåðóò íåêîòîðûé ïî-ëèíîì, íàäåÿñü íà òî, ÷òî àëãîðèòì ÿâëÿåòñÿ ïîëèíîìèàëüíûì), ïðèïîäñòàíîâêå êîòîðîé â èñõîäíîå ðåêóððåíòíîå óðàâíåíèå (1.1) âìåñòîT (n) ïîëó÷àåòñÿ âåðíîå íåðàâåíñòâî (1.3). Íàéäåííàÿ ôóíêöèÿ áóäåòÿâëÿåòñÿ ìàæîðàíòîé äëÿ ðåøåíèÿ èñõîäíîãî ðåêóððåíòíîãî óðàâíå-íèÿ. Çàìåòèì, ÷òî ìàæîðèðóþùàÿ ôóíêöèÿ äîëæíà áûòü íàèìåíü-øåãî âîçìîæíîãî ïîðÿäêà.Ïðèìåð 1.11. Ïîñòðîèòü ìàæîðàíòó äëÿ ðåøåíèÿ ñëåäóþùåãî ðåêóð-ðåíòíîãî óðàâíåíèÿ:

T (n) = 2T(n

2

)+ C2n, C2 > 0, n > 1;

T (1) = C1, C1 > 0.

Ðåøåíèå. Ïðåäïîëîæèì, ÷òî g(n) = an log2 n. Ïðîâåðèì âåðíîñòüíåðàâåíñòâà (1.2) äëÿ n = 1:

T (1) ≤ g(1) = a · 1 · log2 1 + b = 0.

Òàê êàê T (1) = C1, òî ïîëó÷àåì, ÷òî C1 ≤ 0, à ýòî ïðîòèâîðå÷èò íà-÷àëüíûì óñëîâèÿì: C1, C2 > 0. Ñëåäîâàòåëüíî ìàæîðèðóþùàÿ ôóíê-öèÿ âûáðàíà íåâåðíî, ïîïûòàåìñÿ óâåëè÷èòü åå.

Ïðåäïîëîæèì, ÷òî g(n) = an log2 n+ b. Ïðîâåðèì âåðíîñòü íåðà-âåíñòâà (1.2) äëÿ n = 1:

T (1) ≤ g(1) = a · 1 · log2 1 + b = 0.

Òàê êàê T (1) = C1, òî ïîëó÷àåì, ÷òî C1 ≤ b, ïîýòîìó, âûáðàâ çíà÷å-íèå b ≥ C1, äëÿ n = 1 ìû ïîëó÷èì âåðíîå íåðàâåíñòâî (1.2).

Ïðåäïîëîæèì, ÷òî íåðàâåíñòâî (1.2) âåðíî äëÿ k < n, ò. å.

T (k) ≤ g(k) = ak log2 k + b

è ïîêàæåì, ÷òî îíî âåðíî äëÿ k = n.Åñëè êîýôôèöèåíòû a è b ôóíêöèè g(n) ñóùåñòâóþò, òî ìû ñìî-

æåì èõ íàéòè èç ñëåäóþùåãî íåðàâåíñòâà:

g(n) ≥ 2g(n

2

)+ b

13

Page 12: Теория алгоритмов. Котов В.М., Соболевская Е.П

èëèan log2 n + b ≥ 2

(an

2log2

n

2+ b

)+ C2n.

Îòêóäà ïîëó÷àåì, ÷òî íåðàâåíñòâî

(a− C2)n ≥ b

âåðíî, åñëè a ≥ b + C2.Ñëåäîâàòåëüíî, ïî ìåòîäó ìàòåìàòè÷åñêîé èíäóêöèè

T (n) ≤ an log2 n + b,

åñëè b ≥ C1 è a ≥ b + C2.Òàêèì îáðàçîì, ïîëàãàÿ b = C1 è a = C1 + C2, íåðàâåíñòâî

T (n) ≤ (C1 + C2)n log2 n + C1

âåðíî äëÿ ëþáûõ çíà÷åíèé n ≥ 1, à ôóíêöèÿ

g(n) = (C1 + C2)n log2 n + C1

ÿâëÿåòñÿ ìàæîðàíòîé ðàññìîòðåííîãî ðåêóððåíòíîãî óðàâíåíèÿ.Ñëåäîâàòåëüíî

T (n) = O(n log n).

Çàìåòèì, ÷òî åñëè ìû ïðåäïîëîæèëè, ÷òî T (n) = O(g(n)), à ïîèíäóêöèè äîêàçàòü íåðàâåíñòâî T (n) ≤ Cg(n) íàì íå óäàëîñü, òî ýòîåùå íå çíà÷èò, ÷òî T (n) 6= O(g(n)), ò. ê. âîçìîæíî óäàñòñÿ ïîêàçàòü,÷òî T (n) ≤ Cg(n) + 1 (ñì. Ïðèìåð 1.11).Ïðèìåð 1.12. Ïîñòðîèòü ìàæîðàíòó äëÿ ðåøåíèÿ ñëåäóþùåãî ðåêóð-ðåíòíîãî óðàâíåíèÿ:

T (n) = 2T(n

2

)+ C2, C2 > 0, n > 1;

T (1) = C1, C1 > 0.

Ðåøåíèå. Ïóñòü g(n) = an, òîãäà ïðè n = 1 íåðàâåíñòâî T (1) ≤ g(1)âåðíî ïðè C1 ≤ a.

Ïðåäïîëîæèì, ÷òî íåðàâåíñòâî (1.2) âûïîëíÿåòñÿ äëÿ k < n èïðîâåðèì, ñóùåñòâóåò ëè òàêîé ïàðàìåòð a, ÷òî íåðàâåíñòâî (1.2) áó-äåò âûïîëíÿòüñÿ è äëÿ k = n.

g(n) ≥ 2g(n

2

)+ C2

14

Page 13: Теория алгоритмов. Котов В.М., Соболевская Е.П

an ≥ 2(an

2

)+ C2.

Òàêèì îáðàçîì ïîëó÷àåì, ÷òî C2 ≤ 0, à ýòî ëîæíî, ò. ê. C1, C2 > 0 ïîóñëîâèþ çàäà÷è.

Ïîïûòàåìñÿ óâåëè÷èòü ôóíêöèþ g(n). Ïóñòü g(n) = an+b, òîãäàïðè n = 1 äîëæíî âûïîëíÿòüñÿ íåðàâåíñòâî T (1) ≤ g(1) èëè C1 ≤a + b.

Ïðåäïîëîæèì, ÷òî íåðàâåíñòâî (1.2) âûïîëíÿåòñÿ äëÿ k < n èïðîâåðèì, ñóùåñòâóþò ëè òàêèå ïàðàìåòðû a è b, ÷òî íåðàâåíñòâî(1.2) áóäåò âûïîëíÿòüñÿ è äëÿ k = n.

g(n) ≥ 2g(n

2

)+ C2

an + b ≥ 2(an

2+ b

)+ C2

b + C2 ≤ 0.

Òàêèì îáðàçîì, ïîëàãàÿ b = −C2, íåðàâåíñòâî (1.2) áóäåò âåðíî è äëÿk = n (äëÿ âûïîëíåíèÿ íåðàâåíñòâà ïðè n = 1, äîñòàòî÷íî ïîëîæèòüa = C1 − b.) Òîãäà ïî ìåòîäó ìàòåìàòè÷åñêîé èíäóêöèè, ôóíêöèÿ

g(n) = (C1 + C2)n− C2

ÿâëÿåòñÿ ìàæîðàíòîé äëÿ ðåøåíèÿ ðàññìàòðèâàåìîãî ðåêóððåíòíîãîóðàâíåíèÿ. Òðóäîåìêîñòü àëãîðèòìà T (n) = O(n).

Ìåòîä èòåðàöèé

Äàííûé ìåòîä çàêëþ÷àåòñÿ â òîì, ÷òî äàííîå ðåêóððåíòíîå óðàâ-íåíèå ðàñïèñûâàåòñÿ ÷åðåç ìíîæåñòâî äðóãèõ è çàòåì ïðîèñõîäèòñóììèðîâàíèå ïîëó÷åííîãî âûðàæåíèÿ.Ïðèìåð 1.13. Ðåøèòü ðåêóððåíòíîå óðàâíåíèå ìåòîäîì èòåðàöèé:

T (n) = 2T(n

2

)+ 5n2, n > 1;

T (1) = 7.

15

Page 14: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ðåøåíèå. Äëÿ ïðîñòîòû ìû ïðåäïîëîæèì, ÷òî n ÿâëÿåòñÿ ñòåïåíüþ2, ò. å. n = 2k.

T (n) = 2T(

n2

)+ 5n2 = 2(2T

(n4

)+ 5

(n2

)2) + 5n2 = 2(2(2T(

n8

)+

5(

n4

)2)+5(

n2

)2)+5n2 = 2kT (1)+2k−1 ·5 (n

2k−1

)2 + . . .+2 ·5 (n2

)2 +5n2.

Ïîñëåäíåå âûðàæåíèå ìîæåò áûòü ïðåäñòàâëåíî ñëåäóþùåé ñóì-ìîé:

7n + 5k−1∑

i=0

n2

2i= 7n + 5n2

k−1∑

i=0

12i

.

Ó÷èòûâàÿ, ÷òîn∑

i=1

12i

= 1− 12n

,

ïîëó÷èìT (n) = 7n+5n2

(2− 1

2k−1

)= 7n+5n2

(2− 2

n

)= 7n+10n2−10n =

10n2 − 3n.Îòìåòèì, ÷òî ìû ïîëó÷èëè òî÷íîå ðåøåíèå ðåêóððåíòíîãî óðàâ-

íåíèÿ.Ïðèìåð 1.14. Ðåøèòü ðåêóððåíòíîå óðàâíåíèå ìåòîäîì èòåðàöèé:

T (n) = aT (n− 1) + bn, 0 < a < 1, b > 0, n > 1;

T (1) = 0.

Ðåøåíèå. Ðàñïèøåì äàííîå ðåêóððåíòíîå óðàâíåíèå ÷åðåç ìíîæåñòâîäðóãèõ:

T (n) = aT (n − 1) + bn = a (aT (n− 2) + b(n− 1)) + bn = bn +ab(n − 1) + a2T (n − 2) = bn + ab(n − 1) + a2b(n − 2) + a3T (n − 3) =b∑n−2

i=0 ai(n− i) ≤ bn∑n−2

i=0 ai.Òàê êàê 0 < a < 1, òî óáûâàþùàÿ ãåîìåòðè÷åñêàÿ ïðîãðåññèÿ

ìîæåò áûòü îãðàíè÷åíà êîíñòàíòîé, íå çàâèñÿùåé îò n, ò. å.n−2∑

i=0

ai <1

1− a.

Ñëåäîâàòåëüíî, òðóäîåìêîñòü àëãîðèòìà åñòü O(n) è àëãîðèòìèìååò ëèíåéíóþ ñëîæíîñòü.

16

Page 15: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ìåòîä ðåêóðñèâíûõ äåðåâüåâ

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

1. Íà ïåðâîé èòåðàöèè ôîðìèðóåòñÿ äåðåâî ñëåäóþùåãî âèäà:

• â êîðåíü äåðåâà çàíîñèòñÿ ñâîáîäíûé ÷ëåí èñõîäíîãî ðå-êóððåíòíîãî óðàâíåíèÿ;

• ñûíîâüÿìè ýòîãî êîðíÿ ÿâëÿþòñÿ ðåêóððåíòíûå ôóíêöèèïðàâîé ÷àñòè èñõîäíîãî ñîîòíîøåíèÿ.

2. Íà ïîñëåäóþùèõ èòåðàöèÿõ äëÿ êàæäîãî èç ñûíîâåé ñòðîèòñÿàíàëîãè÷íàÿ äðåâîâèäíàÿ ñòðóêòóðà.

Ïðîöåññ ïîñòðîåíèÿ äðåâîâèäíîé ñòðóêòóðû çàêàí÷èâàåòñÿ, êî-ãäà âèñÿ÷èå âåðøèíû ñîîòâåòñòâóþò íà÷àëüíûì äàííûì óðàâíåíèÿ,ïðè ýòîì çíà÷åíèÿ âíóòðåííèõ âåðøèí äåðåâà åñòü íåêîòîðûå ÿâíûåôóíêöèè îò ðàçìåðà çàäà÷è. Çàìåòèì, ÷òî âèñÿ÷èå âåðøèíû ïîñòðî-åííîé äðåâîâèäíîé ñòðóêòóðû íå îáÿçàòåëüíî îäèíàêîâî óäàëåíû îòêîðíÿ.

Ïîñëå ïîñòðîåíèÿ äåðåâà ñóììèðîâàíèå çíà÷åíèé â âåðøèíàõïðîèçâîäèòñÿ ñëåäóþùèì îáðàçîì

1. Îïðåäåëÿþòñÿ ñóììû çíà÷åíèé äëÿ ðàâíîóäàëåííûõ îò êîðíÿâåðøèí (ýòè âåðøèíû íàõîäÿòñÿ íà îäíîì óðîâíå).

2. Íàõîäèòñÿ ìàêñèìàëüíàÿ ñóììà ïî óðîâíÿì.

3. Îáùàÿ òðóäîåìêîñòü àëãîðèòìà îãðàíè÷åíà ñâåðõó îäíèì èçñëåäóþùèõ çíà÷åíèé:

• ìàêñèìàëüíîé ñóììîé, êîòîðàÿ óìíîæàåòñÿ íà êîëè÷åñòâîóðîâíåé;

• ñóììîé, ïîëó÷åííîé â ðåçóëüòàòå ñóììèðîâàíèÿ ñóìì çíà-÷åíèé ïî óðîâíÿì.

Çàìåòèì, ÷òî êîëè÷åñòâî óðîâíåé äëÿ äåðåâà åñòü O(log n).

17

Page 16: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

n

n3

2n3

n9

2n9

2n9

4n9

T ( n27 ) T ( 2n

27 ) T ( 2n27 ) T ( 4n

27 ) T ( 2n27 ) T ( 4n

27 ) T ( 4n27 ) T ( 8n

27 )

ÃÃÃÃÃÃPPPPPP

¡¡¡

AA

¡¡

SSS

¶¶¶

EEE

¤¤¤

eee

¢¢¢

EEE

¢¢¢

CCC

Ðèñ. 1.1. Ìåòîä ðåêóðñèâíûõ äåðåâüåâ

Ïðèìåð 1.15. Ïðåäïîëîæèì, ÷òî íåîáõîäèìî ðåøèòü ñëåäóþùåå ðå-êóððåíòíîå óðàâíåíèå:

T (n) = T(n

3

)+ T

(2n

3

)+ n.

Ðåøåíèå.Íà ðèñ.1.1 èçîáðàæåíà äðåâîâèäíàÿ ñòðóêòóðà äëÿ ðàññìàò-ðèâàåìîãî ïðèìåðà. Îöåíèì òðóäîåìêîñòü àëãîðèòìà. Òàê êàê ñóììàçíà÷åíèé íà êàæäîì óðîâíå íå ïðåâîñõîäèò n è êîëè÷åñòâî óðîâíåéåñòü log 3

2n = C log2 n, òî

T (n) = T(n

3

)+ T

(2n

3

)+ n ≤ Cn log2 n

è òðóäîåìêîñòü àëãîðèòìà O(n log n).Ïðèìåð 1.16. Ïðåäïîëîæèì, ÷òî íàì íåîáõîäèìî ðåøèòü ñëåäóþùååðåêóððåíòíîå óðàâíåíèå:

T (n) = T(n

5

)+ T

(3n

4

)+ n.

Ðåøåíèå.Íà ðèñ.1.2 èçîáðàæåíà äðåâîâèäíàÿ ñòðóêòóðà äëÿ ðàññìàò-ðèâàåìîãî ïðèìåðà.

18

Page 17: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

n

n5

3n4

n25

3n20

3n20

9n16

T ( n125 ) T ( 3n

100 ) T ( 3n100 ) T ( 9n

80 ) T ( 3n100 ) T ( 9n

80 ) T ( 9n80 ) T ( 27n

64 )

ÃÃÃÃÃÃPPPPPP

¡¡¡

AA

¡¡

SSS

¶¶¶

EEE

¤¤¤

eee

¢¢¢

EEE

¢¢¢

CCC

n

1920 n

1920

2 n

Ðèñ. 1.2. Ìåòîä ðåêóðñèâíûõ äåðåâüåâ

Îöåíèì òðóäîåìêîñòü àëãîðèòìà. Ñóììà çíà÷åíèé íà íóëåâîìóðîâíå åñòü n, íà ïåðâîì óðîâíå íå ïðåâîñõîäèò 19

20n, íà âòîðîì íåïðåâîñõîäèò

(1920

)2n è ò. ä. Êîëè÷åñòâî óðîâíåé åñòü log 4

3n. Ñóììè-

ðîâàíèå ñóìì çíà÷åíèé ïî óðîâíÿì ïðèâîäèò íàñ ê ãåîìåòðè÷åñêîéïðîãðåññèè ñî çíàìåíàòåëåì q = 19

20 < 1, è òàê êàê ñóììà áåñêîíå÷íîñõîäÿùåéñÿ ãåîìåòðè÷åñêîé ïðîãðåññèè ðàâíà êîíñòàíòå, òî

T (n) = T(n

5

)+ T

(3n

4

)+ n < n(1 + q + q2 + . . . + q

log 43

n) ≤ C1n.

Òðóäîåìêîñòü àëãîðèòìà O(n).Äîêàæåì îñíîâíóþ òåîðåìó î ðåøåíèè ðåêóððåíòíîãî óðàâíå-

íèÿ.Òåîðåìà 1.2. Ïóñòü a, b, c, k íåêîòîðûå êîíñòàíòû. Òîãäà ðåøå-íèå ðåêóððåíòíîãî óðàâíåíèÿ

T (n) = aT (n/b) + cnk; T (1) = c

èìååò âèä:T (n) = O(nlogb a), åñëè a > bk;T (n) = O(nk log n), åñëè a = bk;T (n) = O(nk), åñëè a < bk.

19

Page 18: Теория алгоритмов. Котов В.М., Соболевская Е.П

Äîêàçàòåëüñòâî. Áóäåì ïðåäïîëàãàòü, ÷òîn = bm(m = logb n).

T (n) = a(aT (n/b2) + c(n/b)k

)+ cnk

= amT (1) + am−1c(n/bm−1)k + . . . + ac(n/b)k + cnk

= c∑m

i=0 am−ibik

= cam∑m

i=0(bk/a)i.

(1.6)

Îòìåòèì, ÷òîam = alogb n = nlogb a.

Ñóììà, ôèãóðèðóþùàÿ â (1.6) ÿâëÿåòñÿ ãåîìåòðè÷åñêîé ïðîãðåññèåé,çíà÷åíèå êîòîðîé çàâèñèò îò ðàöèîíàëüíîãî ÷èñëà r = bk/a.

Ðàññìîòðèì òðè âîçìîæíûõ ñëó÷àÿ:1. Ïóñòü r < 1. Ó÷èòûâàÿ, ÷òî ñóììà áåñêîíå÷íî ñõîäÿùåéñÿ ãåî-

ìåòðè÷åñêîé ïðîãðåññèè ðàâíà êîíñòàíòå, òî åñòü∞∑

i=0

ai =1

1− aäëÿ 0 < a < 1,

ïîëó÷èì, ÷òîm∑

i=0

ri <1

1− rÿâëÿåòñÿ êîíñòàíòîé.

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

T (n) = O(am) = O(nlogb a).

2. Ïóñòü r = 1. Òàê êàê r = bk/a, òî a = bk è

am = bmk = nk, (bm = n).

Ê òîìó æåm∑

i=0

ri = m + 1 = (m = logb n) = logb n + 1.

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

camm∑

i=0

ri = cnk(logb n + 1) =c

log bnk log n + cnk.

20

Page 19: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïîëó÷àåì, ÷òîT (n) = O(nk log n).

3. Ïóñòü r > 1. Ó÷èòûâàÿ íåðàâåíñòâî äëÿ ñóììû ãåîìåòðè÷åñêîéïðîãðåññèè

n∑

i=0

ai =an+1 − 1

a− 1äëÿ a > 1,

ïîëó÷èì, ÷òîm∑

i=0

ri =rm+1 − 1

r − 1= O(rm).

Òàêèì îáðàçîì,

T (n) = O(amrm) = O(am(bk/a)m) = O(bkm) = O(nk).

Äîêàçàòåëüñòâî òåîðåìû ïîëíîñòüþ çàâåðøåíî. 2

Íåñëîæíî ïîêàçàòü, ÷òî â òåîðåìå àññèìïòîòèêà O ìîæåò áûòüçàìåíåíà àññèìïòîòèêîé Θ.

1.4. Ïðèìåðû ðåêóððåíòíûõ óðàâíåíèéÏðèâåäåì íåñêîëüêî ïðèìåðîâ ïîñòðîåíèÿ è ðåøåíèÿ ðåêóððåíò-

íûõ óðàâíåíèé.Ïðèìåð 1.17. Âû÷èñëèòü çíà÷åíèå âûðàæåíèÿ y = 2n.

Ðåøåíèå. Ïðèâåäåì òðè ïðîñòûõ àëãîðèòìà ðåøåíèÿ ïîñòàâëåííîéçàäà÷è è îöåíèì èõ òðóäîåìêîñòü, ïîñòðîèâ äëÿ êàæäîãî èç íèõ ðå-êóððåíòíîå óðàâíåíèå.

Àëãîðèòì 1

F := 1;for i := 1 to n doF := F + F ;

Ðåêóððåíòíîå óðàâíåíèå äëÿ àëãîðèòìà 1:

T (n) = T (n− 1) + 1, n > 1;

T (1) = 2.

21

Page 20: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ðåøàÿ ýòî óðàâíåíèå ìåòîäîì èòåðàöèé, ïîëó÷àåì

T (n) = T (n− 1) + 1 = T (n− 2) + 2 = . . . = T (1) + (n− 1) = n + 1,

ò. å. T (n) = Θ(n).Òàê êàê n = 2l, òî òðóäîåìêîñòü àëãîðèòìà 1 åñòü Ω(2l), ò. å.

àëãîðèòì 1 ÿâëÿåòñÿ ýêñïîíåíöèàëüíûì.

Àëãîðèòì 2

function F(k:byte):word;beginif k = 1 then

F := 2;elseif k-÷åòíî then

F := F (k/2) · F (k/2)else

F := F ((k − 1)/2) · F ((k − 1)/2) · 2;end;

Ðåêóððåíòíîå óðàâíåíèå äëÿ àëãîðèòìà 2:

T (n) = T (n/2) + T (n/2) + 2, n > 1;

T (1) = 2.

Ñëàãàåìîå, ðàâíîå 2 â ðåêóððåíòíîì óðàâíåíèè, îáîçíà÷àåò äâåêîìàíäû óìíîæåíèÿ â âûðàæåíèè

F := F ((k − 1)/2) · F ((k − 1)/2) · 2.

Ïî òåîðåìå î ðåøåíèè ðåêóððåíòíûõ óðàâíåíèé

T (n) = Θ(nlogb a) = Θ(n).

Òàê êàê n = 2l, òî òðóäîåìêîñòü àëãîðèòìà 2 åñòü Ω(2l), ò. å.àëãîðèòì 2 òàêæå ÿâëÿåòñÿ ýêñïîíåíöèàëüíûì.

Ðàññìîòðèì òåïåðü ïîñëåäíèé àëãîðèòì, â êîòîðîì êîìàíäà óì-íîæåíèÿ íåêîòîðîãî ÷èñëà ñàìîãî íà ñåáÿ çàìåíåíà ôóíêöèåé âîçâå-äåíèÿ â êâàäðàò (SQR).

22

Page 21: Теория алгоритмов. Котов В.М., Соболевская Е.П

Àëãîðèòì 3

function F(k:byte):word;beginif k = 1 then F := 2;elseif k-÷åòíî then F := SQR (F (k/2))else F := SQR (F ((k − 1)/2)) · 2;

end;

Ðåêóððåíòíîå óðàâíåíèå äëÿ àëãîðèìà 3:

T (n) = T (n/2) + 2, n > 1; T (1) = 2.

Ïî òåîðåìå î ðåøåíèè ðåêóððåíòíûõ óðàâíåíèé

T (n) = Θ(log n).

Òàê êàê n = 2l, òî òðóäîåìêîñòü îïèñàííîãî âûøå àëãîðèòìà åñòüO(l), ò. å. àëãîðèòì 3 ÿâëÿåòñÿ ïîëèíîìèàëüíûì.Ïðèìåð 1.18. Îöåíèòü òðóäîåìêîñòü àëãîðèòìà íàõîæäåíèÿ íàèáîëü-øåãî îáùåãî äåëèòåëÿ äëÿ äâóõ ÷èñåë NOD(a, b) = NOD(b, a mod b).Ðåøåíèå. Áóäåì ïðåäïîëàãàòü, ÷òî a > b. Äëÿ ðåøåíèÿ çàäà÷è ñíà÷à-ëà äîêàæåì, ÷òî ïîñëå âûïîëíåíèÿ íå áîëåå, ÷åì äâóõ øàãîâ àëãîðèò-ìà (ïîä øàãàìè àëãîðèòìà ìû ïîíèìàåì ñëåäóþùèå äâå îïåðàöèè:a mod b è b mod c) ãëàâíûé ÷ëåí (= max(a, b)) óìåíüøèòñÿ íå ìåíåå,÷åì â 2 ðàçà.

NOD(a, b) = NOD(b, c) = NOD(c, b mod c),

ãäå c = a mod b. Ïóñòü b > a/2, òîãäà c = a mod b = a− b < a− a/2 <a/2. Òàêèì îáðàçîì, ìû ïîëó÷èëè, ÷òî çà äâà øàãà àëãîðèòìà c < a/2.Åñëè b < a/2, òî óæå çà îäèí øàã àëãîðèòìà (a mod b) ãëàâíûé ÷ëåíóìåíüøèëñÿ íå ìåíåå, ÷åì â 2 ðàçà.

Òåïåðü ïîñòðîèì ðåêóððåíòíîå óðàâíåíèå. Ïóñòü n = max(a, b),òîãäà T (n) = 2+T (n/2) è T (n) = Θ(log n). Ó÷èòûâàÿ, ÷òî l ≥ log n, ïî-ëó÷àåì, ÷òî òðóäîåìêîñòü ïðèâåäåííîãî àëãîðèòìà íàõîæäåíèÿ íàè-áîëüøåãî îáùåãî äåëèòåëÿ åñòü O(l), ò. å. àëãîðèòì ÿâëÿåòñÿ ïîëèíî-ìèàëüíûì.

23

Page 22: Теория алгоритмов. Котов В.М., Соболевская Е.П

à ë à â à 2

ÑîðòèðîâêàÏðîöåññ ñîðòèðîâêè äàííûõ ìîæåò áûòü îñóùåñòâëåí ðàçëè÷-

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

Åñëè îáúåì âõîäíûõ äàííûõ ïîçâîëÿåò îáõîäèòüñÿ èñêëþ÷èòåëü-íî îñíîâíîé (îïåðàòèâíîé) ïàìÿòüþ, òî ãîâîðÿò îá àëãîðèòìàõ âíóò-ðåííåé ñîðòèðîâêè .  äàííîé ãëàâå áóäóò ðàññìîòðåíû îñíîâíûåàëãîðèòìû âíóòðåííåé ñîðòèðîâêè.

Îäíàêî íà ïðàêòèêå ÷àñòî íåîáõîäèìî ðåøàòü çàäà÷è, îáúåì îá-ðàáàòûâàåìûõ äàííûõ äëÿ êîòîðûõ íàìíîãî ïðåâûøàåò âîçìîæíî-ñòè îñíîâíîé ïàìÿòè.  áîëüøèíñòâå êîìïüþòåðíûõ ñèñòåì ïðåäó-ñìîòðåíû óñòðîéñòâà âíåøíåé ïàìÿòè (òàêèå êàê æåñòêèå äèñêè, èëèçàïîìèíàþùèå óñòðîéñòâà áîëüøîé åìêîñòè), íà êîòîðûõ ìîæíî õðà-íèòü îãðîìíûå îáúåìû äàííûõ. Îäíàêî õàðàêòåðèñòèêè äîñòóïà êòàêèì óñòðîéñòâàì âíåøíåé ïàìÿòè ñóùåñòâåííî îòëè÷àþòñÿ îò õà-ðàêòåðèñòèê äîñòóïà ê îñíîâíîé ïàìÿòè. Ïîýòîìó â äàííîé ãëàâå áó-äóò ðàññìîòðåíû òàêæå íåêîòîðûå àëãîðèòìû âíåøíåé ñîðòèðîâêè.

2.1. Âíóòðåííÿÿ ñîðòèðîâêà äàííîì ðàçäåëå, íà ïðèìåðå àëãîðèòìîâ âíóòðåííåé ñîðòèðîâ-

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

 äàëüíåéøåì, ãîâîðÿ îá "àëãîðèòìå ñîðòèðîâêè"áóäåì ïîäðà-

24

Page 23: Теория алгоритмов. Котов В.М., Соболевская Е.П

çóìåâàòü "àëãîðèòì âíóòðåííåé ñîðòèðîâêè".Îïðåäåëåíèå 2.1. Ïóñòü äàíà ïîñëåäîâàòåëüíîñòü èç n ýëåìåí-òîâ

a1, a2, . . . , an,

êîòîðûå íàçîâåì çàïèñÿìè, âûáðàííûõ èç ìíîæåñòâà, íà êîòîðîìçàäàí ëèíåéíûé ïîðÿäîê. Êàæäàÿ çàïèñü aj èìååò êëþ÷ kj , êîòîðûéè óïðàâëÿåò ïðîöåññîì ñîðòèðîâêè (ïîìèìî êëþ÷à, çàïèñü ìîæåòèìåòü íåêîòîðóþ äîïîëíèòåëüíóþ èíôîðìàöèþ, êîòîðàÿ íå âëèÿ-åò íà ïðîöåññ ñîðòèðîâêè, íî âñåãäà ïðèñóòñòâóåò â ýòîé çàïè-ñè). Çàäà÷à ñîðòèðîâêè çàêëþ÷àåòñÿ â ïîèñêå òàêîé ïåðåñòàíîâêèp = (p(1), p(2), . . . , p(n)) ýòèõ n çàïèñåé, ïîñëå êîòîðîé êëþ÷è ðàñ-ïîëîæèëèñü áû â íåóáûâàþùåì ïîðÿäêå:

kp(1) ≤ kp(2) ≤ . . . ≤ kp(n).

Îïðåäåëåíèå 2.2. Àëãîðèòì ñîðòèðîâêè áóäåì íàçûâàòü óñòîé-÷èâûì, åñëè â ïðîöåññå ñîðòèðîâêè îòíîñèòåëüíîå ðàñïîëîæåíèåýëåìåíòîâ ñ îäèíàêîâûìè êëþ÷àìè íå èçìåíÿåòñÿ (ïðåäïîëàãàåòñÿ,÷òî ýëåìåíòû óæå áûëè îòñîðòèðîâàíû ïî íåêîòîðîìó âòîðè÷íî-ìó êëþ÷ó):

p(i) < p(j), åñëè kp(i) ≤ kp(j) è i < j.

Õîðîøèé àëãîðèòì âíóòðåííå ñîðòèðîâêè çàòðà÷èâàåò íà ñîðòè-ðîâêó n çàïèñåé âðåìÿ ïîðÿäêà n log n. Ê òàêèì àëãîðèòì îòíîñÿòñÿàëãîðèòìû ãðóïïîâîé ñîðòèðîâêè, êîòîðûå ðàáîòàþò ñ óïîðÿäî÷åí-íûìè ãðóïïàìè ýëåìåíòîâ:

• ñîðòèðîâêà ñëèÿíèåì ;

• ñîðòèðîâêà ñ ïîìîùüþ ðàçäåëåíèÿ.

Îäíàêî ñóùåñòâóþò áîëåå ïðîñòûå ìåòîäû óïîðÿäî÷èâàíèÿ, êî-òîðûå çàòðà÷èâàþò íà ñîðòèðîâêó âðåìÿ ïîðÿäêà n2. Ê òàêèì àëãî-ðèòìàì îòíîñÿòñÿ ñëåäóþùèå ïðîñòûå àëãîðèòìû ïàðíîé ñîðòèðîâ-êè:

• ñîðòèðîâêà ñ ïîìîùüþ âêëþ÷åíèÿ(by insertion);

• ñîðòèðîâêà âûáîðîì(by selection);

• ñîðòèðîâêà ñ ïîìîùüþ îáìåíîâ(by exchange).

25

Page 24: Теория алгоритмов. Котов В.М., Соболевская Е.П

2.1.1. Ñîðòèðîâêà ñ ïîìîùüþ âêëþ÷åíèÿÏóñòü ýëåìåíòû a1, a2, . . . , ai−1 (1 < i ≤ n) óæå óïîðÿäî÷åíû íà

ïðåäûäóùèõ ýòàïàõ äàííûì àëãîðèòìîì.Íà î÷åðåäíîì ýòàïå íåîáõîäèìî âçÿòü ýëåìåíò ai è âêëþ÷èòü â

íóæíîå ìåñòî óïîðÿäî÷åííîé ïîñëåäîâàòåëüíîñòè a1, a2, . . . , ai−1.Ïîñêîëüêó ýëåìåíò ai êàê áû "ïðîíèêàåò"íà ïîëîæåííûé äëÿ

íåãî óðîâåíü, òî ïðîöåññ ïîèñêà òðåáóåìîé ïîçèöèè ÷àñòî íàçûâàþò"ïðîñåèâàíèåì".

 çàâèñèìîñòè îò òîãî, êàê ïðîèñõîäèò ïðîöåññ âêëþ÷åíèÿ ýëå-ìåíòà, ðàçëè÷àþò ïðÿìîå âêëþ÷åíèå è äâîè÷íîå âêëþ÷åíèå.

Ïðèâåäåì àëãîðèòì ñîðòèðîâêè ñ ïîìîùüþ ïðÿìîãî âêëþ÷åíèÿ.Äëÿ òîãî, ÷òîáû âìåñòî äâóõ óñëîâèé îêîí÷àíèÿ öèêëà while (êîíåöèíòåðâàëà ëèáî íàéäåíî ìåñòî âñòàâêè äëÿ ýëåìåíòà) èñïîëüçîâàòüîäíî, ââåäåì áàðüåð a[0].

Àëãîðèòì ñîðòèðîâêè ñ ïîìîùüþ ïðÿìîãî âêëþ÷åíèÿ

var i, j : index; x : item;beginfor i:=2 to n do x:=a[i]; a[0]:=x; j:=i;while (x < a[j − 1]) do a[j]:=a[j-1]; dec(j); a[j]:=x;

end.

Îöåíèì òðóäîåìêîñòü ïðèâåäåííîãî âûøå àëãîðèòìà. Ðåêóððåíòíîåóðàâíåíèå áóäåò èìåòü ñëåäóþùèé âèä:

T (n) = T (n− 1) + Cn, n > 1;

T (1) = 0.

Àëãîðèòì èìååò òðóäîåìêîñòü O(n2).Çàìåòèì, ÷òî òàê êàê ãîòîâàÿ ïîñëåäîâàòåëüíîñòü óæå óïîðÿ-

äî÷åíà, òî äëÿ ïîèñêà ìåñòà âêëþ÷åíèÿ òåêóùåãî ýëåìåíòà ìîæíîèñïîëüçîâàòü ìåòîä äèõîòîìèè (ïîèñê äåëåíèåì ïîïîëàì èëè äâîè÷-íûé ïîèñê), äëÿ êîòîðîãî êàæäûé ðàç èñêëþ÷àåòñÿ èç ðàññìîòðåíèÿïîëîâèíà ýëåìåíòîâ. Åñëè ëèíåéíûé ïîèñê â ñðåäíåì òðåáîâàë n/2

26

Page 25: Теория алгоритмов. Котов В.М., Соболевская Е.П

ñðàâíåíèé íà n ýëåìåíòàõ, òî äâîè÷íûé ïîèñê log2 n ñðàâíåíèé (âõóäøåì ñëó÷àå).

Ïðèâåäåì àëãîðèòì äâîè÷íîãî ïîèñêà ìåñòà âêëþ÷åíèÿ.

Àëãîðèòì äâîè÷íîãî ïîèñêà

var i, j, L, R,m : index; x : item;beginfor i:=2 to n dox := a[i];L := 1;R := i;while (L < R) do m =

[L+R

2

];

if a[m] < x then L = m + 1 else R = m;

for j := i downto (R + 1) a[j] := a[j − 1];

a[R]=x;

end.

Ñëåäóåò îòìåòèòü, ÷òî â ïðàâîé ÷àñòè îòðåçêà [L,R] ïîèñê îñó-ùåñòâëÿåòñÿ áûñòðåå, ÷åì â ëåâîé. Ñëåäóåò òàêæå îòìåòèòü, ÷òî àëãî-ðèòì äâîè÷íîãî âêëþ÷åíèÿ íå ïîçâîëÿåò óëó÷øèòü îöåíêó ÷èñëà ïå-ðåñûëîê ýëåìåíòîâ, êîòîðàÿ îñòàåòñÿ â õóäøåì ñëó÷àå O(n) (õîòÿ ïî-ëó÷åíî óëó÷øåíèå îöåíêè äëÿ ÷èñëà ñðàâíåíèé ýëåìåíòîâ O(log2 n)).

2.1.2. Ñîðòèðîâêà âûáîðîìÈäåÿ ñîðòèðîâêè çàêëþ÷àåòñÿ â ñëåäóþùåì

1. Âûáðàòü ýëåìåíò ñ íàèìåíüøèì êëþ÷îì è ïîìåíÿòü åãî ñ ïåð-âûì ýëåìåíòîì. Òåïåðü ïåðâûé ýëåìåíò ñòîèò íà ñâîåì ìåñòå.

2. Ïîâòîðèòü äåéñòâèÿ ñ îñòàâøèìèñÿ n− 1 ýëåìåíòàìè.

3. Ïðîöåññ çàêàí÷èâàåòñÿ, êîãäà n− 1 ýëåìåíòîâ áóäóò ïîìåùåíûíà ñâîè ìåñòà.

Êàê ñëåäóåò èç îïèñàíèÿ àëãîðèòìà, ñîðòèðîâêà âûáîðîì àññèìåò-ðè÷íà ïðÿìîìó âêëþ÷åíèþ: ìû ïðîñìàòðèâàåì ýëåìåíòû îñòàâøåéñÿ

27

Page 26: Теория алгоритмов. Котов В.М., Соболевская Е.П

èñõîäíîé ïîñëåäîâàòåëüíîñòè è ïîëó÷àåì îäèí ýëåìåíò óïîðÿäî÷åí-íîé ïîñëåäîâàòåëüíîñòè.

Àëãîðèòì ñîðòèðîâêè âûáîðîìvar i, j, k : index; x : item;beginfor i:=1 to n-1 do k := i;for j := i + 1 to n doif a[j] < a[k] then k = j;

x := a[k];a[k] := a[i];a[i] := x;

end.Îöåíèì òðóäîåìêîñòü ïðèâåäåííîãî âûøå àëãîðèòìà ñîðòèðîâêè

âûáîðîì.Ïîèñê ìàêñèìàëüíîãî ýëåìåíòà èç n ýëåìåíòîâ è äîáàâëåíèå åãî

â óæå ãîòîâóþ óïîðÿäî÷åííóþ ïîñëåäîâàòåëüíîñòü òðåáóåò â õóäøåìñëó÷àå Cn îïåðàöèé (ñëåäóåò îòìåòèòü, ÷òî êîëè÷åñòâî ñðàâíåíèéêëþ÷åé íå çàâèñèò îò íà÷àëüíîãî ðàñïîëîæåíèÿ ýëåìåíòîâ, à êîëè-÷åñòâî ïåðåñûëîê ìèíèìàëüíî, êîãäà ìàññèâ óïîðÿäî÷åí (=3), è ìàê-ñèìàëüíî, êîãäà ýëåìåíòû ðàñïîëîæåíû â îáðàòíîì ïîðÿäêå) ïîñëå÷åãî ïîâòîðÿåì îïèñàííûé ïðîöåññ äëÿ îñòàâøèõñÿ n− 1 ýëåìåíòîâ.

Òîãäà ðåêóððåíòíîå óðàâíåíèå áóäåò èìåòü ñëåäóþùèé âèä:

T (n) = Cn + T (n− 1), n > 1;

T (1) = 0.

Àëãîðèòì âûáîðîì èìååò òðóäîåìêîñòü O(n2).Íà ïðàêòèêå, êàê ïðàâèëî, àëãîðèòì âûáîðîì ïðåäïî÷òèòåëü-

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

2.1.3. Ñîðòèðîâêè ñ ïîìîùüþ îáìåíîâÑîðòèðîâêè ñ ïîìîùüþ îáìåíîâ îñíîâàíû íà ñðàâíåíèè äâóõ ýëå-

ìåíòîâ. Åñëè ïîðÿäîê ýëåìåíòîâ íå ñîîòâåòñòâóåò óïîðÿäî÷åííîñòè,

28

Page 27: Теория алгоритмов. Котов В.М., Соболевская Е.П

òî ïðîèñõîäèò èõ îáìåí. Ïðîöåññ ïîâòîðÿåòñÿ äî òåõ ïîð, ïîêà ýëå-ìåíòû íå áóäóò óïîðÿäî÷åíû.

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

Ïóçûðüêîâàÿ ñîðòèðîâêà

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

Àëãîðèòì ïóçûðüêîâîé ñîðòèðîâêè

var i, j : index; x : item;beginfor i:=2 to n dofor j := n downto i doif a[j − 1] > a[j] then x := a[j − 1];a[j − 1] := a[j];a[j] := x

end.

Îöåíèì òðóäîåìêîñòü ïðèâåäåííîãî âûøå àëãîðèòìà ïóçûðüêî-âîé ñîðòèðîâêè. Ïåðåìåùåíèå ìèíèìàëüíîãî èç n ýëåìåíòîâ â êðàé-íþþ ëåâóþ ïîçèöèþ òðåáóåò â õóäøåì ñëó÷àå C ·(n−1) îïåðàöèé (÷èñ-ëî ñðàâíåíèé êëþ÷åé íå çàâèñèò îò ïîðÿäêà ýëåìåíòîâ; ÷èñëî ïðè-ñâàèâàíèé ìèíèìàëüíî, åñëè ýëåìåíòû óïîðÿäî÷åíû, è ìàêñèìàëüíî,åñëè îíè ðàñïîëîæåíû â îáðàòíîì ïîðÿäêå).

Ðåêóððåíòíîå óðàâíåíèå áóäåò èìåòü ñëåäóþùèé âèä:

T (n) = C · (n− 1) + T (n− 1), n > 1;

29

Page 28: Теория алгоритмов. Котов В.М., Соболевская Е.П

T (1) = 0.

Àëãîðèòì ïóçûðüêîâîé ñîðòèðîâêè èìååò òðóäîåìêîñòü O(n2).

Øåéêåðíàÿ ñîðòèðîâêà

Àíàëèç àëãîðèòìà ïóçûðüêîâîé ñîðòèðîâêè ïðèâîäèò ê ñëåäóþùèìíàáëþäåíèÿì.

1. Åñëè ïðè íåêîòîðîì èç ïðîõîäîâ íåò ïåðåñòàíîâîê ýëåìåíòîâ,òî àëãîðèòì ìîæíî çàâåðøèòü.

2. Åñëè çàôèêñèðîâàòü èíäåêñ k ïîñëåäíåãî îáìåíà (âñå ïàðû ëå-âåå ýòîãî èíäåêñà óæå óïîðÿäî÷åíû), òî ïðîñìîòð ìîæíî çà-âåðøèòü íà ýòîì èíäåêñå, à íå èäòè äî íèæíåãî ïðåäåëà äëÿèíäåêñà i.

3. ×åðåäîâàíèå íàïðàâëåíèé äëÿ ïðîñìîòðà ïðè êîòîðîì âñïëû-âàåò ñàìûé ëåãêèé, à òîíåò ñàìûé òÿæåëûé ýëåìåíò.

Àëãîðèòì øåéêåðíîé ñîðòèðîâêè

var j, k, L,R : index;x : item;beginL := 2; R := n; k := n;repeatfor j := R downto L doif a[j − 1] > a[j] then x := a[j − 1]; a[j − 1] := a[j];a[j] := x; k := j;

L := k + 1;for j := L to R doif a[j − 1] > a[j] then x := a[j − 1]; a[j − 1] := a[j];a[j] := x; k := j;

R := k − 1;until (L > R);end.

Øåéêåðíàÿ ñîðòèðîâêà ñ óñïåõîì èñïîëüçóåòñÿ â òåõ ñëó÷àÿõ, êîãäàèçâåñòíî, ÷òî ýëåìåíòû ïî÷òè óïîðÿäî÷åíû.

30

Page 29: Теория алгоритмов. Котов В.М., Соболевская Е.П

2.1.4. Ñîðòèðîâêà ñëèÿíèåìÑîðòèðîâêà ñëèÿíèåì çàêëþ÷àåòñÿ â ñëåäóþùåì.

1. Äåëèì ïîñëåäîâàòåëüíîñòü ýëåìåíòîâ íà äâå ÷àñòè ( åñëè ñîðòè-ðóåìàÿ ïîñëåäîâàòåëüíîñòü ñîñòîÿëà èç n ýëåìåíòîâ, òî ïåðâàÿ÷àñòü ìîæåò ñîäåðæàòü ïåðâûå bnc ýëåìåíòîâ, à âòîðàÿ ÷àñòü îñòàâøèåñÿ, ïîðÿäîê ñëåäîâàíèÿ ýëåìåíòîâ â êàæäîé èç ïîëó-÷åííûõ ÷àñòåé ñîâïàäàåò ñ èõ ïîðÿäêîì ñëåäîâàíèÿ â èñõîäíîéïîñëåäîâàòåëüíîñòè).

2. Ñîðòèðóåì îòäåëüíî êàæäóþ èç ïîëó÷åííûõ ÷àñòåé.

3. Ïðîèçâîäèì ñëèÿíèå îòñîðòèðîâàííûõ ÷àñòåé ïîñëåäîâàòåëüíî-ñòè (ïðè ñëèÿíèè ñðàâíèâàåì íàèìåíüøèå ýëåìåíòû êàæäîé èçîòñîðòèðîâàííûõ ÷àñòåé è ìåíüøèé èç íèõ îòïðàâëÿåì â ñïè-ñîê âûâîäà; ïîâòîðÿåì îïèñàííûå äåéñòâèÿ äî òåõ ïîð, ïîêà íåèñ÷åðïàåòñÿ îäíà èç ÷àñòåé; âñå îñòàâøèåñÿ ýëåìåíòû äðóãîé÷àñòè ïåðåñûëàåì â ñïèñîê âûâîäà).

Ïðèâåäåì ïðîãðàììíóþ ðåàëèçàöèþ àëãîðèòìà ñîðòèðîâêè ñëè-ÿíèåì.

Ñîðòèðîâêà ñëèÿíèåì

procedure sort_sl(l, r : index);var k : index;beginif l 6= r thenk := (l + r) div 2;sort_sl(l, k);sort_sl(k + 1, r);sl(a, l, k, r);

end.

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

31

Page 30: Теория алгоритмов. Котов В.М., Соболевская Е.П

procedure sl(var a : mas; l, z, r : index);var c : mas; i, j, k : index;begini := l;j := z + 1;k := 1;while (i ≤ z) and (j ≤ r) doif a[i] < a[j] then c[k] := a[i];inc(i); inc(k);

else c[k] := a[j];inc(j); inc(k);

while (i ≤ z) do c[k] := a[i];inc(i); inc(k);

while (j ≤ r) do c[k] := a[j];inc(j); inc(k);

k := 0;for i := l to r doinc(k);a[i] := c[k];

end.

Ðåêóððåíòíîå óðàâíåíèå àëãîðèòìà ñîðòèðîâêè ñëèÿíèåì èìååòâèä:

T (n) = 2T (n/2) + Cn, n > 1;

T (1) = 1.

Ïî òåîðåìå î ðåøåíèè ðåêóððåíòíîãî óðàâíåíèÿ òðóäîåìêîñòü îïè-ñàííîãî àëãîðèòìà åñòü O(n log n).

32

Page 31: Теория алгоритмов. Котов В.М., Соболевская Е.П

2.1.5. Ñîðòèðîâêà ñ ïîìîùüþ ðàçäåëåíèÿÄàííûé àëãîðèòì ñîðòèðîâêè áûë ðàçðàáîòàí ×. Õîàðîì . Õîòÿ

òðóäîåìêîñòü åãî ðàáîòû â õóäøåì ñëó÷àå äëÿ n ýëåìåíòîâ ðàâíàO(n2), íà ïðàêòèêå ýòîò àëãîðèòì ÿâëÿåòñÿ îäíèì èç ñàìûõ áûñòðûõìåòîäîâ âíóòðåííåé ñîðòèðîâêè. Äàííûé àëãîðèòì ÷àñòî íàçûâàþòáûñòðîé ñîðòèðîâêîé (Quicksort). Ìû ïîêàæåì, ÷òî â ñðåäíåì åãîòðóäîåìêîñòü ðàâíà O(n log n), ïðè÷åì ëîãàðèôìè÷åñêèé ìíîæèòåëüäîâîëüíî ìàë. Åùå îäíèì äîñòîèíñòâîì äàííîãî ìåòîäà ÿâëÿåòñÿ òî,÷òî áûñòðàÿ ñîðòèðîâêà íå òðåáóåò äîïîëíèòåëüíîé ïàìÿòè.

Ñóòü àëãîðèòìà ñîñòîèò â ñëåäóþùåì.

1. Âûáðàòü íåêîòîðûé ýëåìåíò x äëÿ ñðàâíåíèÿ (ýòî ìîæåò áûòüñðåäíèé, ïåðâûé èëè ïîñëåäíèé ýëåìåíò). Ñàì ×. Õîàð ïðåäïî-ëàãàåò, ÷òî x íàäî âûáèðàòü ñëó÷àéíî, à äëÿ íåáîëüøèõ âûáîðîêîñòàíàâëèâàòüñÿ íà ìåäèàíå.

2. Èñïîëüçóÿ îáìåíû, âûïîëíèòü ïðîöåäóðó ðàçäåëåíèÿ, ñóòü êî-òîðîé çàêëþ÷àåòñÿ â ñëåäóþùåì: ðàçáèòü ìàññèâ íà äâå ÷àñòè:ëåâóþ ñ êëþ÷àìè ≤ x è ïðàâóþ ñ êëþ÷àìè ≥ x.

Äàííûå äåéñòâèÿ ìîãóò áûòü âûïîëíåíû, íàïðèìåð, ñëåäóþ-ùèì àëãîðèòìîì:

• ïðîñìàòðèâàåì ìàññèâ ñëåâà, ïîêà íå âñòðåòèì ýëåìåíòa[i] > x;

• ïðîñìàòðèâàåì ìàññèâ ñïðàâà, ïîêà íå âñòðåòèì ýëåìåíòa[j] < x;

• ìåíÿåì ìåñòàìè ýòè äâà ýëåìåíòà;• ïðîäîëæàåì ïðîñìîòð è îáìåí äî òåõ ïîð, ïîêà íå áóäóò

ïðîñìîòðåíû âñå ýëåìåíòû ìàññèâà (i > j).

3. Ïðèìåíèòü ïðîöåäóðó ðàçäåëåíèÿ ê ïîëó÷èâøèìñÿ äâóì ÷à-ñòÿì, çàòåì ê ÷àñòÿì ÷àñòåé è òàê äàëåå, ïîêà êàæäàÿ èç ÷àñòåéíå áóäåò ñîñòîÿòü èç îäíîãî åäèíñòâåííîãî ýëåìåíòà.

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

33

Page 32: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðèâåäåì ïðîãðàììíóþ ðåàëèçàöèþ àëãîðèòìà áûñòðîé ñîðòè-ðîâêè.

Àëãîðèòì áûñòðîé ñîðòèðîâêè

procedure quiq(l, r : index);var x:item;beginx := a[(l + r) div 2];i := l; j := r;repeatwhile a[i] < x do inc(i);while a[j] > x do dec(j);if i ≤ j thenxchg(a[i], a[j]);inc(i); dec(j);

until (i > j)if l < j then quiq(l, j);if i < r then quiq(i, r);

end.

Ïîñòðîèì ðåêóððåíòíîå óðàâíåíèå äëÿ àëãîðèòìà áûñòðîé ñîð-òèðîâêè. Ïðîöåäóðà ðàçäåëåíèÿ n ýëåìåíòîâ òðåáóåò Cn îïåðàöèé,òàê êàê êàæäûé ýëåìåíò ïîñëåäîâàòåëüíîñòè íåîáõîäèìî ñðàâíèòü ñâûáðàííûì ýëåìåíòîì, ïîýòîìó ðåêóððåíòíîå óðàâíåíèå áóäåò èìåòüâèä:

T (n) = Cn + T (|A1|) + T (|A2|), n > 1;

T (1) = 1,

ãäå |A1| ðàçìåð ëåâîé ÷àñòè ìàññèâà ïîñëå ïðîöåäóðû ðàçäåëåíèÿ,|A2| ðàçìåð ïðàâîé ÷àñòè ìàññèâà ïîñëå ïðîöåäóðû ðàçäåëåíèÿ.

Åñëè ïðåäïîëîæèòü, ÷òî ðàçäåëåíèå â ñðåäíåì ðàçáèâàåò ÷àñòüïîïîëàì, òî

T (n) = Cn + 2T (n/2), n > 1;

T (1) = 1

34

Page 33: Теория алгоритмов. Котов В.М., Соболевская Е.П

è ïî òåîðåìå î ðåøåíèè ðåêóððåíòíîãî óðàâíåíèÿ òðóäîåìêîñòü àë-ãîðèòìà áûñòðîé ñîðòèðîâêè â ñðåäíåì åñòü O(n log n).

Õóäøèì ñëó÷àåì ÿâëÿåòñÿ ñèòóàöèÿ, êîãäà â êà÷åñòâå ñðàâíèâà-åìîãî ýëåìåíòà âûáèðàåòñÿ íàèáîëüøèé (èëè íàèìåíüøèé) èç âñåõýëåìåíòîâ ðàññìàòðèâàåìîé ÷àñòè.  ýòîì ñëó÷àå ïîñëå ïðîöåäóðûðàçäåëåíèÿ |A1| = n− 1 è |A2| = 1.

Ðåêóððåíòíîå óðàâíåíèå áóäåò èìåòü âèä:

T (n) = Cn + T (n− 1) + T (1), n > 1;

T (1) = 1

è òðóäîåìêîñòü àëãîðèòìà áûñòðîé ñîðòèðîâêè â õóäøåì ñëó÷àå åñòüO(n2).

2.2. Âíåøíÿÿ ñîðòèðîâêà àëãîðèòìàõ, êîòîðûå ìû îáñóæäàëè äî ñèõ ïîð, ïðåäïîëàãà-

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

 ðàçëè÷íûõ ÿçûêàõ ïðîãðàììèðîâàíèÿ ïðåäóñìîòðåí ôàéëî-âûé òèï äàííûõ, ïðåäíàçíà÷åííûé äëÿ ïðåäñòàâëåíèÿ äàííûõ, õðà-íÿùèõñÿ âî âòîðè÷íîé ïàìÿòè. Îïåðàöèîííàÿ ñèñòåìà äåëèò âòîðè÷-íóþ ïàìÿòü íà áëîêè îäèíàêîâîãî ðàçìåðà ( ðàçìåð áëîêà çàâèñèòîò êîíêðåòíîãî òèïà îïåðàöèîííîé ñèñòåìû è îáû÷íî íàõîäèòñÿ âïðåäåëàõ îò 512 äî 4096 áàéò). Ôàéë ìîæíî ðàññìàòðèâàòü êàê ñâÿ-çàííûé ñïèñîê áëîêîâ. Áàçîâîé îïåðàöèåé, âûïîëíÿåìîé ïî îòíîøå-íèþ ê ôàéëàì, ÿâëÿåòñÿ ïåðåíîñ îäíîãî áëîêà â áóôåð, íàõîäÿùèéñÿâ îñíîâíîé ïàìÿòè. Áóôåð ïðåäñòàâëÿåò ñîáîé çàðåçåðâèðîâàííóþîáëàñòü â îñíîâíîé ïàìÿòè, ðàçìåð êîòîðîé ñîîòâåòñòâóåò ðàçìåðóáëîêà. Òèïè÷íàÿ îïåðàöèîííàÿ ñèñòåìà îáåñïå÷èâàåò ÷òåíèå áëîêîââ òîì ïîðÿäêå, â êàêîì îíè ïîÿâëÿþòñÿ â ñïèñêå áëîêîâ: ñíà÷àëàìû ÷èòàåì â áóôåð ïåðâûé áëîê ôàéëà, çàòåì çàìåíÿåì åãî íà âòî-ðîé áëîê, êîòîðûé çàïèñûâàåòñÿ â òîò æå áóôåð, è ò.ä. Àíàëîãè÷íî,ïðîöåññ çàïèñè ôàéëà ìîæíî ðàññìàòðèâàòü êàê ïðîöåññ ñîçäàíèÿôàéëà â áóôåðå. Êîãäà çàïèñè "çàïèñûâàþòñÿ"â ôàéë, ôàêòè÷åñêè

35

Page 34: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

Ïðèðîäà óñòðîéñòâ âòîðè÷íîé ïàìÿòè (íàïðèìåð, äèñêîâîäîâ)òàêîâà, ÷òî âðåìÿ, íåîáõîäèìîå äëÿ ïîèñêà áëîêà è ÷òåíèÿ åãî âîñíîâíóþ ïàìÿòü, äîñòàòî÷íî âåëèêî â ñðàâíåíèè ñî âðåìåíåì, êî-òîðîå òðåáóåòñÿ äëÿ îòíîñèòåëüíî ïðîñòîé îáðàáîòêè äàííûõ, ñîäåð-æàùèõñÿ â ýòîì áëîêå. Îöåíèâàÿ âðåìÿ ðàáîòû àëãîðèòìîâ, â êîòî-ðûõ èñïîëüçóþòñÿ äàííûå, õðàíÿùèåñÿ â âèäå ôàéëîâ, íàì ïðèäåòñÿ,òàêèì îáðàçîì, â ïåðâóþ î÷åðåäü ó÷èòûâàòü êîëè÷åñòâî îáðàùåíèéê áëîêàì, ò. å. ñêîëüêî ðàç ìû ñ÷èòûâàåì â îñíîâíóþ ïàìÿòü èëèçàïèñûâàåì áëîê âî âòîðè÷íóþ ïàìÿòü. Òàêàÿ îïåðàöèÿ íàçûâàåò-ñÿ äîñòóïîì (èëè îáðàùåíèåì) ê áëîêó. Ïðåäïîëàãàåòñÿ, ÷òî ðàçìåðáëîêà ôèêñèðîâàí â îïåðàöèîííîé ñèñòåìå, ïîýòîìó ó íàñ íåò âîç-ìîæíîñòè óñêîðèòü ðàáîòó àëãîðèòìà, óâåëè÷èâ ðàçìåð áëîêà è ñî-êðàòèâ òåì ñàìûì êîëè÷åñòâî îáðàùåíèé ê áëîêàì. Òàêèì îáðàçîì,ìåðîé êà÷åñòâà àëãîðèòìà, ðàáîòàþùåãî ñ âíåøíåé ïàìÿòüþ, ÿâ-ëÿåòñÿ êîëè÷åñòâî îáðàùåíèé ê áëîêàì.Îïðåäåëåíèå 2.3. Ñîðòèðîâêà äàííûõ, êîòîðûå îðãàíèçîâàííû ââèäå ôàéëîâ (ñîðòèðîâêà äàííûõ, õðàíÿùèõñÿ âî âòîðè÷íîé ïàìÿ-òè), íàçûâàåòñÿ âíåøíåé ñîðòèðîâêîé.Îïðåäåëåíèå 2.4. Ïîä "áåçäåéñòâèåì" êîìïüþòåðà áóäåì ïîíè-ìàòü ïåðèîäû îæèäàíèÿ, ïîêà áëîê áóäåò ïðî÷èòàí â îñíîâíóþ ïà-ìÿòü èëè çàïèñàí èç îñíîâíîé ïàìÿòè âî âíåøíþþ.

 äàííîì ðàçäåëå ìû ïîêàæåì, êàê àëãîðèòì ñîðòèðîâêè ñëè-ÿíèåì ïîçâîëÿåò îòñîðòèðîâàòü ôàéë ñ n çàïèñÿìè âñåãî ëèøü çàO(log n) ïðîõîäîâ ÷åðåç ôàéë. Çàòåì ðàññìîòðèì, êàê èñïîëüçîâàòüíåêîòîðûå âîçìîæíîñòè îïåðàöèîííîé ñèñòåìû ïî óïðàâëåíèþ ÷òå-íèåì è çàïèñüþ áëîêîâ, ÷òîáû óñêîðèòü ñîðòèðîâêó çà ñ÷åò ñîêðàùå-íèÿ âðåìåíè "áåçäåéñòâèÿ"êîìïüþòåðà.

2.2.1. Àëãîðèòì ñîðòèðîâêè ñëèÿíèåìÃëàâíàÿ èäåÿ, êîòîðàÿ ëåæèò â îñíîâå ñîðòèðîâêè ñëèÿíèåì, çà-

êëþ÷àåòñÿ â òîì, ÷òî ìû îðãàíèçóåì ôàéë â âèäå ïîñòåïåííî óâåëè-

36

Page 35: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

r1, . . . , rk,

ãäå êëþ÷ ri íå áîëüøå, ÷åì êëþ÷ ri+1, 1 ≤ i < k.

Îïðåäåëåíèå 2.5. Ãîâîðÿò, ÷òî ôàéë, ñîñòîÿùèé èç r1, . . . , rm çà-ïèñåé, äåëèòñÿ íà ñåðèè äëèíîé k, åñëè

∀i ≥ 0 : k ∗ i < m

ïîñëåäîâàòåëüíîñòü çàïèñåé

rk(i−1)+1, rk(i−1)+2, . . . , rki

ïðåäñòàâëÿåò ñîáîé ñåðèþ äëèíû k. Åñëè m íå äåëèòñÿ íàöåëî íà k,ò. å. m = pk + q, ãäå q < k, òîãäà ïîñëåäîâàòåëüíîñòü çàïèñåé

rm−q+1, rm−q+2, . . . , rm,

íàçûâàåìàÿ "õâîñòîì", òàêæå ïðåäñòàâëÿåò ñîáîé ñåðèþ äëèíîé q.

Ïðèìåð 2.1. Ïîñëåäîâàòåëüíîñòü öåëûõ ÷èñåë, ïîêàçàííàÿ íèæå, îð-ãàíèçîâàíà ñåðèÿìè äëèíîé 3. "Õâîñò"èìååò äëèíó, ìåíüøóþ 3, è åãîçàïèñè òîæå îòñîðòèðîâàíû.

7 15 29 *** 8 11 13 *** 16 22 31 *** 5 12

Ïðåäïîëîæèì, ÷òî çàäàíû äâà èñõîäíûõ ôàéëà, íàïðèìåð f1 èf2, êîòîðûå îðãàíèçîâàíû â âèäå ñåðèé äëèíîé k è äëÿ êîòîðûõ âû-ïîëíÿþòñÿ ñëåäóþùèå óñëîâèÿ:

(1) êîëè÷åñòâà ñåðèé (âêëþ÷àÿ "õâîñòû") â f1 è f2 îòëè÷àþòñÿ íåáîëüøå, ÷åì íà åäèíèöó;

(2) òîëüêî îäèí èç ôàéëîâ f1 èëè f2 ìîæåò èìåòü "õâîñò";

(3) ôàéë ñ "õâîñòîì"èìååò íå ìåíüøå ñåðèé, ÷åì äðóãîé ôàéë.

Ïåðâîíà÷àëüíî ìîæíî ðàçäåëèòü âñå n çàïèñåé, êîòîðûå íàäî îòñîð-òèðîâàòü, íà äâà èñõîäíûõ ôàéëà f1 è f2 (æåëàòåëüíî, ÷òîáû çàïèñåéâ ýòèõ ôàéëàõ áûëî ïîðîâíó). Ìîæíî ñ÷èòàòü, ÷òî ïåðâîíà÷àëüíîëþáîé ôàéë ñîñòîèò èç ñåðèé äëèíû 1 (ò. å. k = 1).

37

Page 36: Теория алгоритмов. Котов В.М., Соболевская Е.П

Çàìåòèì, ÷òî êîãäà ïðè îïèñàíèè àëãîðèòìà ìû áóäåì ãîâîðèòüîá îáúåäèíåíèè ñåðèé äëèíû k, òî ïðè ýòîì ïîäðàçóìåâàåòñÿ ïðîöå-äóðà ñëèÿíèÿ äâóõ ñåðèé äëèíû k â ñåðèþ äëèíû 2k (ò. å. îáúåäèíå-íèå äâóõ óïîðÿäî÷åííûõ ïîñëåäîâàòåëüíîñòåé â îäíó òàêèì îáðàçîì,÷òîáû ñîõðàíèëàñü óïîðÿäî÷åííîñòü).

Àëãîðèòì

1. i = 0 (êîëè÷åñòâî ïðîõîäîâ (èòåðàöèé) àëãîðèòìà);k := 1 (äëèíà ñåðèè);f1, f2 èñõîäíûå ôàéëû;äâà ðåçóëüòèðóþùèõ ôàéëà ÿâëÿþòñÿ ïóñòûìè;

2. Ïîêà 2i < n âûïîëíÿòü ñëåäóþùóþ ïîñëåäîâàòåëüíîñòü äåé-ñòâèé.

• Ïîêà íå çàêîí÷èòñÿ îäèí èç èñõîäíûõ ôàéëîâ ÷èòàåì ïî îäíîé ñåðèè äëèíû k èç èñõîäíûõ ôàéëîâ; îáúåäèíÿåì ýòè ñåðèè â ñåðèþ äëèíû 2k; ïðèñîåäèíÿåì ðåçóëüòèðóþùóþ ñåðèþ ê îäíîìó èç ðå-

çóëüòèðóþùèõ ôàéëîâ, êîòîðûå îðãàíèçîâàíû â âèäåñåðèé äëèíîé 2k (ïåðåêëþ÷àÿñü ìåæäó ðåçóëüòèðóþ-ùèìè ôàéëàìè, ìîæíî äîáèòüñÿ òîãî, ÷òî ýòè ôàéëûáóäóò íå òîëüêî îðãàíèçîâàíû â âèäå ñåðèé äëèíîé 2k,íî áóäóò òàêæå óäîâëåòâîðÿòü ïåðå÷èñëåííûì âûøåóñëîâèÿì (1)(3)).

• Åñëè îáà èñõîäíûõ ôàéëà îäíîâðåìåííî ñòàëè ïóñòûìè, òîíè÷åãî íå äåëàòü. Èíà÷å ïåðåïèñàòü "õâîñò"ó îñòàâøåãîñÿíå ïóñòûì èñõîäíîãî ôàéëà â ñîîòâåòñòâóþùèé ðåçóëüòè-ðóþùèé ôàéë (òîò ôàéë, êóäà áû øëà çàïèñü î÷åðåäíîéñåðèè äëèíû 2k).

• i := i + 1;k := 2k.

• Òàê êàê èñõîäíûå ôàéëû ñòàëè ïóñòûìè, òî íà ñëåäóþ-ùåé èòåðàöèè àëãîðèòìà áóäåì ðàññìàòðèâàòü â êà÷åñòâåèñõîäíûõ ôàéëîâ ðåçóëüòèðóþùèå ôàéëû, à â êà÷åñòâå ðå-çóëüòèðóþùèõ - èñõîäíûå.

38

Page 37: Теория алгоритмов. Котов В.М., Соболевская Е.П

3. Ïîñëå âûïîëíåíèÿ i ïîäîáíîãî ðîäà ïðîõîäîâ ó íàñ ïîëó÷àò-ñÿ äâà ðåçóëüòèðóþùèõ ôàéëà. Îäèí èç ýòèõ äâóõ ôàéëîâ áó-äåò ïóñòûì. Âòîðîé ôàéëà áóäåò ñîäåðæàòü åäèíñòâåííóþ ñå-ðèþ äëèíîé n, åñëè n = 2i, à åñëè n < 2i, òî áóäåò ñîäåðæàòü"õâîñò"äëèíû n, ò. å. áóäåò îòñîðòèðîâàí. Ýòîò îòñîðòèðîâàí-íûé ôàéë è ÿâëÿåòñÿ ðåøåíèåì çàäà÷è.

Ïðèìåð 2.2. Îòñîðòèðîâàòü ïîñëåäîâàòåëüíîñòü èç 23 ÷èñåë, êîòîðàÿðàçäåëåíà íà äâà ôàéëà f1 è f2.

f1 28 3 93 10 54 65 30 90 10 69 8 22f2 31 5 96 40 85 9 39 13 7 77 10

Ðåøåíèå. Çàìåòèì, ÷òî èñõîäíàÿ ïîñëåäîâàòåëüíîñòü ðàçáèòà íà äâàôàéëà f1 è f2, êîòîðûå óäîâëåòâîðÿþò óñëîâèÿì (1)(3) (âòîðîé ôàéëèìååò õâîñò åäèíè÷íîé äëèíû (çàïèñü 22), â òî âðåìÿ êàê ó ïåðâîãîôàéëà õâîñòà íåò).

Íà÷èíàåì ñ îáúåäèíåíèÿ ñåðèé äëèíû k = 1, ñîçäàâàÿ ïðè ýòîìäâà ôàéëà g1 è g2. Íàïðèìåð, ïåðâûìè ñåðèÿìè äëèíû îäèí ÿâëÿ-þòñÿ (28) è (31). Îáúåäèíÿåì èõ, ïîëó÷àÿ ñåðèþ (28 31), êîòîðóþçàïèñûâàåì â ôàéë g1. Ñëåäóþùèå äâå ñåðèè åäèíè÷íîé äëèíû, (3) è(5), îáúåäèíÿþòñÿ, îáðàçîâûâàÿ ñåðèþ (3 5) è ýòà ñåðèÿ ïîìåùàåòñÿâ ôàéë g2 è ò.ä. Ðåçóëüòàòû ïåðâîãî ïðîõîäà ïîêàçàíû â òàáëèöå.

g1 28 31 93 96 54 85 30 39 8 10 8 10g2 3 5 10 40 9 65 13 90 69 77 22

Äàëåå îáúåäèíÿåì ñåðèè äëèíû k = 2. Íàïðèìåð, äâå ñåðèè (28 31) è(3 5) îáúåäèíÿþòñÿ, îáðàçîâûâàÿ ñåðèþ (3 5 28 31).

f1 3 5 28 31 9 54 65 85 8 10 69 77f2 10 40 93 96 13 30 39 90 8 10 22

Äàëåå ïåðåõîäèì ê îáðàçîâàíèþ ñåðèé äëèíû 8 è 16.

g1 3 5 10 28 31 40 93 96 8 8 10 10 22 69 77g2 9 13 30 39 54 65 85 90

f1 3 5 9 10 13 28 30 31 39 40 54 65 85 90 93 96f2 8 8 10 10 22 69 77

39

Page 38: Теория алгоритмов. Котов В.М., Соболевская Е.П

Íà ïîñëåäíåé ñòàäèè, êîãäà ôàéëû äîëæíû áûòü îðãàíèçîâàíû ââèäå ñåðèé äëèíîé 32, ó íàñ áóäåò îäèí ôàéë, ñîäåðæàùèé òîëüêî"õâîñò"(äëèíîé 23), è ïóñòîé âòîðîé ôàéë.

g1 3 5 8 8 9 10 10 10 13 22 28 30 31 39 40 54 65 69 77 85 90 93 96g2

Åäèíñòâåííûé "õâîñò"è áóäåò ÿâëÿòüñÿ èñêîìîé îòñîðòèðîâàííîé ïî-ñëåäîâàòåëüíîñòüþ ÷èñåë.

 ðàññìîòðåííîì âûøå ïðèìåðå ñîðòèðîâêà ñëèÿíèåì íà÷èíàåò-ñÿ ñ äâóõ èñõîäíûé ôàéëîâ, ñîäåðæàùèõ ñåðèè äëèíû 1. Ìû ñýêîíî-ìèëè áû íåìàëî âðåìåíè â ñîðòèðîâêå ñëèÿíèåì, åñëè áû íà÷àëè ýòóïðîöåäóðó ñ ïðîõîäà, êîòîðûé

• ñ÷èòûâàåò â îñíîâíóþ ïàìÿòü ãðóïïû èç s çàïèñåé (s íåêîòî-ðîå ðàçóìíîå ÷èñëî çàïèñåé, êîòîðûå ìîæíî õðàíèòü â îïåðà-òèâíîé ïàìÿòè îäíîâðåìåííî);

• ñîðòèðóåò èõ, íàïðèìåð, ñ ïîìîùüþ ïðîöåäóðû áûñòðîé ñîðòè-ðîâêè;

• çàïèñûâàåò ïîî÷åðåäíî â îäèí èç äâóõ èñõîäíûõ ôàéëîâ â âèäåñåðèé äëèíîé s.

Òåïåðü ìû èìååì äâà èñõîäíûõ ôàéëà, êîòîðûå ñîäåðæàò ñåðèè äëè-íû s. Îáùåå ÷èñëî ñåðèé íà íà÷àëüíîì ýòàïå ðàâíî r = dn/se. Äàëååâûïîëíèì ïðîöåäóðó âíåøíåé ñîðòèðîâêè ñëèÿíèåì, íà÷èíàÿ ñ ñåðèéäëèíû k = s.

Îöåíèì òðóäîåìêîñòè àëãîðèòìà âíåøíåé ñîðòèðîâêè ñëèÿíèåì.

1. Îïðåäåëèì òðóäîåìêîñòü ïðîöåäóðû ðàçáèåíèÿ èñõîäíîé ïî-ñëåäîâàòåëüíîñòè íà ñåðèè äëèíû s. Òàê êàê îáùåå ÷èñëî ñå-ðèé r = dn/se, à òðóäîåìêîñòü ïðåîáðàçîâàíèÿ ãðóïïû èç s çà-ïèñåé â ñåðèþ åñòü O(s log s) (íàïðèìåð, èñïîëüçóÿ àëãîðèòìáûñòðîé ñîðòèðîâêè), òî òðóäîåìêîñòü ïîñòðîåíèÿ ñåðèé åñòü

O(rs log s) = O(n log s).

2. Îïðåäåëèì êîëè÷åñòâî ïðîõîäîâ d àëãîðèòìà. Ïðè êàæäîì èçïðîõîäîâ ïàðû ñåðèé ñëèâàþòñÿ, ïîýòîìó èõ êîëè÷åñòâî ïîñëåîäíîãî ïðîõîäà óìåíüøàåòñÿ â äâîå. Ïîñëå ïåðâîãî ïðîõîäà áó-äåò dr/2e ñåðèé, ïîñëå âòîðîãî - dr/4e, è, â îáùåì ñëó÷àå, ïîñëå

40

Page 39: Теория алгоритмов. Котов В.М., Соболевская Е.П

i-îãî ïðîõîäà dr/2ie ñåðèé. Àëãîðèòì çàâåðøàåò ñâîþ ðàáîòó,êîãäà îñòàåòñÿ îäíà ñåðèÿ, ò. å. ïîñëå d-îãî ïðîõîäà äëÿ êîòîðîãîdr/2de = 1. Îòêóäà ñëåäóåò, ÷òî êîëè÷åñòâî ïðîõîäîâ

d = dlog2 re.

3. Îïðåäåëèì ÷èñëî ñðàâíåíèé ïðè îáúåäèíåíèè ñåðèé. Ñíà÷àëà îò-ìåòèì, ÷òî äëÿ îáúåäèíåíèÿ äâóõ ñåðèé äëèíû k äîñòàòî÷íî2k − 1 ñðàâíåíèå.Ïðè ïåðâîì ïðîõîäå îáúåäèíÿþòñÿ r ñåðèé äëèíû s, ò. å. ïðî-èñõîäèò r/2 îáúåäèíåíèé. Äëÿ ýòîãî íàäî íå áîëåå

r/2 ∗ (2s− 1)

ñðàâíåíèå.Ïðè âòîðîì ïðîõîäå îáúåäèíÿþòñÿ r/2 ñåðèé äëèíû 2s, ò. å.ïðîèñõîäèò r/4 îáúåäèíåíèé. Äëÿ ýòîãî íàäî íå áîëåå

r/4 ∗ (4s− 1)

ñðàâíåíèå.Ïðè òðåòüåì ïðîõîäå îáúåäèíÿþòñÿ r/4 ñåðèé äëèíû 4s, ò. å.ïðîèñõîäèò r/8 îáúåäèíåíèé. Äëÿ ýòîãî íàäî íå áîëåå

r/8 ∗ (8s− 1)

ñðàâíåíèå.Òàê êàê ÷èñëî ïðîõîäîâ àëãîðèòìà ðàâíî dlog2 re, òî îáùåå ÷èñ-ëî ñðàâíåíèé

log2 n∑

i=1

(rs− r/2i) = rs log2 r − r

log2 n∑

i=1

(1/2i) ≈ n log2 r − r.

ñëåäîâàòåëüíî òðóäîåìêîñòü ýòàïà îáúåäèíåíèÿ îòðåçêîâ ðàâíàO(n log r).

 ñèëó âûøå ñêàçàííîãî ñëåäóåò, ÷òî ñëîæíîñòü àëãîðèòìà â öå-ëîì åñòü

O(n log s + n log r) = O(n log(rs)) = O(n log(s ∗ n/s)) = O(n log n).

41

Page 40: Теория алгоритмов. Котов В.М., Соболевская Е.П

Îïðåäåëèì îáùåå ÷èñëî îïåðàöèé ÷òåíèÿ áëîêîâ. Ïðåäïîëîæèì,÷òî ìàêñèìàëüíûé ðàçìåð áëîêà, êîòîðûé ìîæåò õðàíèòüñÿ îäíîâðå-ìåííî â îïåðàòèâíîé ïàìÿòè ìàøèíû, åñòü s. Ñ ñåðèé èìåííî òàêîãîðàçìåðà ìû è íà÷èíàëè àëãîðèòì, âûïîëíèâ äëÿ ýòîãî ÷òåíèå r áëî-êîâ. Ïðè ðàáîòå àëãîðèòìà, äëÿ âûïîëíåíèÿ ïðîöåäóðû îáúåäèíåíèÿäâóõ ñåðèé, ìû ìîãëè ñ÷èòûâàòü èç êàæäîãî ôàéëà òîëüêî áëîêè ðàç-ìåðà s/2. Òàê êàê âñå äàííûå íàäî ñ÷èòàòü, òî êîëè÷åñòâî ñ÷èòûâàíèéáëîêîâ çà îäèí ïðîõîä ðàâíî

n

s/2= 2r.

×èñëî ïðîõîäîâ ðàâíî dlog2 re.Ïîýòîìó îáùåå ÷èñëî îïåðàöèé ÷òåíèÿ áëîêîâ â àëãîðèòìå ðàâíî

r + 2rdlog2 re = O(r log r).

2.2.2. Ìèíèìèçàöèÿ ïîëíîãî âðåìåíè âûïîëíåíèÿ ñîðòè-ðîâêè ñëèÿíèåì

Êàê ïðàâèëî, ïîëíîå âðåìÿ âûïîëíåíèÿ ñîðòèðîâêè ïðåâûøà-åò âðåìÿ îáðàáîòêè äàííûõ, íàõîäÿùèõñÿ â îñíîâíîé ïàìÿòè. Ïðèñîðòèðîâêå áîëüøèõ ôàéëîâ ïîëíîå âðåìÿ ñòàíîâèòñÿ êðèòè÷åñêîéâåëè÷èíîé è ïðîáëåìà ìèíèìèçàöèè ïîëíîãî âðåìåíè ïðîöåññà ñîð-òèðîâêè ñëèÿíèåì âûõîäèò íà ïåðâûé ïëàí.

Âðåìÿ, íåîáõîäèìîå äëÿ ñ÷èòûâàíèÿ äàííûõ, õðàíÿùèõñÿ íà âíå-øíèõ óñòðîéñòâàõ, êàê ïðàâèëî, ñóùåñòâåííî ïðåâûøàåò âðåìÿ, çà-òðà÷èâàåìîå íà âûïîëíåíèå ïðîñòûõ âû÷èñëåíèé ñ ýòèìè äàííûìè(îáúåäèíåíèÿ ñåðèé). Òàêèì îáðàçîì, ïðè íàëè÷èè ëèøü îäíîãî êà-íàëà, ïî êîòîðîìó ïðîèñõîäèò îáìåí äàííûìè ñ îñíîâíîé ïàìÿòüþ,èìåííî ýòîò êàíàë è ñòàíåò òåì "óçêèì ìåñòîì", êîòîðîå áóäåò òîðìî-çèòü ðàáîòó ñèñòåìû â öåëîì. Ýòîò êàíàë îáìåíà äàííûìè âñå âðåìÿáóäåò çàíÿò, è ïîëíîå âðåìÿ ðàáîòû ñèñòåìû áóäåò ïðàêòè÷åñêè ðàâíîâðåìåíè, çàòðà÷èâàåìîìó íà îáìåí äàííûìè ñ îñíîâíîé ïàìÿòüþ. Âñåâû÷èñëåíèÿ áóäóò âûïîëíÿòüñÿ ïðàêòè÷åñêè ìãíîâåííî ïîñëå òîãî,êàê ïîÿâÿòñÿ ñîîòâåòñòâóþùèå äàííûå, è îäíîâðåìåííî ñ òåì, ïîêàáóäåò ñ÷èòûâàòüñÿ èëè çàïèñûâàòüñÿ ñëåäóþùàÿ ïîðöèÿ äàííûõ.

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

42

Page 41: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðåäïîëîæèì, ÷òî âûïîëíÿåòñÿ ïîïåðåìåííîå ñ÷èòûâàíèå ñåðèéèç äâóõ ôàéëîâ f1 è f2. Ôàéëû îðãàíèçîâàíû â âèäå ñåðèé äëèíû k,ðàçìåð êîòîðûõ íàìíîãî ïðåâûøàåò ðàçìåð áëîêà. Ïîýòîìó, ÷òîáûîáúåäèíèòü äâå òàêèå ñåðèè, íàì íóæíî ïðî÷èòàòü íåñêîëüêî áëîêîâèç êàæäîãî ôàéëà. Ïðåäïîëîæèì, ÷òî âñå çàïèñè â ñåðèè èç ôàéëàf1 ïðåäøåñòâóþò âñåì çàïèñÿì ñåðèè èç ôàéëà f2.  ýòîì ñëó÷àå,ïðè ïîïåðåìåííîì ñ÷èòûâàíèè áëîêîâ, âñå áëîêè èç ôàéëà f2 áóäóòîñòàâàòüñÿ â îñíîâíîé ïàìÿòè. Îñíîâíîé ïàìÿòè ìîæåò íå õâàòèòüäëÿ âñåõ ýòèõ áëîêîâ, íî äàæå åñëè è õâàòèò, íàì ïðèäåòñÿ ïîñëåñ÷èòûâàíèÿ âñåõ áëîêîâ ñåðèè ïîäîæäàòü, ïîêà íå áóäåò ñêîïèðîâàíàè çàïèñàíà âñÿ ñåðèÿ èç ôàéëà f2 â ðåçóëüòèðóþùèé ôàéë.

Äëÿ òîãî, ÷òîáû èçáåæàòü îïèñàííîé âûøå ñèòóàöèè, îïðåäåëèì,ó êàêîé èç äâóõ ñåðèé áóäóò ïåðâîé âûáðàíû âñå åå çàïèñè, íàõîäÿ-ùèåñÿ â äàííûé ìîìåíò â îñíîâíîé ïàìÿòè, è áóäåì ïîïîëíÿòü çàïàñçàïèñåé èìåííî äëÿ ýòîé ñåðèè. Ïóñòü k1 êëþ÷ ïîñëåäíåé çàïèñèâ ïîñëåäíåì áëîêå, ñ÷èòàííîì èç ôàéëà f1, à k2 èç ôàéëà f2. Åñëèêàêàÿ-ëèáî èç ñåðèé èñ÷åðïàëàñü, òî ìû ñ÷èòûâàåì î÷åðåäíîé áëîêèç íå èñ÷åðïàâøåé ñåáÿ ñåðèè. Åñëè ñåðèÿ íå èñ÷åðïàëàñü, òî

• åñëè k1 < k2, òî ñ÷èòûâàåì áëîê èç ôàéëà f1;

• åñëè k2 ≤ k1, òî ñ÷èòûâàåì áëîê èç ôàéëà f2.

Åùå îäèí ñïîñîá, êîòîðûé ïîçâîëÿåò óñêîðèòü îáìåí äàííûìèìåæäó îñíîâíîé è âòîðè÷íîé ïàìÿòüþ, çàêëþ÷àåòñÿ â óâåëè÷åíèè÷èñëà êàíàëîâ îáìåíà äàííûìè. Ïîëó÷åííûé ïðè ýòîì àëãîðèòì ñîð-òèðîâêè íîñèò íàçâàíèå ìíîãîêàíàëüíîé ñîðòèðîâêè ñëèÿíèåì.

Ïðåäïîëîæèì, ÷òî èìååòñÿ 2m äèñêîâîäîâ, êàæäûé èç êîòîðûõèìååò ñîáñòâåííûé êàíàë äîñòóïà ê îñíîâíîé ïàìÿòè. Äëÿ âûïîëíå-íèÿ 2m-êàíàëüíîé ñîðòèðîâêè ðàçìåñòèì íà m äèñêîâîäàõ m ôàéëîâf1, f2, . . . , fm, îðãàíèçîâàííûõ â âèäå ñåðèé äëèíû k. Òîãäà ìîæíîïðî÷èòàòü m ñåðèé, ïî îäíîé èç êàæäîãî ôàéëà, è îáúåäèíèòü èõ âîäíó ñåðèþ äëèíîé mk. Ýòà ñåðèÿ ïîìåùàåòñÿ â îäèí èç m âûõîäíûõôàéëîâ g1, g2, ..., gm.

Åñëè ó íàñ èìååòñÿ ïåðâîíà÷àëüíî n çàïèñåé äëÿ ñîðòèðîâêè, àäëèíà ñåðèé ïîñëå êàæäîãî ïðîõîäà óìíîæàåòñÿ íà m, òî òîãäà ïîñëåi ïðîõîäîâ ñåðèè áóäóò èìåòü äëèíó mi. Àëãîðèòì çàâåðøèò ñâîþðàáîòó åñëè mi > n. Ñëåäîâàòåëüíî, ïîñëå i = [logm n + 1] ïðîõîäîâ,âåñü ñïèñîê áóäåò îòñîðòèðîâàí.

43

Page 42: Теория алгоритмов. Котов В.М., Соболевская Е.П

Äëÿ âûïîëíåíèÿ îïåðàöèé îáúåäèíåíèÿ ñåðèé â îñíîâíîé ïàìÿ-òè 2m-êàíàëüíîé ñîðòèðîâêè, íóæíî èñïîëüçîâàòü òå ñòðóêòóðû äàí-íûõ, êîòîðûé ïîçâîëÿþò ýôôåêòèâíî âûïîëíÿòü òàêèå îïåðàöèè, êàêäîáàâëåíèå ýëåìåíòà è ïîèñê ìèíèìàëüíîãî ýëåìåíòà.  êà÷åñòâåòàêèõ ñòðóêòóð äàííûõ ìîãóò áûòü ðàññìîòðåíû ïîèñêîâûå äåðåâüÿèëè ïðèîðèòåòíûå î÷åðåäè, êîòîðûå áóäóò ðàññìîòðåíû ïîçæå. Ýòèñòðóêòóðû äàííûõ ïîçâîëÿþò âûïîëíÿòü òðåáóåìûå îïåðàöèè çà âðå-ìÿ O(log m), ãäå m êîëè÷åñòâî ýëåìåíòîâ â ñòðóêòóðå. Îðãàíèçóåìm çàïèñåé êàíäèäàòîâ, ò. å. íàèìåíüøèõ íà äàííûé ìîìåíò íåâû-áðàííûõ çàïèñåé äëÿ êàæäîé èç m ñåðèé, â âèäå îäíîé èç ïðåäëî-æåííûõ ñòðóêòóð äàííûõ. Çàòåì áóäåì âûïîëíÿòü ïîî÷åðåäíî ñëå-äóþùèå äåéñòâèÿ.

1. Óäàëÿåì ìèíèìàëüíûé ýëåìåíò èç ñòðóêòóðû. Ïðåäïîëîæèì,÷òî ýòîò ýëåìåíò ñîîòâåòñòâîâàë ñåðèè èç ôàéëà fl, 1 ≤ l ≤ m.

2. Äîáàâëÿåì â ñòðóêòóðó ñëåäóþùóþ çàïèñü èç ñåðèè, ñîîòâåò-ñòâóþùåé ôàéëó fl, â êà÷åñòâå çàìåíû óäàëåííîé çàïèñè.

 ýòîì ñëó÷àå ïðîöåññ ñëèÿíèÿ ñåðèé â îñíîâíîé ïàìÿòè ìîæíî âû-ïîëíèòü çà O(log n) øàãîâ íà îäíó çàïèñü.

Ê ñîæàëåíèþ, áåñêîíå÷íîå óâåëè÷åíèå m íå ïðèâîäèò ê óñêî-ðåíèþ îáðàáîòêè. Ïðè÷èíà çàêëþ÷àåòñÿ â òîì, ÷òî ïðè äîñòàòî÷íîáîëüøèõ çíà÷åíèÿõ m âðåìÿ, íåîáõîäèìîå äëÿ ñëèÿíèÿ â îñíîâíîéïàìÿòè (êîòîðîå ðàñòåò ïðîïîðöèîíàëüíî log m), ïðåâîñõîäèò âðåìÿ,òðåáóþùååñÿ äëÿ ñ÷èòûâàíèÿ èëè çàïèñè äàííûõ. Íà÷èíàÿ ñ ýòî-ãî ìîìåíòà äàëüíåéøåå óâåëè÷åíèå m âåäåò, ê óâåëè÷åíèþ ïîëíîãîâðåìåíè îáðàáîòêè äàííûõ, ïîñêîëüêó "óçêèì ìåñòîì"ñèñòåìû ñòà-íîâÿòñÿ âû÷èñëåíèÿ â îñíîâíîé ïàìÿòè.

44

Page 43: Теория алгоритмов. Котов В.М., Соболевская Е.П

à ë à â à 3

Ñòðóêòóðû äàííûõ×àñòî çàäà÷à ìîæåò áûòü ñôîðìóëèðîâàíà íà ÿçûêå îñíîâíûõ

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

 ýòîé ãëàâå ñíà÷àëà ââîäèòñÿ ðÿä ýëåìåíòàðíûõ ñòðóêòóð äàí-íûõ: ñïèñêè, ñòåêè, î÷åðåäè è ïîêàçûâàåòñÿ, êàê ñ ïîìîùüþ ýòèõñòðóêòóð ìîæíî ïðåäñòàâëÿòü ãðàôû è äåðåâüÿ. Çàòåì ââîäÿòñÿ ñïå-öèàëüíûå ñòðóêòóðû äàííûõ: ìíîæåñòâà è ïðèîðèòåòíûå î÷åðåäè.

3.1. Ýëåìåíòàðíûå ñòðóêòóðû äàííûõ3.1.1. Ìàññèâû

Íàèáîëåå èçâåñòíîé è ðàñïðîñòðàíåííîé ñòðóêòóðîé äàííûõ ÿâ-ëÿþòñÿ ìàññèâû. Ýòà ñòðóêòóðà îäíîðîäíà, òàê êàê âñå êîìïîíåíòûèìåþò îäèí è òîò æå òèï è âñå îíè ðàâíîäîñòóïíû. Ìàññèâû îòíî-ñÿòñÿ ê ñòðóêòóðàì äàííûõ ñî ñëó÷àéíûì äîñòóïîì: äëÿ âûäåëåíèÿíåêîòîðîé êîìïîíåíòû ê èìåíè ìàññèâà äîáàâëÿåòñÿ èíäåêñ (çíà÷å-íèå ñïåöèàëüíîãî òèïà), êîòîðûé ìîæíî âû÷èñëèòü, ïîýòîìó ýëåìåí-òû ìàññèâà èíîãäà íàçûâàþò ïåðåìåííûìè ñ èíäåêñàìè.

Ê áàçîâûì îïåðàöèÿì íàä ìàññèâàìè îòíîñÿòñÿ ïîèñê ýëåìåíòà

45

Page 44: Теория алгоритмов. Котов В.М., Соболевская Е.П

è ïîèñê ìàêñèìàëüíîãî (ìèíèìàëüíîãî) ýëåìåíòà.1. Ïîèñê ýëåìåíòà x.

a) â ïðîèçâîëüíîì ìàññèâå òðóäîåìêîñòü ýòîé îïåðàöèè O(n);b) â îòñîðòèðîâàííîì ìàññèâå òðóäîåìêîñòü ýòîé îïåðàöèè

O(log n). Ïîèñê ýëåìåíòà â îòñîðòèðîâàííîì ìàññèâå ìîæ-íî âûïîëíèòü çà âðåìÿ O(log n), åñëè â êà÷åñòâå àëãîðèòìàïîèñêà èñïîëüçóåòñÿ ïîèñê äåëåíèåì ïîïîëàì (äâîè÷íûéïîèñê), ò. ê. â ýòîì ñëó÷àå ìàêñèìàëüíîå ÷èñëî ñðàâíåíèéðàâíî log n (äëÿ ëèíåéíîãî ïîèñêà íàäî â ñðåäíåì n/2 ñðàâ-íåíèé).Ïóñòü L è R îáîçíà÷àþò ëåâûé è ïðàâûé êîíöû èíòåðâàëàïîèñêà ýëåìåíòà x â ìàññèâå a.

Àëãîðèòì äâîè÷íîãî ïîèñêàbeginL := 0;R := n;while (L < R) dom =

[L+R

2

];

if a[m] < x then L = m + 1 else R = m;

end2. Ïîèñê ìàêñèìàëüíîãî (ìèíèìàëüíîãî) ýëåìåíòà.

a) â ïðîèçâîëüíîì ìàññèâå òðóäîåìêîñòü ýòîé îïåðàöèè O(n);b) â îòñîðòèðîâàííîì ìàññèâå òðóäîåìêîñòü ýòîé îïåðàöèè

O(1).

Óïðàæíåíèå. Íàïèñàòü ðåêóððåíòíîå óðàâíåíèå àëãîðèòìà äâîè÷-íîãî ïîèñêà.

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

46

Page 45: Теория алгоритмов. Котов В.М., Соболевская Е.П

3.1.2. Ëèíåéíûå ñïèñêèÑïèñîê êîíå÷íàÿ ïîñëåäîâàòåëüíîñòü ýëåìåíòîâ, ïîðÿäîê êî-

òîðûõ îïðåäåëÿåòñÿ ñ ïîìîùüþ ññûëîê.Ê áàçîâûì îïåðàöèÿì äëÿ ñïèñêà îòíîñÿòñÿ:

1) ïîèñê íåêîòîðîãî çàäàííîãî ýëåìåíòà ñ êëþ÷îì x (òðóäîåìêîñòüO(n));

2) ïîèñê ìàêñèìàëüíîãî (ìèíèìàëüíîãî) ýëåìåíòà (òðóäîåìêîñòüO(n));

3) âêëþ÷åíèå ýëåìåíòà (òðóäîåìêîñòü O(1));

4) èñêëþ÷åíèå ýëåìåíòà (òðóäîåìêîñòü O(1));

5) ôîðìèðîâàíèå ñïèñêà (òðóäîåìêîñòü O(n));

6) ïðîñìîòð ñïèñêà (òðóäîåìêîñòü O(n)).Ñóùåñòâóþò ðàçëè÷íûå ñïîñîáû ðåàëèçàöèè ñïèñêà. Íàèáîëåå

ðàñïðîñòðàíåííûìè ÿâëÿþòñÿ ñëåäóþùèå: ðåàëèçàöèÿ â âèäå äâóõìàññèâîâ è â âèäå ïîñëåäîâàòåëüíî ñâÿçàííûõ êîìïîíåíò.

Ðàññìîòðèì ñíà÷àëà ðåàëèçàöèþ â âèäå äâóõ ìàññèâîâ A è B.Ïóñòü i èíäåêñ ýëåìåíòà â ñïèñêå, òîãäà A[i] ñàì ýëåìåíò, B[i] èíäåêñ ñëåäóþùåãî çà A[i] ýëåìåíòà â ñïèñêå A. Åñëè k èíäåêñïîñëåäíåãî ýëåìåíòà â ñïèñêå, òî B[k] = 0. Êðîìå òîãî, ñóùåñòâóþòäâå ïåðåìåííûå: ns èíäåêñ íà÷àëà çàíÿòûõ êîìïîíåíò è nf èí-äåêñ íà÷àëà ñâîáîäíûõ êîìïîíåíò. Òîãäà ìàññèâ 2, 12, 17 ìîæåò áûòüðåàëèçîâàí ñëåäóþùèì îáðàçîì.

A2 17 12

B3 0 2 5 6 0

* * *

ns = 1nf = 4

1 2 3 4 5 6

1 2 3 4 5 6

47

Page 46: Теория алгоритмов. Котов В.М., Соболевская Е.П

Óïðàæíåíèå. Íàïèñàòü ïðîöåäóðû, ðåàëèçóþùèå áàçîâûå îïåðà-öèè íàä ñïèñêîì, êîòîðûé ìîäåëèðóåòñÿ ñ ïîìîùüþ äâóõ ìàññèâîâ.

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

Òîãäà ìàññèâ 2, 12, 17 áóäåò ðåàëèçîâàí ñëåäóþùèì îáðàçîì.- -2 12 17 nil

Ïðèâåäåì ðåàëèçàöèþ íåêîòîðûõ áàçîâûõ îïåðàöèé äëÿ ðàáîòû ñ ëè-íåéíûì ñïèñêîì, êîòîðûé îïèñàí ñëåäóþùèì îáðàçîì:

uk =↑ el;el=recordkey : data;next : uk;

end;Âêëþ÷åíèå ýëåìåíòà â ñïèñîê

Âêëþ÷åíèå ýëåìåíòà ìîæåò áûòü îñóùåñòâëåíî íåñêîëüêèìè ñïî-ñîáàìè.  ñâÿçè ñ òåì, ÷òî â ñïèñêå âñåãäà èçâåñòíî åãî íà÷àëî, òðà-äèöèîííî íîâûé ýëåìåíò âêëþ÷àþò â íà÷àëî ñïèñêà.

Ïðèâåäåì ïðèìåð ïðîöåäóðû âêëþ÷åíèÿ ýëåìåíòà ñ êëþ÷îì xïîñëå ýëåìåíòà, íà êîòîðûé óêàçûâàåò ññûëêà p.

1 6

4

-

q

p

Ïðîãðàììíàÿ ðåàëèçàöèÿ äàííîé ïðîöåäóðû ìîæåò áûòü ñëåäóþùåé.new(q);q ↑ .key := x;q ↑ .next := p ↑ .next;p ↑ .next := q;

48

Page 47: Теория алгоритмов. Котов В.М., Соболевская Е.П

Òàêàÿ ðåàëèçàöèÿ îïåðàöèè âêëþ÷åíèÿ ãàðàíòèðóåò òðóäîåìêîñòüO(1) (ïðè çàäàííîì p).

Òåïåðü ïðåäïîëîæèì, ÷òî íóæíî âêëþ÷èòü ýëåìåíò ñ êëþ÷îì xïåðåä ýëåìåíòîì, íà êîòîðûé óêàçûâàåò ññûëêà p.

1 6

4

- -

p

q

p

q

1 4

6

-©©©©©©¼

©©©©©©©*

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

new(q);q ↑ .key := p ↑ .key;q ↑ .next := p ↑ .next;p ↑ .key := x;p ↑ .next := q;

Çàìåòèì, ÷òî åñëè èçâåñòíî p, òî ìîæíî âûïîëíèòü âêëþ÷åíèå è ïå-ðåä ýëåìåíòîì çà âðåìÿ O(1).

Ôîðìèðîâàíèå ñïèñêà

Íà÷èíàÿ ñ ïóñòîãî ñïèñêà, ïîñëåäîâàòåëüíî âêëþ÷àåì ýëåìåíòûâ íà÷àëî ñïèñêà.

49

Page 48: Теория алгоритмов. Котов В.М., Соболевская Е.П

head:=nil;while true donew(p);p ↑ .next := head;p ↑ .key := x;head := p;

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

Íèæå ïðèâîäèòñÿ ïðîãðàììíàÿ ðåàëèçàöèÿ îïèñàííîé ïðîöåäó-ðû ôîðìèðîâàíèÿ ñïèñêà.

head:=nil;tail:=nil;while true donew(p);p ↑ .next := nil;p ↑ .key := x;if head = nil then

head := pelse tail ↑ .next := p;tail := p;

Èñêëþ÷åíèå ýëåìåíòà èç ñïèñêà

Ñíà÷àëà ðàññìîòðèì èñêëþ÷åíèå ýëåìåíòà èç ñïèñêà ïîñëå ýëå-ìåíòà, íà êîòîðûé óêàçûâàåò ññûëêà p.

50

Page 49: Теория алгоритмов. Котов В.М., Соболевская Е.П

p

- -

JJ

JJ

JJ

­­

­­

­­

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

q := p ↑ .next;p ↑ .next := q ↑ .next;dispose(q);

Òåïåðü èñêëþ÷èì ýëåìåíò èç ñïèñêà, íà êîòîðûé óêàçûâàåò ññûë-êà p. Äëÿ ýòîãî èñêëþ÷àåì ñëåäóþùèé çà p ýëåìåíò, à ïåðåä ýòèì âñååãî ïîëÿ êîïèðóþòñÿ â ÿ÷åéêó ïàìÿòè, íà êîòîðóþ óêàçûâàåò p.

- - -

p q s

nil

TTTTT

­­

­­

­` ` `

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

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

q := p ↑ .next;if p ↑ .next = s then s := pelsep ↑ .key := q ↑ .key;p ↑ .next := q ↑ .next;

dispose(q);

Îòìåòèì, ÷òî â îáîèõ ñëó÷àÿõ òðóäîåìêîñòü ïðîöåäóðû óäàëåíèÿðàâíà O(1).

51

Page 50: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïîèñê ýëåìåíòà

Ïîèñê ýëåìåíòà x â íåóïîðÿäî÷åííîì ñïèñêå îñóùåñòâëÿåòñÿ ïî-ñëåäîâàòåëüíûì ïðîñìîòðîì ýëåìåíòîâ. Îí çàêàí÷èâàåòñÿ ëèáî ïðèîáíàðóæåíèè òðåáóåìîãî ýëåìåíòà, ëèáî ïðè äîñòèæåíèè êîíöà ñïèñ-êà. Äëÿ òîãî, ÷òîáû îïòèìèçèðîâàòü óñëîâèå îêîí÷àíèÿ ïðîñìîòðà,áóäåì èñïîëüçîâàòü òåõíèêó áàðüåðà (s). Ïåðåìåííàÿ head áóäåò óêà-çûâàòü íà íà÷àëî ñïèñêà.

Íèæå ïðèâîäèòñÿ ïðîãðàììíàÿ ðåàëèçàöèÿ ïðîöåäóðû ïîèñêàýëåìåíòà x.

s ↑ .key := x;w := head;while (w ↑ .key 6= x) do w := w ↑ .next;if w 6= s then w ññûëêà íà ýëåìåíò ñ êëþ÷îì x else ýëåìåíò íå íàéäåí

Äëÿ òîãî, ÷òîáû ïðîöåäóðà îòðàáîòàëà ïðàâèëüíî â ñëó÷àå, êîãäàñïèñîê ïóñòîé, íåîáõîäèìî ïðè ôîðìèðîâàíèè ñïèñêà âûïîëíèòü îïå-ðàòîð: head := s.

Òðóäîåìêîñòü îïèñàííîé âûøå ïðîöåäóðû ïîèñêà åñòü O(n).Óñîâåðøåíñòâîâàòü ìåòîä ïîèñêà ìîæíî, åñëè îñóùåñòâëÿòü ïî-

èñê â óïîðÿäî÷åííîì ñïèñêå.  óïîðÿäî÷åííîì ñïèñêå ýëåìåíòà xìîæíî çàêàí÷èâàòü ïðè îáíàðóæåíèè ïåðâîãî êëþ÷à ñî çíà÷åíèåìáîëüøèì, ÷åì x. Óïîðÿäî÷åííîñòü ñïèñêà äîñòèãàåòñÿ ïóòåì âêëþ-÷åíèÿ íîâîãî ýëåìåíòà â ïîäõîäÿùåå äëÿ íåãî ìåñòî, ÷òî ïîçâîëÿåòïîëíîñòüþ èñïîëüçîâàòü ãèáêîñòü ñòðóêòóðû ñïèñêà. Îäíàêî äàæåóïîðÿäî÷åííûå ëèíåéíûå ñïèñêè íå ïîçâîëÿþò îðãàíèçîâàòü íè÷åãîïîäîáíîãî íà äâîè÷íûé ïîèñê â ìàññèâàõ.

Ê îïåðàöèÿì ðàáîòû ñî ñïèñêàìè òàêæå ìîæíî îòíåñòè:

• Êîíêàòåíàöèþ (ñöåïëåíèå) äâóõ ñïèñêîâ, â ðåçóëüòàòå êîòîðîéîáðàçóåòñÿ åäèíûé ñïèñîê. Ýòó îïåðàöèþ ìîæíî âûïîëíèòü çàâðåìÿ O(1), åñëè èìåþòñÿ àäðåñà ïåðâîãî è ïîñëåäíåãî ýëåìåí-òîâ ñïèñêîâ, ÷òî ïîçâîëèò âûïîëíèòü îïåðàöèþ ñöåïëåíèÿ áåçïîëíîãî ïðîñìîòðà îäíîãî èç ñïèñêîâ äëÿ îïðåäåëåíèÿ àäðåñàåãî ïîñëåäíåãî ýëåìåíòà. Åñëè èçâåñòíû òîëüêî íà÷àëüíûå àä-ðåñà, òî òðóäîåìêîñòü äàííîé îïåðàöèè åñòü O(n + m), ãäå n,m êîëè÷åñòâî ýëåìåíòîâ â ñïèñêàõ.

52

Page 51: Теория алгоритмов. Котов В.М., Соболевская Е.П

• Ðàñöåïëåíèå ñïèñêà. Ýòó îïåðàöèþ ìîæíî âûïîëíèòü çà âðå-ìÿ O(1), åñëè èçâåñòåí óêàçàòåëü íà ýëåìåíò íåïîñðåäñòâåííîïðåäøåñòâóþùèé ìåñòó ðàñöåïëåíèÿ.

3.1.3. ÑòåêèÈíîãäà ïðè ðàáîòå ñî ñïèñêîâîé ñòðóêòóðîé âîçíèêàåò ïîòðåá-

íîñòü âêëþ÷àòü è èñêëþ÷àòü ýëåìåíòû â îïðåäåëåííîì ïîðÿäêå. Åñ-ëè ðåàëèçóåòñÿ ïðèíöèï "ïîñëåäíèé âîøåë ïåðâûé âûøåë", òî òà-êóþ ñïèñêîâóþ ñòðóêòóðó íàçûâàþò ñòåêîì èëè ìàãàçèíîì. Íàïîì-íèì, ÷òî àëãîðèòìû ðåøåíèÿ òàêèõ èçâåñòíûõ çàäà÷, êàê ïðîâåð-êà áàëàíñà ñêîáîê â àðèôìåòè÷åñêîì âûðàæåíèè, âû÷èñëåíèå çíà÷å-íèÿ àðèôìåòè÷åñêîãî âûðàæåíèÿ, èñïîëüçóþò ñòåê.  äàëüíåéøåììû ðàññìîòðèì åùå ðÿä çàäà÷, â êîòîðûõ áóäåò èñïîëüçîâàòüñÿ ýòàñòðóêòóðà äàííûõ.

Åñëè çàðàíåå èçâåñòíî ìàêñèìàëüíîå êîëè÷åñòâî ýëåìåíòîâ (l),îäíîâðåìåííî õðàíÿùèõñÿ â ñòåêå, òî öåëåñîîáðàçíî ìîäåëèðîâàòüñòåê íà ìàññèâå ïîñòîÿííîé äëèíû. Ïóñòü ïåðåìåííàÿ top ñîäåðæèòèíäåêñ ïîñëåäíåãî âêëþ÷åííîãî â ñòåê ýëåìåíòà (ñíà÷àëà top = 0),òîãäà ïðîöåäóðû âêëþ÷åíèÿ è èñêëþ÷åíèÿ ýëåìåíòà èç ñòåêà ðåàëè-çóþòñÿ ñëåäóþùèì îáðàçîì:

Âêëþ÷åíèå ýëåìåíòà â ñòåê,ðåàëèçîâàííûé â âèäå îäíîìåðíîãî ìàññèâà

if top > l then íåò ìåñòà else inc(top); A[top] := x;

Èñêëþ÷åíèå ýëåìåíòà èç ñòåêà,ðåàëèçîâàííîãî â âèäå îäíîìåðíîãî ìàññèâà

if top < 1 then ñòåê ïóñò else x := A[top]; dec(top);

 ñëó÷àå, êîãäà êîëè÷åñòâî ýëåìåíòîâ çàðàíåå íåèçâåñòíî, ñòåêìîæåò áûòü ðåàëèçîâàí â âèäå ñïèñêîâîé ñòðóêòóðû:

uk =↑ el;el=recordval : data;next : uk;

end;

53

Page 52: Теория алгоритмов. Котов В.М., Соболевская Е.П

Òîãäà ïåðåìåííàÿ top áóäåò ñîäåðæàòü àäðåñ ïîñëåäíåãî âêëþ÷åííîãîâ ñòåê ýëåìåíòà (ïåðâîíà÷àëüíî top = nil), à ïðîöåäóðû âêëþ÷åíèÿè èñêëþ÷åíèÿ ýëåìåíòà áóäóò èìåòü ñëåäóþùèé âèä.

Âêëþ÷åíèå ýëåìåíòà â ñòåê,ðåàëèçîâàííûé â âèäå ñïèñêîâîé ñòðóêòóðû

new(dop);dop ↑ .val := x;dop ↑ .next := top;top := dop;

Èñêëþ÷åíèå ýëåìåíòà èç ñòåêà,ðåàëèçîâàííîãî â âèäå ñïèñêîâîé ñòðóêòóðû

if top = nil then ñòåê ïóñò elsex := top ↑ .val;dop := top;top := top ↑ .next;dispose(dop);

Òðóäîåìêîñòü ïðîöåäóð âêëþ÷åíèÿ è èñêëþ÷åíèÿ ýëåìåíòà èçñòåêà åñòü O(1).

3.1.4. Î÷åðåäèÎ÷åðåäü ÿâëÿåòñÿ åùå îäíèì ñïåöèàëüíûì âèäîì ñïèñêà, êîãäà

ýëåìåíòû âñåãäà âêëþ÷àþòñÿ â êîíåö ñïèñêà, à èñêëþ÷àþòñÿ èç íà-÷àëà ñïèñêà, ò. å. ðåàëèçóåòñÿ ïðèíöèï "ïåðâûé âîøåë ïåðâûé âû-øåë".

Åñëè ìàêñèìàëüíîå êîëè÷åñòâî ýëåìåíòîâ, îäíîâðåìåííî õðàíÿ-ùèõñÿ â î÷åðåäè, íå ïðåâîñõîäèò l, òî ìîæíî ñìîäåëèðîâàòü öèêëè-÷åñêóþ î÷åðåäü íà ìàññèâå ïîñòîÿííîé äëèíû l.

Ñ î÷åðåäüþ ñâÿæåì äâå ïåðåìåííûå head è tail, îïðåäåëÿþùèåèíäåêñû ïåðâîãî è ïîñëåäíåãî ýëåìåíòîâ î÷åðåäè (ñíà÷àëà head = 1è tail = 0) è ïåðåìåííóþ áóëåâñêîãî òèïà empty, êîòîðàÿ ðàâíà trueâ ñëó÷àå, êîãäà î÷åðåäü ïóñòà.

54

Page 53: Теория алгоритмов. Котов В.М., Соболевская Е.П

Âêëþ÷åíèå ýëåìåíòà â öèêëè÷åñêóþ î÷åðåäü,ðåàëèçîâàííóþ â âèäå îäíîìåðíîãî ìàññèâà

begininc(tail);if tail = l + 1 then tail := 1;A[tail] := x;if empty then empty := false;end.

Èñêëþ÷åíèå ýëåìåíòà èç öèêëè÷åñêîé î÷åðåäè,ðåàëèçîâàííîé â âèäå îäíîìåðíîãî ìàññèâà

beginif empty then î÷åðåäü ïóñòà else x := A[head];if head = tail then empty := true;inc(head);if head = l + 1 then head := 1;

end.

Åñëè êîëè÷åñòâî ýëåìåíòîâ î÷åðåäè çàðàíåå íå èçâåñòíî, òî äëÿðåàëèçàöèè î÷åðåäè èñïîëüçóåòñÿ ñïèñêîâàÿ ñòðóêòóðà.  ýòîì ñëó-÷àå ïåðåìåííàÿ head ñîäåðæèò àäðåñ ïåðâîãî ýëåìåíòà î÷åðåäè, à tail ïîñëåäíåãî ýëåìåíòà î÷åðåäè (ïåðâîíà÷àëüíî head, tail = nil).

Âêëþ÷åíèå ýëåìåíòà â î÷åðåäü,ðåàëèçîâàííóþ â âèäå ñïèñêîâîé ñòðóêòóðû

beginnew(dop);dop ↑ .val := x;dop ↑ .next := nil;if head <> nil then tail ↑ .next := dop

else head := dop;tail := dop;end.

55

Page 54: Теория алгоритмов. Котов В.М., Соболевская Е.П

Èñêëþ÷åíèå ýëåìåíòà èç î÷åðåäè,ðåàëèçîâàííîé â âèäå ñïèñêîâîé ñòðóêòóðû

beginif head = nil then

î÷åðåäü ïóñòà elsex := head ↑ .val;dop := head;head := head ↑ .next;dispose(dop);if head = nil then

tail := nil;end.

Òðóäîåìêîñòü âñåõ îïèñàííûõ âûøå ïðîöåäóð åñòü O(1). äàëüíåéøåì ìû ïîêàæåì, ÷òî ñòðóêòóðà äàííûõ î÷åðåäü èñ-

ïîëüçóåòñÿ âî ìíîãèõ àëãîðèòìàõ íà ãðàôàõ. Ñåé÷àñ ïðîèëëþñòðè-ðóåì èñïîëüçîâàíèå ñòðóêòóðû äàííûõ î÷åðåäü íà ïðèìåðå ëåêñèêî-ãðàôè÷åñêîé ñîðòèðîâêè.Îïðåäåëåíèå 3.1. Ïóñòü S íåêîòîðîå ìíîæåñòâî íà êîòîðîìçàäàí ≺-ëèíåéíûé ïîðÿäîê. Ëåêñèêîãðàôè÷åñêèì ïîðÿäêîì íà ìíî-æåñòâå S íàçûâàåòñÿ òàêîå ïðîäîëæåíèå îòíîøåíèÿ ≺ íà êîðòå-æè (ñïèñêè) ýëåìåíòîâ èç S, ïðè êîòîðîì

(s1, s2, . . . , sp) ≺ (t1, t2, . . . , tq)

îçíà÷àåò âûïîëíåíèå îäíîãî èç óñëîâèé:• ñóùåñòâóåò òàêîå öåëîå j, ÷òî sj ≺ tj è äëÿ âñåõ i < j ñïðà-âåäëèâî si = ti;

• p ≤ q è si = ti ïðè 1 ≤ i ≤ p.Î÷åâèäíî, ÷òî ëþáîå öåëîå ÷èñëî ìîæíî ñ÷èòàòü k-÷ëåííûì êîðòå-æåì öèôð îò 0 äî n − 1, ãäå n îñíîâàíèå ñèñòåìû ñ÷èñëåíèÿ, âêîòîðîé ðàññìàòðèâàþòñÿ öèôðû.

Ðàññìîòðèì ñíà÷àëà ñîðòèðîâêó êîðòåæåé îäèíàêîâîé äëèíû k.Áóäåì ïðåäïîëàãàòü, ÷òî ýëåìåíòû ýòèõ êîðòåæåé çàêëþ÷åíû â èí-òåðâàëå îò ′a′ äî ′z′.

56

Page 55: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

1. Ñîçäàäèì èñõîäíóþ î÷åðåäü, â êîòîðóþ çàíåñåì âñå ðàññìàòðè-âàåìûå êîðòåæè: ch : array[1..n] of string.

2. Îðãàíèçóåì êîëè÷åñòâî î÷åðåäåé, ðàâíîå êîëè÷åñòâó ìàëåíüêèõëàòèíñêèõ áóêâ â àëôàâèòå. Êàæäóþ òàêóþ î÷åðåäü áóäåì íà-çûâàòü ÷åðïàêîì:

mas : array[′a′..′z′] of TOcher.

3. Êîëè÷åñòâî èòåðàöèé ðàâíî äëèíå êîðòåæåé (ïðåäïîëîæèì, ÷òîäëèíà êîðòåæà ðàâíà k).

• Íà i-é èòåðàöèè èäåò ñîðòèðîâêà ïî k − i + 1 êîìïîíåíòåêîðòåæåé, ò. å. íåêîòîðûé êîðòåæ ch[j] óäàëÿåòñÿ èç èñõîä-íîé î÷åðåäè è äîáàâëÿåòñÿ â î÷åðåäü

mas[ch[j][k − i + 1]].

• Ïîñëå âûïîëíåíèÿ i-é èòåðàöèè â èñõîäíîé î÷åðåäè íàõî-äèòñÿ ïîñëåäîâàòåëüíîñòü êîðòåæåé, ïîëó÷åííàÿ â ðåçóëü-òàòå "ïåðåïèñûâàíèÿ"(óäàëåíèÿ è äîáàâëåíèÿ) ýëåìåíòîââñåõ íå ïóñòûõ î÷åðåäåé, íà÷èíàÿ ñ î÷åðåäè, àäðåñ íà÷àëàêîòîðîé íàõîäèòñÿ â ïåðåìåííîé mas[′a′], è çàêàí÷èâàÿ -mas[′z′].

Ïîñòðîèì ðåêóððåíòíîå óðàâíåíèå äëÿ îïèñàííîãî àëãîðèòìà.Ïóñòü m êîëè÷åñòâî îðãàíèçîâàííûõ î÷åðåäåé, òîãäà òðóäîåìêîñòüñîðòèðîâêè êîðòåæåé ïî íåêîòîðîé êîìïîíåíòå åñòü

O(n + m)

(êîëè÷åñòâî êîðòåæåé n è èõ ìîæíî ðàñïðåäåëèòü ïî î÷åðåäÿì çàâðåìÿ O(n); äëÿ ñöåïëåíèÿ m î÷åðåäåé òðåáóåòñÿ âðåìÿ O(m)). Òîãäàðåêóððåíòíîå óðàâíåíèå áóäåò èìåòü âèä:

T (k) = (n + m) + T (k − 1).

Òðóäîåìêîñòü îïèñàííîãî âûøå àëãîðèòìà ëåêñèêîãðàôè÷åñêîéñîðòèðîâêè êîðòåæåé îäèíàêîâîé äëèíû åñòü O(k · (n + m)).

Ïðèâåäåì ïðîãðàììíóþ ðåàëèçàöèþ àëãîðèòìà ñîðòèðîâêè âû-÷åðïûâàíèåì.

57

Page 56: Теория алгоритмов. Котов В.М., Соболевская Е.П

Àëãîðèòì ñîðòèðîâêè âû÷åðïûâàíèåìêîðòåæåé îäèíàêîâîé äëèíû

var i, j, k, l:byte; z:char;begink := length(ch[1]);for z :=′ a′ to ′z′ domas[z].con := nil;mas[z].nach := nil;

for i := k downto 1 dofor j := 1 to n do mas[ch[j][i]].in_ocher(ch[j]);l := 1;for z :=′ a′ to ′z′ dowhile mas[z].nach 6= nil do ch[l] := mas[z].out_ocher;inc(l);

end.

Òåïåðü ïåðåéäåì ê ðàññìîòðåíèþ àëãîðèòìà ñîðòèðîâêè êîðòå-æåé ðàçíîé äëèíû. Ñíà÷àëà ñîðòèðóåìûå êîðòåæè ðàñïîëàãàþòñÿ âïîðÿäêå óáûâàíèÿ äëèí. Ïóñòü lmax äëèíà ñàìîãî äëèííîãî êîð-òåæà, òîãäà ñîðòèðîâêà âû÷åðïûâàíèåì ïðîèçâîäèòñÿ lmax ðàç. Íàíà÷àëüíîì ýòàïå â èñõîäíóþ î÷åðåäü äëÿ ñîðòèðîâêè ïîìåùàþòñÿòîëüêî êîðòåæè äëèíû lmax, è íà ïåðâîì ýòàïå äëÿ ñîðòèðîâêè èñ-ïîëüçóåòñÿ òîëüêî êîìïîíåíòà lmax ðàññìàòðèâàåìûõ êîðòåæåé. Ïî-ñëå ýòîãî â èñõîäíóþ î÷åðåäü çàíîñÿòñÿ ñíà÷àëà âñå êîðòåæè äëèíûlmax − 1, à çàòåì äîáàâëÿþòñÿ ýëåìåíòû íåïóñòûõ ñãåíåðèðîâàííûõî÷åðåäåé, íà÷èíàÿ ñ î÷åðåäè, àäðåñ íà÷àëà êîòîðîé íàõîäèòñÿ â ïåðå-ìåííîé mas[′a′], è çàêàí÷èâàÿ - mas[′z′]. Íà ñëåäóþùèõ ýòàïàõ ïðîèñ-õîäèò ñîðòèðîâêà ñîîòâåòñòâóþùåé êîìïîíåíòû lmax− 1, lmax− 2, . . .àíàëîãè÷íûì îáðàçîì.

Îöåíèì òðóäîåìêîñòü àëãîðèòìà ñîðòèðîâêè êîðòåæåé ðàçíîéäëèíû. Ïóñòü li äëèíà i-ãî êîðòåæà, òîãäà îïèñàííûé âûøå àëãî-ðèòì óïîðÿäî÷èâàåò êîðòåæè ðàçíîé äëèíû çà âðåìÿ O(l∗ + m), ãäål∗ =

∑ni=1 li.

58

Page 57: Теория алгоритмов. Котов В.М., Соболевская Е.П

3.2. Ãðàôû. Îñíîâíûå îïðåäåëåíèÿÎðèåíòèðîâàííûé ãðàô (èëè êîðî÷å îðãðàô) G = (V,U) ñîñòîèò

èç íå ïóñòîãî ìíîæåñòâà óçëîâ V è ìíîæåñòâà óïîðÿäî÷åííûõ ïàðóçëîâ (âåðøèí) U. Óïîðÿäî÷åííàÿ ïàðà óçëîâ (v, w) íàçûâàåòñÿ äóãîé(v íà÷àëî è w êîíåö äóãè).  äàëüíåéøåì áóäåì ïðåäïîëàãàòü,÷òî |V | = n, |E|, |U | = m.

Íåîðèåíòèðîâàííûé ãðàô (èëè êîðî÷å ãðàô) G = (V,E) ñîñòîèòèç íå ïóñòîãî ìíîæåñòâà óçëîâ V è ìíîæåñòâà ïàð óçëîâ (âåðøèí) E.Íåóïîðÿäî÷åííàÿ ïàðà óçëîâ (v, w) íàçûâàåòñÿ ðåáðîì (u 6= v).

Åñëè (v, w) ðåáðî (äóãà), òî ãîâîðÿò, ÷òî ýòî ðåáðî (äóãà) èíöè-äåíòíî âåðøèíàì v è w, à ýòè âåðøèíû ñìåæíû ìåæäó ñîáîé. Ñòå-ïåíü âåðøèíû äëÿ ãðàôà îïðåäåëÿåòñÿ êàê ÷èñëî ðåáåð èíöèäåíòíûõåé. Äëÿ îðãðàôà îïðåäåëÿþò ïîëóñòåïåíü çàõîäà (÷èñëî çàõîäÿùèõâ âåðøèíó äóã) è ïîëóñòåïåíü èñõîäà (÷èñëî âûõîäÿùèõ äóã).

Ïóòåì â îðãðàôå G = (V, U) íàçûâàåòñÿ ïîñëåäîâàòåëüíîñòüâåðøèí âèäà v1, v2, . . . , vk, ãäå (vi, vi+1) ∈ U, i = 1, . . . , k − 1.

Öåïüþ (ìàðøðóòîì) â ãðàôå G = (V,E) íàçûâàåòñÿ ïîñëåäîâà-òåëüíîñòü âåðøèí âèäà v1, v2, . . . , vk, ãäå (vi, vi+1) ∈ E, i = 1, . . . , k−1.

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

Ýëåìåíòàðíàÿ öåïü â ãðàôå ýòî òàêàÿ öåïü, â êîòîðîé êàæäàÿâåðøèíà âñòðå÷àåòñÿ íå áîëåå îäíîãî ðàçà.

Ýëåìåíòàðíûé êîíòóð â îðãðàôå ýòî çàìêíóòûé ïóòü, â êî-òîðîì êàæäàÿ âåðøèíà âñòðå÷àåòñÿ íå áîëåå îäíîãî ðàçà (çà èñêëþ-÷åíèåì íà÷àëüíîé è êîíå÷íîé âåðøèíû êîíòóðà).

Ýëåìåíòàðíûé öèêë â ãðàôå ýòî çàìêíóòàÿ öåïü, â êîòîðîéêàæäàÿ âåðøèíà âñòðå÷àåòñÿ íå áîëåå îäíîãî ðàçà (çà èñêëþ÷åíèåìíà÷àëüíîé è êîíå÷íîé âåðøèíû öèêëà).

Ãàìèëüòîíîâ êîíòóð â îðãðàôå ýòî òàêîé çàìêíóòûé ïóòü,êîòîðûé ïðîõîäèò ÷åðåç êàæäóþ âåðøèíó îðãðàôà îäèí è òîëüêîîäèí ðàç (çà èñêëþ÷åíèåì íà÷àëüíîé è êîíå÷íîé âåðøèíû êîíòóðà).

Ãàìèëüòîíîâ öèêë â ãðàôå ýòî òàêàÿ çàìêíóòàÿ öåïü, êîòîðàÿïðîõîäèò ÷åðåç êàæäóþ âåðøèíó ãðàôà îäèí è òîëüêî îäèí ðàç (çàèñêëþ÷åíèåì íà÷àëüíîé è êîíå÷íîé âåðøèíû öèêëà).

Ïðîñòîé ïóòü â îðãðàôå ýòî òàêîé ïóòü, â êîòîðîì êàæäàÿäóãà âñòðå÷àåòñÿ íå áîëåå îäíîãî ðàçà.

Ïðîñòàÿ öåïü â ãðàôå ýòî òàêàÿ öåïü, â êîòîðîé êàæäîå ðåáðîâñòðå÷àåòñÿ íå áîëåå îäíîãî ðàçà.

59

Page 58: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ýéëåðîâ êîíòóð â îðãðàôå ýòî òàêîé çàìêíóòûé ïóòü, êîòîðûéïðîõîäèò ðîâíî îäèí ðàç ïî êàæäîé äóãå (çà èñêëþ÷åíèåì íà÷àëüíîéè êîíå÷íîé âåðøèíû êîíòóðà).

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

Ïðåäïîëîæèì, ÷òî çàäàí îðãðàô G = (V, U) (ãðàô G = (V,E))êàæäîé äóãå (ðåáðó) (v, w) êîòîðîãî ïðèïèñàíà íåêîòîðàÿ ñòîèìîñòüc(v, w). Òàêîé îðãðàô (ãðàô) áóäåì íàçûâàòü âçâåøåííûì.

Êðàò÷àéøèé ïóòü âî âçâåøåííîì îðãðàôå ýòî òàêîé ïóòü,ñóììàðíàÿ ñòîèìîñòü äóã êîòîðîãî ìèíèìàëüíà.

Êðàò÷àéøàÿ öåïü âî âçâåøåííîì ãðàôå ýòî òàêàÿ öåïü, ñóì-ìàðíàÿ ñòîèìîñòü ðåáåð êîòîðîãî ìèíèìàëüíà.

Îðãðàô íàçûâàåòñÿ ñèëüíî ñâÿçíûì, åñëè äëÿ ëþáîé åãî âåðøè-íû ñóùåñòâóåò îðèåíòèðîâàííûé ïóòü âî âñå îñòàâøèåñÿ âåðøèíû. ïðîòèâíîì ñëó÷àå, îðèåíòèðîâàííûé ãðàô íàçûâàåòñÿ íåñâÿçíûì.Åñëè v íåêîòîðàÿ âåðøèíà ãðàôà, òî ìàêñèìàëüíîå êîëè÷åñòâîâåðøèí, â êîòîðûå ñóùåñòâóåò îðèåíòèðîâàííûé ïóòü èç v, âìåñòåñ èíöèäåíòíûìè èì äóãàìè ïîðîæäàþò ñèëüíî ñâÿçíóþ êîìïîíåíòóîðãðàôà.

Ãðàô íàçûâàåòñÿ ñâÿçíûì, åñëè äëÿ ëþáîé ïàðû âåðøèí ñóùå-ñòâóåò öåïü, èõ ñîåäèíÿþùàÿ.  ïðîòèâíîì ñëó÷àå, ãðàô íàçûâàåòñÿíåñâÿçíûì. Åñëè v íåêîòîðàÿ âåðøèíà ãðàôà, òî ìàêñèìàëüíîå êî-ëè÷åñòâî âåðøèí, â êîòîðûå ñóùåñòâóåò ìàðøðóò èç v, âìåñòå ñ ðåá-ðàìè èíöèäåíòíûìè ýòèì âåðøèíàì ïîðîæäàþò êîìïîíåíòó ñâÿç-íîñòè ãðàôà.

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

×àñòè÷íûì ãðàôîì ãðàôà G = (V, E) íàçûâàåòñÿ òàêîé ïðîèç-âîëüíûé ãðàô G′ = (V ′, E′), ÷òî V ′ ⊆ V è E′ ⊆ E. Ïîäãðàô ãðàôàG = (V, E) ýòî ÷àñòè÷íûé ïîäãðàô G′ = (V ′, E′), êîòîðûé óäîâëå-òâîðÿåò äîïîëíèòåëüíîìó óñëîâèþ ∀v, w ∈ V è (v, w) ∈ E ñëåäóåò, ÷òî(v, w) ∈ E′. Àíàëîãè÷íî îïðåäåëÿþòñÿ ÷àñòè÷íûé îðãðàô è ïîäãðàôîðãðàôà.

60

Page 59: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðèâåäåì îòëè÷èÿ â îñíîâíûõ ïîíÿòèÿõ äëÿ ãðàôà è îðãðàôà.îðãðàô G = (V, U) ãðàô G = (V, E)

äóãà ðåáðîñòåïåíü âåðøèíû ïîëóñòåïåíü çàõîäà (èñõîäà)ïóòü öåïü (ìàðøðóò)ýëåìåíòàðíûé ïóòü ýëåìåíòàðíàÿ öåïüýëåìåíòàðíûé êîíòóð ýëåìåíòàðíûé öèêëãàìèëüòîíîâ êîíòóð ãàìèëüòîíîâ öèêëïðîñòîé ïóòü ïðîñòîé öèêëýéëåðîâ êîíòóð ýéëåðîâ öèêëêðàò÷àéøèé ïóòü êðàò÷àéøàÿ öåïüñèëüíî ñâÿçíûé îðãðàô ñâÿçíûé ãðàô

Íà ïðàêòèêå ãðàô ÷àñòî èçîáðàæàþò ñëåäóþùèì îáðàçîì: êàæ-äîìó óçëó ñòàâèòñÿ â ñîîòâåòñòâèè òî÷êà ïëîñêîñòè, à äëÿ èçîáðàæå-íèÿ ðåáåð (äóã) èñïîëüçóþò ëèíèè (íàïðàâëåííûå ëèíèè), ñîåäèíÿ-þùèå ñîîòâåòñòâóþùèå òî÷êè. Íà ðèñ. 3.1 èçîáðàæåí îðãðàô G′ =(V ′, E′), ãäå

V ′ = 1, 2, 3, 4, 5, 6,

E′ = (1, 2), (1, 3), (3, 2), (3, 4), (5, 4), (5, 6), (6, 5).

±°²¯

±°²¯

±°²¯

±°²¯ ±°

²¯

±°²¯

ZZZ~

6©©¼

1

2

3

4

5

6

AAAK½

½½>

½½

½½> ¢¢¢

AAU

¯¯

Ðèñ. 3.1. Îðèåíòèðîâàííûé ãðàô

Ñóùåñòâóþò ðàçëè÷íûå ñïîñîáû çàäàíèÿ ãðàôà â ïàìÿòè. Ðàñ-ñìîòðèì íåêîòîðûå èç íèõ.

Îäíèì èç êëàññè÷åñêèõ ñïîñîáîâ çàäàíèÿ ãðàôà ÿâëÿåòñÿ ìàò-ðèöà ñìåæíîñòè A ðàçìåðà n×n, ãäå avw = 1, åñëè ñóùåñòâóåò ðåáðî(äóãà), èäóùåå èç âåðøèíû v â w, è avw = 0 â ïðîòèâíîì ñëó÷àå. Òàê,

61

Page 60: Теория алгоритмов. Котов В.М., Соболевская Е.П

äëÿ îðãðàôà, èçîáðàæåííîãî íà ðèñ. 3.1, ìàòðèöà ñìåæíîñòè áóäåòèìåòü âèä:

1 2 3 4 5 61| 0 1 1 0 0 02| 0 0 0 0 0 03| 0 1 0 1 0 04| 0 0 0 0 0 05| 0 0 0 1 0 16| 0 0 0 0 1 0

Ïðåèìóùåñòâî òàêîãî ïðåäñòàâëåíèÿ çàêëþ÷àåòñÿ â òîì, ÷òî çà O(1)ìîæíî äàòü îòâåò íà âîïðîñ "ñóùåñòâóåò ëè ðåáðî (äóãà) (v, w)?".Íåäîñòàòîê çàêëþ÷àåòñÿ â òîì, ÷òî îáúåì òðåáóåìîé ïàìÿòè âíå çà-âèñèìîñòè îò êîëè÷åñòâà ðåáåð (äóã) ñîñòàâëÿåò n2.

Äðóãèì òðàäèöèîííûì ñïîñîáîì ïðåäñòàâëåíèÿ ãðàôà ñëóæèòìàòðèöà èíöèäåíòíîñòè. Ýòî ìàòðèöà A ñ n ñòðîêàìè, ñîîòâåò-ñòâóþùèì âåðøèíàì, è m ñòîëáöàìè, ñîîòâåòñòâóþùèì ðåáðàì. Äëÿîðãðàôà ñòîëáåö, ñîîòâåòñòâóþùèé äóãå (v, w), ñîäåðæèò 1 â ñòðîêå,ñîîòâåòñòâóþùåé âåðøèíå v, ñîäåðæèò −1 â ñòðîêå, ñîîòâåòñòâóþùåéâåðøèíå w, è íóëè âî âñåõ îñòàëüíûõ ñòðîêàõ (ïåòëþ óäîáíî ïðåä-ñòàâëÿòü äðóãèì çíà÷åíèåì, íàïðèìåð, 2). Òàê, äëÿ îðãðàôà, èçîáðà-æåííîãî íà ðèñ.3.1, ìàòðèöà èíöèäåíòíîñòè áóäåò èìåòü âèä:

(1, 2) (1, 3) (3, 2) (3, 4) (5, 4) (5, 6) (6, 5)

1| 1 1 0 0 0 0 02| −1 0 −1 0 0 0 03| 0 −1 1 1 0 0 04| 0 0 0 −1 −1 0 05| 0 0 0 0 1 1 −16| 0 0 0 0 0 −1 1

Ýòîò ñïîñîá çàäàíèÿ ãðàôà èìååò ðÿä íåäîñòàòêîâ. Âî-ïåðâûõ,òðåáóåò n ·m ÿ÷ååê ïàìÿòè, êîòîðûå â ñâîåì áîëüøèíñòâå çàïîëíåíûíóëÿìè. Âî-âòîðûõ, îòâåòû íà âîïðîñû: "ñóùåñòâóåò ëè äóãà (v, w)?","ê êàêèì âåðøèíàì âåäóò ðåáðà èç âåðøèíû v?"òðåáóþò â õóäøåìñëó÷àå ïåðåáîðà âñåõ ñòîëáöîâ ìàòðèöû (m øàãîâ).

Áîëåå ýêîíîìíûì â îòíîøåíèè ïàìÿòè, îñîáåííî, êîãäà m ¿ n2,íàïðèìåð, m = O(n) (÷èòàåòñÿ: m íàìíîãî ìåíüøå n2), ÿâëÿåòñÿ ìå-òîä ïðåäñòàâëåíèÿ ãðàôà ñ ïîìîùüþ ñïèñêà ïàð, ñîîòâåòñòâóþùèìðåáðàì: ïàðà v, w ñîîòâåòñòâóåò ðåáðó (v, w).

1 1 3 3 5 5 62 3 2 4 4 6 5

62

Page 61: Теория алгоритмов. Котов В.М., Соболевская Е.П

Îáúåì ïàìÿòè â ýòîì ñëó÷àå ñîñòàâëÿåò O(m), íî íåóäîáñòâî çàêëþ-÷àåòñÿ â áîëüøîì êîëè÷åñòâå øàãîâ (â õóäøåì ñëó÷àå ïîðÿäêà m),íåîáõîäèìîì äëÿ ïîëó÷åíèÿ ìíîæåñòâà âåðøèí, ê êîòîðûì âåäóò ðåá-ðà èç äàííîé âåðøèíû.

Âî ìíîãèõ ñèòóàöèÿõ íàèáîëåå ïðèåìëåìûì ñïîñîáîì çàäàíèÿãðàôà ÿâëÿåòñÿ ñòðóêòóðà äàííûõ, êîòîðóþ ÷àñòî íàçûâàþò ñïèñêà-ìè ñìåæíîñòè.

1

2

3

4

5

6

- -

- -

- -

-

nil

nil

2 3 nil

2 4 nil

4 6 nil

5 nil

Äàííàÿ ñòðóêòóðà ìîæåò áûòü îïèñàíà ñëåäóþùèì îáðàçîì.

typeuk = ↑ el;el = recordkey : byte;next : uk;

end;var graf : array [1..n] of uk;

Ìàññèâ graf ñòàòè÷åñêèé ìàññèâ, i-é ýëåìåíò êîòîðîãî ÿâëÿåòñÿóêàçàòåëåì íà íà÷àëî ëèíåéíîãî ñïèñêà âåðøèí, ñìåæíûõ ñ i-é âåð-øèíîé; åñëè èç âåðøèíû i íåò âûõîäÿùèõ äóã, òî graf [i] = nil.

Òàêèì îáðàçîì, ãðàô ïðåäñòàâëåí â âèäå n ñïèñêîâ ñìåæíîñòåé,ïî îäíîìó äëÿ êàæäîé âåðøèíû. Îáúåì ïàìÿòè â ýòîì ñëó÷àå O(m+n).

3.3. Äåðåâüÿ. Îñíîâíûå îïðåäåëåíèÿÎïðåäåëåíèå 3.2. Äåðåâîì íàçûâàåòñÿ ñâÿçíûé ãðàô áåç öèêëîâ.

63

Page 62: Теория алгоритмов. Котов В.М., Соболевская Е.П

Íà ïðàêòèêå ÷àñòî ïðèõîäèòñÿ èìåòü äåëî ñî ñïåöèàëüíûìè âè-äàìè äåðåâüåâ. Íàèáîëåå ðàñïðîñòðàíåííûì ñðåäè íèõ ÿâëÿåòñÿ êîð-íåâîå äåðåâî.Îïðåäåëåíèå 3.3. Êîðíåâîå äåðåâî ýòî îðèåíòèðîâàííûé ãðàô,êîòîðûé óäîâëåòâîðÿåò ñëåäóþùèì óñëîâèÿì:

• èìååòñÿ â òî÷íîñòè îäíà âåðøèíà, â êîòîðóþ íå âõîäèò íèîäíà äóãà (êîðåíü);

• â êàæäóþ âåðøèíó, êðîìå êîðíÿ, âõîäèò ðîâíî îäíà äóãà;

• èç êîðíÿ èìååòñÿ ïóòü ê êàæäîé âåðøèíå.

Åñëè â êîðíåâîì äåðåâå ñóùåñòâóåò ïóòü èç âåðøèíû v â âåðøèíów, òî v íàçûâàþò ïðåäêîì âåðøèíû w, à w ïîòîìêîì âåðøèíû v.

Åñëè âåðøèíà íå èìååò ïîòîìêîâ, òî åå íàçûâàþò òåðìèíàëüíîéâåðøèíîé, èëè ëèñòîì. Íåòåðìèíàëüíóþ âåðøèíó íàçûâàþò âíóò-ðåííåé.

Åñëè (v, w) äóãà êîðíåâîãî äåðåâà, òî v íàçûâàåòñÿ îòöîì (íåïî-ñðåäñòâåííûì ïðåäêîì) âåðøèíû w, à w íàçûâàåòñÿ ñûíîì (íåïî-ñðåäñòâåííûì ïîòîìêîì) âåðøèíû v.

Âåðøèíà v êîðíåâîãî äåðåâà T è åå ïîòîìêè âìåñòå îáðàçóþòïîääåðåâî êîðíåâîãî äåðåâà T ñ êîðíåì â âåðøèíå v.

Ãëóáèíîé âåðøèíû v â êîðíåâîì äåðåâå íàçûâàåòñÿ äëèíà ïóòèèç êîðíÿ â ýòó âåðøèíó.

Âûñîòîé âåðøèíû v â êîðíåâîì äåðåâå íàçûâàåòñÿ äëèíà ñàìî-ãî äëèííîãî ïóòè èç v äî îäíîãî èç åãî ïîòîìêîâ (ëèñòà). Âûñîòîéêîðíåâîãî äåðåâà íàçûâàåòñÿ âûñîòà åãî êîðíÿ.

Óðîâíåì âåðøèíû v íàçûâàåòñÿ ðàçíîñòü âûñîòû êîðíåâîãî äå-ðåâà è ãëóáèíû âåðøèíû v.

Óïîðÿäî÷åííîå êîðíåâîå äåðåâî ýòî êîðíåâîå äåðåâî, ó êîòîðîãîäóãè, âûõîäÿùèå èç êàæäîé âåðøèíû, óïîðÿäî÷åíû (â äàëüíåéøåìáóäåì ñ÷èòàòü, ÷òî îíè óïîðÿäî÷åíû ñëåâà íàïðàâî).

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

64

Page 63: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

1

2 3 4

6 5 7

´+ ?HHHj

½½= BBN ¢¢®

Ðèñ. 3.2. Êîðíåâîå äåðåâî

i- âåðøèíà 1 2 3 4 5 6 7p[i] - îòåö 0 1 1 1 2 2 4

Îñîáåííî âàæíóþ ðîëü ñðåäè êîðíåâûõ äåðåâüåâ èãðàþò áèíàð-íûå äåðåâüÿ.Îïðåäåëåíèå 3.4. Áèíàðíîå äåðåâî ýòî óïîðÿäî÷åííîå êîðíåâîåäåðåâî, ó êàæäîé âåðøèíû êîòîðîãî èìååòñÿ íå áîëåå äâóõ ñûíîâåé.

 áèíàðíîì äåðåâå êàæäûé ñûí ïðîèçâîëüíîé âåðøèíû îïðåäå-ëÿåòñÿ ëèáî êàê ëåâûé ñûí, ëèáî êàê ïðàâûé ñûí.

Ïîääåðåâî (åñëè îíî ñóùåñòâóåò), êîðíåì êîòîðîãî ÿâëÿåòñÿ ëå-âûé ñûí âåðøèíû v, íàçûâàåòñÿ ëåâûì ïîääåðåâîì âåðøèíû v. Àíà-ëîãè÷íûì îáðàçîì îïðåäåëÿåòñÿ ïðàâîå ïîääåðåâî äëÿ âåðøèíû v.

Ñóùåñòâóåò íåñêîëüêî ñïîñîáîâ ïðåäñòàâëåíèÿ áèíàðíûõ äåðå-âüåâ (ïðåäïîëàãàåì, ÷òî âåðøèíû äåðåâà çàíóìåðîâàíû öåëûìè ÷èñ-ëàìè îò 1 äî n).

Ðàññìîòðèì äâà ñïîñîáà ïðåäñòàâëåíèÿ áèíàðíûõ äåðåâüåâ.Áèíàðíîå äåðåâî ìîæíî çàäàòü â âèäå ñïèñêîâîé ñòðóêòóðû:

type

tree_ptr =↑ tree_node;

tree_node=recordelement : element_type;left : tree_ptr;right : tree_ptr;

end;Áèíàðíîå äåðåâî ìîæíî òàêæå çàäàòü â âèäå äâóõ ìàññèâîâ: Left

è Right. Åñëè âåðøèíà j ÿâëÿåòñÿ ëåâûì (ïðàâûì) ñûíîì âåðøèíû

65

Page 64: Теория алгоритмов. Котов В.М., Соболевская Е.П

i, òîLeft[i] = j (Right[i] = j);

åñëè ó âåðøèíû i íåò ëåâîãî (ïðàâîãî) ñûíà, òîLeft[i] = 0 (Right[i] = 0).

Ñïåöèàëüíûì ñëó÷àåì áèíàðíûõ äåðåâüåâ ÿâëÿþòñÿ ïîëíûå áè-íàðíûå äåðåâüÿ.Îïðåäåëåíèå 3.5. Ïîëíûì áèíàðíûì äåðåâîì áóäåì íàçûâàòü òà-êîå óïîðÿäî÷åííîå êîðíåâîå äåðåâî, â êîòîðîì

• êàæäàÿ âåðøèíà èìååò íå áîëåå äâóõ ñûíîâåé;

• çàïîëíåíèå äåðåâà îñóùåñòâëÿåòñÿ îò êîðíÿ ê ëèñòüÿì ïîóðîâíÿì;

• çàïîëíåíèå óðîâíåé ïðîèçâîäèòñÿ ñëåâà íàïðàâî.Ïîëíûå áèíàðíûå äåðåâüÿ îáû÷íî ïðåäñòàâëÿþòñÿ â âèäå îäíî-

ìåðíîãî ìàññèâà R: R[1] êîðåíü äåðåâà, à äëÿ ïðîèçâîëüíîé âåð-øèíû i åå ëåâûé ñûí ðàñïîëàãàåòñÿ â ýëåìåíòå R[2i], à ïðàâûé R[2i + 1]. Îòåö âåðøèíû, íàõîäÿùåéñÿ â ïîçèöèè j, ðàñïîëîæåí âïîçèöèè [j/2].

Åùå îäíèì ñïåöèàëüíûì ñëó÷àåì áèíàðíûõ äåðåâüåâ ÿâëÿþòñÿáèíàðíûå ïîèñêîâûå äåðåâüÿ. Ïðåäïîëîæèì, ÷òî êàæäîé âåðøèíå áè-íàðíîãî äåðåâà ñîîòâåòñòâóåò íåêîòîðîå êëþ÷åâîå çíà÷åíèå (íàïðè-ìåð, öåëîå ÷èñëî).Îïðåäåëåíèå 3.6. Áèíàðíîå äåðåâî íàçûâàåòñÿ äåðåâîì ïîèñêà, åñ-ëè îíî îðãàíèçîâàíî òàê, ÷òî äëÿ êàæäîé âåðøèíû v ñïðàâåäëèâîóòâåðæäåíèå, ÷òî âñå êëþ÷è â ëåâîì ïîääåðåâå âåðøèíû v ìåíüøåêëþ÷à âåðøèíû v, à âñå êëþ÷è â ïðàâîì ïîääåðåâå áîëüøå.

Îòìåòèì, ÷òî â ïîèñêîâîì äåðåâå íåò äâóõ âåðøèí ñ îäèíàêî-âûìè êëþ÷åâûìè çíà÷åíèÿìè. Íà ðèñ.3.3 èçîáðàæåíû äâà áèíàðíûõäåðåâà, íî òîëüêî ëåâîå èç íèõ ÿâëÿåòñÿ áèíàðíûì ïîèñêîâûì äåðå-âîì.

Íà ïðàêòèêå ÷àñòî èñïîëüçóþò ñïåöèàëüíûå òèïû áèíàðíûõ ïî-èñêîâûõ äåðåâüåâ: èäåàëüíî ñáàëàíñèðîâàííûå äåðåâüÿ è ñáàëàíñèðî-âàííûå äåðåâüÿ.Îïðåäåëåíèå 3.7. Äåðåâî íàçûâàåòñÿ èäåàëüíî ñáàëàíñèðîâàííûì,åñëè îíî ÿâëÿåòñÿ áèíàðíûì ïîèñêîâûì äåðåâîì è ÷èñëî âåðøèí âåãî ëåâûõ è ïðàâûõ ïîääåðåâüÿõ îòëè÷àåòñÿ íå áîëåå ÷åì íà 1.

66

Page 65: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

6

2 8

1 4

3

6

2 8

1 4

3 7

¡¡ª @

@R

­­À

JJ

½½=

½½½=

½½½=

@@R

JJ

¶¶/Z

Z~

Ðèñ. 3.3. Áèíàðíûå äåðåâüÿ

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

Ñáàëàíñèðîâàííûå äåðåâüÿ ÷àñòî íàçûâàþò ÀÂËäåðåâüÿìè (ïîèìåíè èõ îòêðûâàòåëåé: Ã. Ì. Àäåëüñîí-Âåëüñêèé è Å. Ì. Ëàíäèñ).Çàìåòèì, ÷òî âñå èäåàëüíî ñáàëàíñèðîâàííûå äåðåâüÿ ÿâëÿþòñÿ òàê-æå è ÀÂËäåðåâüÿìè.

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

Ïðèâåäåì ïðîãðàììíóþ ðåàëèçàöèþ ïðîöåäóð îáõîäà âåðøèí áè-íàðíîãî êîðíåâîãî äåðåâà â ïðåäïîëîæåíèè, ÷òî äåðåâî çàäàíî ñïèñ-êîâîé ñòðóêòóðîé.

1. Ïðÿìîé ïîðÿäîê (ñâåðõó-âíèç) çàêëþ÷àåòñÿ â òîì, ÷òî êîðåíüïîñåùàåòñÿ ðàíüøå, ÷åì ïîääåðåâüÿ. Ðåêóðñèâíî: êîðåíü, ëåâîåïîääåðåâî, ïðàâîå ïîääåðåâî.

procedure order1(t : tree_ptr);if t 6= nil then P (t);order1(t ↑ left);order1(t ↑ right);

end.

67

Page 66: Теория алгоритмов. Котов В.М., Соболевская Е.П

2. Îáðàòíûé ïîðÿäîê (ñíèçó-ââåðõ) çàêëþ÷àåòñÿ â òîì, ÷òî êî-ðåíü ïîñåùàåòñÿ ïîñëå ïîääåðåâüåâ. Ðåêóðñèâíî: ëåâîå ïîääå-ðåâî, ïðàâîå ïîääåðåâî, êîðåíü.

procedure order2(t : tree_ptr);if t 6= nil then order2(t ↑ left);order2(t ↑ right);P (t);

end.

3. Âíóòðåííèé ïîðÿäîê (ñëåâà-íàïðàâî). Ðåêóðñèâíî: ëåâîå ïîääå-ðåâî, êîðåíü, ïðàâîå ïîääåðåâî.

procedure order3(t : tree_ptr);if t 6= nil then order3(t ↑ left);P (t);order3(t ↑ right);

end.

3.4. ÌíîæåñòâàÎñíîâíûìè áàçîâûìè îïåðàöèÿìè íàä ìíîæåñòâàìè îáû÷íî ñ÷è-

òàþòñÿ ñëåäóþùèå:1. Ïðèíàäëåæíîñòü ýëåìåíòà ìíîæåñòâó.

2. Îáúåäèíåíèå íåïåðåñåêàþùèõñÿ ìíîæåñòâ.Îáúåì ïàìÿòè, íåîáõîäèìûé äëÿ ïðåäñòàâëåíèÿ ìíîæåñòâ, ïðî-

ïîðöèîíàëåí êîëè÷åñòâó ýëåìåíòîâ â íåì. Âðåìÿ, íåîáõîäèìîå äëÿâûïîëíåíèÿ áàçîâûõ îïåðàöèé, çàâèñèò îò ñòðóêòóðû äàííûõ, âû-áðàííîé äëÿ ðåàëèçàöèè ìíîæåñòâà.

Îäíèì èç ñïîñîáîâ çàäàíèÿ ìíîæåñòâà ÿâëÿåòñÿ ìàññèâ. ÏóñòüU íåêîòîðîå áàçîâîå ìíîæåñòâî, ñîñòîÿùåå èç n ýëåìåíòîâ. Ëèíåé-íî óïîðÿäî÷èì ýòî ìíîæåñòâî. Òîãäà ëþáîå ìíîæåñòâî S ⊆ U ìîæíîîïðåäåëèòü ìàññèâîì R ðàçìåðíîñòè n, ó êîòîðîãî R[i]-é ýëåìåíò ðà-âåí âíóòðåííåìó èìåíè ìíîæåñòâà, êîòîðîìó ïðèíàäëåæèò i-é ýëå-ìåíò ìíîæåñòâà U. Òàêîå ïðåäñòàâëåíèå óäîáíî òåì, ÷òî ìîæíî îïðå-äåëèòü èìÿ ìíîæåñòâà, êîòîðîìó ïðèíàäëåæèò ýëåìåíò i, çà âðåìÿ

68

Page 67: Теория алгоритмов. Котов В.М., Соболевская Е.П

O(1). Îïåðàöèÿ îáúåäèíåíèÿ äâóõ íåïåðåñåêàþùèõñÿ ìíîæåñòâ A èB ñ ïîëó÷åíèåì íîâîãî ìíîæåñòâà C òðåáóåò O(n) âðåìåíè, òàê êàêäëÿ ýòîãî íàäî ïîñëåäîâàòåëüíî ïðîñìîòðåòü ìàññèâ R è çàìåíèòüêàæäûé åãî ýëåìåíò, ðàâíûé A èëè B, íà C. Åñëè íà íà÷àëüíîì øà-ãå èìååòñÿ n îäíîýëåìåíòíûõ ìíîæåñòâ, òî íàä íèìè ìîæíî âûïîë-íèòü n−1 îïåðàöèþ îáúåäèíåíèÿ, ÷òîáû ïîëó÷èòü n-ýëåìåíòíîå ìíî-æåñòâî. Îáùàÿ òðóäîåìêîñòü ýòèõ îïåðàöèé (ïðè îïèñàííîì âûøåñïîñîáå ðåàëèçàöèè) ðàâíà O(n2). Íåäîñòàòîê ýòîãî ïðåäñòàâëåíèÿçàêëþ÷àåòñÿ â òîì, ÷òî ðàññìîòðåííûå áàçîâûå îïåðàöèè íàä ìíî-æåñòâàìè çàíèìàþò âðåìÿ, ïðîïîðöèîíàëüíîå ìîùíîñòè áàçû, à íåìîùíîñòè ðàññìàòðèâàåìûõ ìíîæåñòâ. Ïîäîáíî ýòîìó, ïàìÿòü, òðå-áóåìàÿ äëÿ õðàíåíèÿ ìíîæåñòâà S, ïðîïîðöèîíàëüíà ìîùíîñòè áàçû.

Åñëè äëÿ ðåàëèçàöèè ìíîæåñòâ èñïîëüçóåòñÿ ñïèñêîâàÿ ñòðóê-òóðà, òî îïåðàöèÿ îïðåäåëåíèÿ èìåíè ìíîæåñòâà, êîòîðîìó ïðèíàä-ëåæèò íåêîòîðûé ýëåìåíò, òðåáóåò âðåìåíè O(n), îáúåäèíåíèÿ äâóõíåïåðåñåêàþùèõñÿ ìíîæåñòâ A è B òðåáóåò âðåìÿ O(1), à n− 1 îïå-ðàöèÿ îáúåäèíåíèÿ n îäíîýëåìåíòíûõ ìíîæåñòâ òðåáóåò âðåìÿ O(n).

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

3.4.1. Ïðåäñòàâëåíèå ìíîæåñòâ ñ ïîìîùüþ ñïèñêîâÏðåäïîëîæèì, ÷òî äëÿ ðàáîòû ñî ìíîæåñòâàìè íàì íåîáõîäèìî

âûïîëíÿòü îáå îïåðàöèè: ÍÀÉÒÈ(i) (îïðåäåëèòü èìÿ ìíîæåñòâà, êî-òîðîìó ïðèíàäëåæèò ýëåìåíò i) è ÎÁÚÅÄÈÍÈÒÜ(Ri, Rj , Rk) (îáú-åäèíåíèå äâóõ ìíîæåñòâ c èìåíà Ri è Rj â ìíîæåñòâî ñ èìåíåì Rk),ïðè÷åì êàæäûé ðàç îáúåäèíÿþòñÿ òîëüêî íåïåðåñåêàþùèåñÿ ìíîæå-ñòâà, ýëåìåíòû êîòîðûõ ìîæíî ñ÷èòàòü öåëûìè ÷èñëàìè îò 1 äî n.Îïèøåì ñòðóêòóðó äàííûõ, áëàãîäàðÿ êîòîðîé ïðîöåäóðà ÍÀÉÒÈòðåáóåò âðåìÿ O(1) è ïðîöåäóðà ÎÁÚÅÄÈÍÈÒÜ n − 1 íå ïåðåñåêà-þùååñÿ ìíîæåñòâî òðåáóåò âðåìÿ O(n log n). Äëÿ ýòîãî íåîáõîäèìîïîëüçîâàòüñÿ ñëåäóþùèìè ïðàâèëàìè.

Ñóùåñòâóþò âíóòðåííèå èìåíà, ïîä êîòîðûìè ìíîæåñòâà èçâåñò-íû âíóòðè ïðîãðàììû (îíè âèäíû òîëüêî âíóòðè ïðîãðàììû è íåâàæíû ïîëüçîâàòåëþ), è âíåøíèå èìåíà, êîòîðûå ñàì ïîëüçîâàòåëüïðèñâàèâàåò ìíîæåñòâàì è êîòîðûå ÿâëÿþòñÿ ïàðàìåòðàìè äëÿ îïå-ðàöèè ÎÁÚÅÄÈÍÈÒÜ. Âíóòðåííèå è âíåøíèå èìåíà ìíîæåñòâ ìî-ãóò íå ñîâïàäàòü.  êà÷åñòâå èìåí ìíîæåñòâ âûáèðàþòñÿ, êàê ïðàâè-

69

Page 68: Теория алгоритмов. Котов В.М., Соболевская Е.П

ëî, öåëûå ÷èñëà îò 1 äî n è ïðåäïîëàãàåòñÿ, ÷òî íèêàêèå äâà ìíîæå-ñòâà â îäèí è òîò æå ìîìåíò íå íàçâàíû îäèíàêîâî.

Ïðåäïîëîæèì, ÷òî ðàññìàòðèâàþòñÿ ñëåäóþùèå ìíîæåñòâà:

1=1,3,5,72=2,4,83=6,

ãäå 1,2,3 âíåøíèå èìåíà ìíîæåñòâ.Ïóñòü ðàññìîòðåííûå âûøå ìíîæåñòâà èìåþò ñëåäóþùèå âíó-

òðåííèå èìåíà 1,2,3:1,3,5,7=22,4,8=36=1.

Òîãäà îäíîìåðíûé ìàññèâ in_name, ðàçìåðíîñòü êîòîðîãî ðàâíàêîëè÷åñòâó ðàññìàòðèâàåìûõ ìíîæåñòâ, óñòàíàâëèâàåò ñâÿçü ìåæäóèìåíàìè:

âíåøíåå èìÿ 1 2 3in_name 2 3 1

çäåñü in_name[i] åñòü âíóòðåííåå èìÿ ìíîæåñòâà ñ âíåøíèì èìåíåìi.

Ìíîæåñòâà áóäóò õðàíèòüñÿ â âèäå ñïèñêîâîé ñòðóêòóðû, ðåàëè-çîâàííîé â âèäå îäíîìåðíûõ ìàññèâîâ R è next ðàçìåðíîñòè n,

i 1 2 3 4 5 6 7 8R 2 3 2 3 2 1 2 3

next 3 4 5 8 7 0 0 0

ãäå R(i) âíóòðåííåå èìÿ ìíîæåñòâà, êîòîðîìó ïðèíàäëåæèò ýëå-ìåíò i; next[i] çíà÷åíèå ñëåäóþùåãî ýëåìåíòà òîãî æå ìíîæåñòâà,êîòîðîìó ïðèíàäëåæàë ýëåìåíò i.

Ïðè îáúåäèíåíèè ìíîæåñòâ ñïèñîê, ñîîòâåòñòâóþùèé ìåíüøåìóìíîæåñòâó, äîáàâëÿåòñÿ ïåðåä ñïèñêîì, ñîîòâåòñòâóþùèì áîëüøåìóìíîæåñòâó. Ïðè ýòîì èçìåíÿþòñÿ âíóòðåííèå èìåíà òîëüêî ó ýëåìåí-òîâ ìåíüøåãî ñïèñêà. Äëÿ âûïîëíåíèÿ äàííûõ äåéñòâèé èñïîëüçóþò-ñÿ îäíîìåðíûå ìàññèâû

first_el, size, out_name,

ðàçìåðíîñòü êîòîðûõ ðàâíà êîëè÷åñòâó ðàññìàòðèâàåìûõ ìíîæåñòâ.

70

Page 69: Теория алгоритмов. Котов В.М., Соболевская Е.П

âíóòð.èìÿ 1 2 3first_el 6 1 2

size 1 4 3out_name 3 1 2

Çäåñü first_el[i] çíà÷åíèå ïåðâîãî ýëåìåíòà ñïèñêà, ñîîòâåòñòâóþ-ùåãî ìíîæåñòâó ìîùíîñòè size[i] ñ âíóòðåííèì èìåíåì i è âíåøíèìèìåíåì out_name[i].

Îïèøåì ðåàëèçàöèþ îñíîâíûõ áàçîâûõ îïåðàöèé: ÍÀÉÒÈ(i) èÎÁÚÅÄÈÍÈÒÜ(I, J,K).

1. ÍÀÉÒÈ(i) : out_name[R[i]] âíåøíåå èìÿ ìíîæåñòâà, êîòî-ðîìó ïðèíàäëåæèò ýëåìåíò i.

Òðóäîåìêîñòü O(1).

2. ÎÁÚÅÄÈÍÈÒÜ(Ri, Rj , Rk):

a) îïðåäåëÿåì âíóòðåííèå èìåíà ìíîæåñòâin_I := in_name[I];in_J := in_name[J ];

b) ñðàâíèâàåì ðàçìåðû ìíîæåñòâ äëÿ òîãî, ÷òîáû îïðåäåëèòüìåíüøèé ñïèñîêsize_I := size[in_I];size_J := size[in_J ];max_name := in_I; âíóòð. èìÿ áîëüøåãî ìíîæåñòâà;min_name := in_J ; âíóòð. èìÿ ìåíüøåãî ìíîæåñòâà;if size_I ≤ size_J then

change(max_name,min_name);c) ïðîõîäèì ñïèñîê ýëåìåíòîâ ìåíüøåãî ìíîæåñòâà è èçìåíÿ-

åì âíóòðåííåå èìÿ ìåíüøåãî ìíîæåñòâà íà âíóòðåííåå èìÿáîëüøåãî ìíîæåñòâà; ïðè ýòîì íàõîäèì àäðåñ ïîñëåäíåãîýëåìåíòà ìåíüøåãî ìíîæåñòâà (last);el := first_el[min_name]while el 6= 0 do R[el] := max_name;last := el;el := next[el];

71

Page 70: Теория алгоритмов. Котов В.М., Соболевская Е.П

d) äîáàâëÿåì ñïèñîê ýëåìåíòîâ ìåíüøåãî ìíîæåñòâà ïåðåäñïèñêîì ýëåìåíòîâ áîëüøåãî ìíîæåñòâà (ýòî íåòðóäíî ñäå-ëàòü, çíàÿ ïîñëåäíèé ýëåìåíò ìåíüøåãî ñïèñêà; ïðè ýòîìäëÿ ïîëó÷åííîãî â ðåçóëüòàòå ñëèÿíèÿ ñïèñêà îïðåäåëÿþò-ñÿ åãî íà÷àëî è êîëè÷åñòâî ýëåìåíòîâ);next[last] := first_el[max_name];first_el[max_name] := first_el[min_name];size[max_name] := size[max_name] + size[min_name];

e) ïðèñâàèâàåì ïîëó÷åííîìó ìíîæåñòâó âíåøíåå èìÿ K (ïðèýòîì âíóòðåííèå èìåíà ñòàðûõ âíåøíèõ èìåí I, J ñ÷èòà-þòñÿ íåîïðåäåëåííûìè).out_name[max_name] := K;in_name[K] := max_name;

Äëÿ ðàññìîòðåííîãî âûøå ïðèìåðà âûïîëíåíèå îïåðàöèè ÎÁÚ-ÅÄÈÍÈÒÜ(1,2,4) ïðèâåäåò ê ñëåäóþùèì ðåçóëüòàòàì:

i 1 2 3 4 5 6 7 8R 2 2 2 2 2 1 2 2

next 3 4 5 8 7 0 0 1

âíåøíåå èìÿ 1 2 3 4in_name - - 1 2

âíóòð.èìÿ 1 2 3 4first_el 6 2 - -

size 1 7 - -out_name 3 4 - -

Äëÿ îöåíêè ñóììàðíîé òðóäîåìêîñòè âûïîëíåíèÿ âñåõ âîçìîæ-íûõ îáúåäèíåíèé ìíîæåñòâ (ìàêñèìóì n− 1), îöåíèì ìàêñèìàëüíîåêîëè÷åñòâî ïåðåìåùåíèé îòäåëüíîãî ýëåìåíòà (ýòî ñîîòâåòñòâóåò èç-ìåíåíèþ åãî âíóòðåííåãî èìåíè). Êîãäà ýëåìåíò ïåðåìåùàåòñÿ, òî îíâñåãäà îêàçûâàåòñÿ â ìíîæåñòâå, ìîùíîñòü êîòîðîãî ïî êðàéíåé ìåðåâ äâà ðàçà áîëüøå, ÷åì ìîùíîñòü òîãî ìíîæåñòâà, â êîòîðîì îí íà-õîäèëñÿ äî âûïîëíåíèÿ îïåðàöèè. Ñëåäîâàòåëüíî, îáùåå êîëè÷åñòâîïåðåìåùåíèé ëþáîãî ýëåìåíòà íå ïðåâîñõîäèò log2 n. Ïîýòîìó äëÿ nýëåìåíòîâ îáùåå ñóììàðíîå êîëè÷åñòâî ïåðåìåùåíèé íå ïðåâîñõîäèò

72

Page 71: Теория алгоритмов. Котов В.М., Соболевская Е.П

O(n log2 n). Êðîìå òîãî, íà êàæäîì øàãå âûïîëíÿþòñÿ äðóãèå îïåðà-öèè (ñëèÿíèå ñïèñêîâ, ïîèñê èìåí, îïðåäåëåíèå ðàçìåðà ìíîæåñòâà),ñóììàðíàÿ òðóäîåìêîñòü êîòîðûõ åñòü âåëè÷èíà Cn. Ïîýòîìó òðóäî-åìêîñòü îïèñàííîãî àëãîðèòìà åñòü O(n log2 n).

3.4.2. Ïðåäñòàâëåíèå ìíîæåñòâ ñ ïîìîùüþ äåðåâüåâÇàäàí íàáîð íåïåðåñåêàþùèõñÿ ìíîæåñòâ Ri, 1 ≤ i ≤ k. Áóäåì

ïðåäïîëàãàòü, ÷òî èìåíà ìíîæåñòâ è èõ ýëåìåíòû öåëûå ÷èñëà îò1 äî n.

Äëÿ õðàíåíèÿ ìíîæåñòâ âûáåðåì òàêóþ ñòðóêòóðó äàííûõ, êàêíàáîð êîðíåâûõ äåðåâüåâ (êàæäîå äåðåâî çàäàåòñÿ â êàíîíè÷åñêîìâèäå).

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

%%

¡¡¡

SSS

2

3

1

6 4 5

R2 R1

Êàæäîìó ìíîæåñòâó Ri áóäåò ñîîòâåòñòâîâàòü ñâîå êîðíåâîå äåðåâî:êëþ÷åâûì çíà÷åíèÿì âåðøèí áóäóò ñîîòâåòñòâîâàòü ýëåìåíòû, ïðè-íàäëåæàùèå ìíîæåñòâó Ri, à êëþ÷åâîå çíà÷åíèå êîðíÿ çàäàåò èìÿýòîãî ìíîæåñòâà. Îäíîýëåìåíòíîìó ìíîæåñòâó ñîîòâåòñòâóåò êîðíå-âîå äåðåâî, ñîñòîÿùåå èç åäèíñòâåííîé âåðøèíû ñ êëþ÷îì ðàâíûìèìåíè ýòîãî ìíîæåñòâà.

Íà ðèñóíêå, ïðèâåäåííîì ðàíåå, çàäàíû äâà ìíîæåñòâà R2 =2, 3 è R1 = 1, 5, 4, 6. Ìíîæåñòâî R1 èìååò èìÿ 1, à ìíîæåñòâîR2 èìååò èìÿ 2.

Îïåðàöèÿ ÍÀÉÒÈ(i) (ïîèñêà èìåíè ìíîæåñòâà, êîòîðîìó ïðè-íàäëåæèò ýëåìåíò i) ðåàëèçóåòñÿ ñëåäóþùèì îáðàçîì: ïîêà p[i] íåêîðåíü, ïîëàãàåì i = p[i] (íàïîìíèì, ÷òî âåðøèíà z ÿâëÿåòñÿ êîðíåìäåðåâà, åñëè p[z] = 0). Ïîñëå ÷åãî ôóíêöèè ÍÀÉÒÈ(i) ïðèñâàèâàåìçíà÷åíèå íàéäåííîãî êîðíÿ, êîòîðîå è çàäàåò èìÿ ìíîæåñòâà, êîòîðî-ìó ïðèíàäëåæèò ýëåìåíò i. Òðóäîåìêîñòü îïåðàöèè ÍÀÉÒÈ(i) ðàâíàO(h), ãäå h âûñîòà êîðíåâîãî äåðåâà.

Îïåðàöèÿ îáúåäèíåíèÿ ìíîæåñòâ, êîòîðûì ïðèíàäëåæàò ýëåìåí-òû i è j, ðåàëèçóåòñÿ ñëåäóþùèì îáðàçîì.

73

Page 72: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ñíà÷àëà âûïîëíèì îïåðàöèè ÍÀÉÒÈ(i) è ÍÀÉÒÈ(j), êîòîðûåäàäóò èìåíà ìíîæåñòâ Ri è Rj , êîòîðûì ïðèíàäëåæàò ýëåìåíòû i èj. Åñëè èìåíà ìíîæåñòâ ñîâïàäàþò, òî ýëåìåíòû i è j ïðèíàäëåæàòîäíîìó è òîìó æå ìíîæåñòâó, è â ýòîì ñëó÷àå ïðîöåäóðà îáúåäèíåíèÿìíîæåñòâ íå âûïîëíÿåòñÿ; â ïðîòèâíîì ñëó÷àå âûïîëíÿåì ïðîöåäóðóÎÁÚÅÄÈÍÈÒÜ(Ri, Rj).

Äëÿ ðåàëèçàöèè ïðîöåäóðû ÎÁÚÅÄÈÍÈÒÜ(Ri, Rj) äîñòàòî÷-íî êîðåíü îäíîãî èç äåðåâüåâ ñäåëàòü ñûíîì êîðíÿ äðóãîãî äåðåâà(ïðîèñõîäèò ñëèÿíèå äåðåâüåâ, çàäàþùèõ îáúåäèíÿåìûå ìíîæåñòâà).Cëîæíîñòü ñëèÿíèÿ äâóõ êîðíåâûõ äåðåâüåâ, çàäàííûõ â êàíîíè÷å-ñêîì âèäå, ðàâíà êîíñòàíòå, åñëè èçâåñòíû èõ êîðíè.

Äëÿ ïðèâåäåííîãî ðàíåå íà ðèñóíêå íàáîðà ìíîæåñòâ, îïåðàöèÿÎÁÚÅÄÈÍÈÒÜ(1, 2) ìîæåò ïðèâåñòè ê îäíîìó èç äâóõ ðåçóëüòàòîâ:a) èëè b), êîòîðûå ïðåäñòàâëåíû íà ðèñóíêå.

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

%%

¡¡¡

SSS

2

3

1

6 4 5

±°²¯

±°²¯

%%

2

3

±°²¯

±°²¯

±°²¯

±°²¯

¡¡¡

SSS

1

6 4 5

JJ

!!!!!!!

a) b)

Êàê ìû âèäèì, àëãîðèòì îïåðàöèè îáúåäèíåíèÿ ìíîæåñòâ âû-ïîëíÿåòñÿ äîâîëüíî ïðîèçâîëüíî. Ïðåäïîëîæèì, ÷òî ïåðâîíà÷àëüíîíàì áûëè çàäàíû n îäíîýëåìåíòíûõ ìíîæåñòâ (êàæäîìó ýëåìåíòói, 1 ≤ i ≤ n ñîîòâåòñòâóåò êîðíåâîå äåðåâî, ñîñòîÿùåå èç åäèíñòâåí-íîé âåðøèíû ñ êëþ÷åâûì çíà÷åíèåì i), è íàì íåîáõîäèìî âûïîëíèòüïîñëåäîâàòåëüíîñòü èç n îïåðàöèé ÍÀÉÒÈ è ÎÁÚÅÄÈÍÈÒÜ. Òîãäàìû ìîæåì ïîëó÷èòü åäèíñòâåííîå ìíîæåñòâî èç n ýëåìåíòîâ, ïðè÷åìêîðíåâîå äåðåâà, çàäàþùåå ýòî ìíîæåñòâî, ìîæåò äîñòèãàòü âûñîòûh = n.

Ñëåäîâàòåëüíî òðóäîåìêîñòü ïîñëåäîâàòåëüíîñòè èç n îïåðàöèéÍÀÉÒÈ è ÎÁÚÅÄÈÍÈÒÜ áóäåò ðàâíà O(n2).

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

74

Page 73: Теория алгоритмов. Котов В.М., Соболевская Е.П

ðàçìåðà ïîëàãàòü îòöîì êîðíÿ äåðåâà ìåíüøåãî ðàçìåðà (ïîä ðàçìå-ðîì äåðåâà áóäåì ïîíèìàòü êîëè÷åñòâî âåðøèí â íåì). Ýòó îïåðàöèþîáúåäèíåíèÿ ìíîæåñòâ áóäåì íàçûâàòü îïåðàöèåé ÎÁÚÅÄÈÍÅÍÈßÏÎ ÐÀÇÌÅÐÓ.

×òîáû âîñïîëüçîâàòüñÿ óêàçàííûì ïðèíöèïîì îáúåäèíåíèÿ ìíî-æåñòâ, ìû äîëæíû èìåòü èíôîðìàöèþ î ðàçìåðå äåðåâà, êîòîðóþáóäåì õðàíèòü â êîðíå äåðåâà. ×òîáû îòëè÷èòü êîðåíü äåðåâà îòîñòàëüíûõ âåðøèí, êîðåíü áóäåì ïîìå÷àòü îòðèöàòåëüíûì ÷èñëîì,àáñîëþòíîå çíà÷åíèå êîòîðîãî ðàâíî êîëè÷åñòâó âåðøèí â äåðåâå.

Òàê, äëÿ ðàññìîòðåííûõ íàìè ðàíåå ìíîæåñòâ R2 è R1, êàíîíè-÷åñêîå ïðåäñòàâëåíèå áóäåò èìåòü ñëåäóþùèé âèä:

R2 : i 2 3p[i] -2 2

R1 : i 1 4 5 6p[i] -4 1 1 1

Ïîñëå âûïîëíåíèÿ îïåðàöèè ÎÁÚÅÄÈÍÅÍÈß ÏÎ ÐÀÇÌÅÐÓìíîæåñòâ R1 è R2 (ñì. ðàíåå ðèñóíîê b)), ïîëó÷èì ìíîæåñòâî, êàíî-íè÷åñêîå ïðåäñòàâëåíèå êîòîðîãî áóäåò èìåòü ñëåäóþùèé âèä:

i 1 4 5 6 2 3p[i] -6 1 1 1 1 2

Òåîðåìà 3.1. Åñëè ïðè âûïîëíåíèè êàæäîé îïåðàöèè ÎÁÚÅÄÈ-ÍÈÒÜ êîðåíü äåðåâà ñ ìåíüøèì ÷èñëîì óçëîâ (ïðè ðàâåíñòâå óçëîâáåðåòñÿ ëþáîå äåðåâî) ïðåîáðàçóåòñÿ â ñûíà êîðíÿ äåðåâà ñ áîëüøèì÷èñëîì óçëîâ, òî âûñîòà äåðåâà â ëåñó ìîæåò äîñòè÷ü âûñîòû h,òîëüêî åñëè îíî èìååò íå ìåíåå 2h óçëîâ.Äîêàçàòåëüñòâî. Äîêàçàòåëüñòâî ïðîâåäåì ïî èíäóêöèè.

Äëÿ h = 0 óòâåðæäåíèå âåðíî, òàê êàê êàæäîå äåðåâî èìååò ïîêðàéíåé ìåðå îäèí óçåë.

Ïðåäïîëîæèì, ÷òî óòâåðæäåíèå âåðíî äëÿ âñåõ çíà÷åíèé ïàðà-ìåòðà, ìåíüøèõ h (≥ 1).

Ïóñòü T äåðåâî âûñîòû h ñ íàèìåíüøèì ÷èñëîì óçëîâ, êîòîðîåïîëó÷èëîñü â ðåçóëüòàòå ñëèÿíèÿ äåðåâüåâ T1 è T2, ïðè÷åì êîëè÷å-ñòâî óçëîâ ó äåðåâà T1 íå áîëüøå ÷åì ó T2.

75

Page 74: Теория алгоритмов. Котов В.М., Соболевская Е.П

AA

AA££

££T1

AA

AA££

££T2

¡¡

¡¡

¡

T

Ïðåäïîëîæèì, ÷òî äåðåâî T2 èìååò âûñîòó h, íî òàê êàê êîëè-÷åñòâî óçëîâ ó ýòîãî äåðåâà ìåíüøå, ÷åì ó äåðåâà T, òî ïðèõîäèì êïðîòèâîðå÷èþ ñ òåì, ÷òî T äåðåâî âûñîòû h ñ íàèìåíüøèì ÷èñ-ëîì óçëîâ. Ñëåäîâàòåëüíî âûñîòà äåðåâà T2 ìåíüøå ÷åì h. Òîãäà äëÿòîãî, ÷òîáû äåðåâî T èìåëî âûñîòó h íåîáõîäèìî, ÷òîáû äåðåâî T1

èìåëî âûñîòó h−1. Îäíàêî, äåðåâî T1 èìååò íå ìåíåå 2h−1 óçëîâ. Ïîïðåäïîëîæåíèþ ó äåðåâà T2 óçëîâ íå ìåíüøå, çíà÷èò äåðåâî T2 èìååòòàêæå íå ìåíåå 2h−1 óçëîâ.

Ñëåäîâàòåëüíî, äåðåâî T èìååò íå ìåíåå

2h−1 + 2h−1 = 2h

óçëîâ. 2

Èç òåîðåìû ñëåäóåò, ÷òî íèêàêîå äåðåâî èç n óçëîâ ïðè ÎÁÚ-ÅÄÈÍÅÍÈÈ ÏÎ ÐÀÇÌÅÐÓ íå ìîæåò èìåòü âûñîòó h áîëüøå, ÷åìlog2 n.

Ñëåäñòâèå 3.1. Ñëîæíîñòü âûïîëíåíèÿ O(n) îïåðàöèé ÍÀÉÒÈ èÎÁÚÅÄÈÍÈÒÜ ÏÎ ÐÀÇÌÅÐÓ íå ïðåâîñõîäèò O(n log n).

Åñëè ìû ðàññìîòðèì äâå îñíîâíûå îïåðàöèè ÍÀÉÒÈ è ÎÁÚ-ÅÄÈÍÈÒÜ ÏÎ ÐÀÇÌÅÐÓ, òî çàìåòèì, ÷òî íàèáîëüøóþ òðóäîåì-êîñòü èìååò ïåðâàÿ èç íèõ (O(log2 n). Ðàññìîòðèì óñîâåðøåíñòâî-âàíèå àëãîðèòìà âûïîëíåíèÿ îïåðàöèè ÍÀÉÒÈ, êîòîðîå ñîñòîèò âìîäèôèêàöèè êîðíåâîãî äåðåâà ïðè âûïîëíåíèè ïîèñêà.

Ìîäèôèêàöèþ ïðîöåäóðû ÍÀÉÒÈ íàçûâàþò ÍÀÉÒÈ Ñ ÑÆÀ-ÒÈÅÌ ÏÓÒÈ.Îïðåäåëåíèå 3.9. Ñæàòèå ïóòè äëÿ âåðøèíû x â êîðíåâîì äåðåâåñîñòîèò â òîì, ÷òî äëÿ êàæäîé âåðøèíû (âêëþ÷àÿ âåðøèíó x),ëåæàùåé íà ïóòè îò ýòîé âåðøèíû äî êîðíÿ äåðåâà r, íàçíà÷àåòñÿíîâûé îòåö: âåðøèíà r.

76

Page 75: Теория алгоритмов. Котов В.М., Соболевская Е.П

Íà ðèñóíêå, èçîáðàæåííîì íèæå, ïðîèëëþñòðèðîâàíî âûïîëíå-íèå ïðîöåäóðû ÍÀÉÒÈ(x).

n

n

n

n

n

n

n

n

%%%

TTT

AAA

AAA

··

·

··

·

r

a b

c d

x

l m

LLL n

rn

n n n

n nn

©©©©©¶

¶e

e

bb

bb

¯¯

¯

··

··

ee

e

a b d x

c lm

-

Àëãîðèòì ïîèñêà ñ ñæàòèåì ïóòè ìîæåò áûòü ðåàëèçîâàí, íàïðè-ìåð, ñ ïîìîùüþ ñòðóêòóðû äàííûõ ñòåê. Äëÿ ýòîãî ìû ñíà÷àëà âñåâåðøèíû, âñòðåòèâøèåñÿ íà ïóòè îò âåðøèíû x äî êîðíÿ äåðåâà r çà-íîñèì â ñòåê, à çàòåì, ïîêà ñòåê íå ñòàíåò ïóñòûì, óäàëÿåì èç ñòåêàî÷åðåäíîé ýëåìåíò y è ïîëàãàåì p[y] = r.

Äëÿ îöåíêè òðóäîåìêîñòè ïîñëåäîâàòåëüíîñòè èç O(n) îïåðàöèéÏÎÈÑÊ Ñ ÑÆÀÒÈÅÌ ÏÓÒÈ è ÎÁÚÅÄÈÍÅÍÈÅ ÏÎ ÐÀÇÌÅÐÓ,ðàññìîòðèì ôóíêöèþ F, êîòîðàÿ îïðåäåëÿåòñÿ ñëåäóþùèì îáðàçîì:

F (i) =

1, åñëè i = 0,2F (i−1), åñëè i > 0.

Ôóíêöèÿ F ðàñòåò î÷åíü áûñòðî: åñëè F (0) = 1, òî F (4) = 65536.Îïðåäåëèì ôóíêöèþ G(n) êàê íàèìåíüøåå ÷èñëî k, äëÿ êîòîðîãîF (k) ≥ n. Ôóíêöèÿ G ðàñòåò î÷åíü ìåäëåííî: G(n) ≤ 5 äëÿ âñåõn ≤ 265536.

Òåîðåìà 3.2. Ïóñòü c ïðîèçâîëüíàÿ ïîñòîÿííàÿ. Íàéäåòñÿ äðó-ãàÿ ïîñòîÿííàÿ c′, çàâèñÿùàÿ îò c, òàêàÿ, ÷òî àëãîðèòì îáúåäèíå-íèÿ íåïåðåñåêàþùèõñÿ ìíîæåñòâ ïî ðàçìåðó ñ ñæàòèåì ïóòè âûïîë-íèò ïîñëåäîâàòåëüíîñòü èç c · n îïåðàöèé ÎÁÚÅÄÈÍÈÒÜ è ÍÀÉ-ÒÈ íà n ýëåìåíòàõ çà âðåìÿ c′ · n ·G(n).

77

Page 76: Теория алгоритмов. Котов В.М., Соболевская Е.П

3.5. Ïðèîðèòåòíûå î÷åðåäèÏðèîðèòåòíûìè î÷åðåäÿìè ("êó÷àìè") áóäåì íàçûâàòü òàêèå

ñòðóêòóðû äàííûõ, êîòîðûå ïîçâîëÿþò âûïîëíÿòü äâå îñíîâíûå îïå-ðàöèè:

• äîáàâëåíèå ýëåìåíòà;

• óäàëåíèå ìèíèìàëüíîãî ýëåìåíòà.

Åñëè îïåðàöèÿ äîáàâëåíèÿ ýëåìåíòà íå òðåáóåò äîïîëíèòåëüíûõ îáú-ÿñíåíèé, òî îïåðàöèÿ óäàëåíèÿ ìèíèìàëüíîãî ýëåìåíòà ïðåäïîëàãà-åò, ÷òî äëÿ êàæäîãî ýëåìåíòà îïðåäåëåíî íåêîòîðîå çíà÷åíèå (êëþ÷),ïî êîòîðîìó îïðåäåëÿåòñÿ ìèíèìàëüíîñòü.  ñàìîì ïðîñòîì âàðè-àíòå çíà÷åíèå êëþ÷à ìîæåò ñîâïàäàòü ñî çíà÷åíèåì ýëåìåíòà.  îá-ùåì ñëó÷àå ñîîòíîøåíèå çíà÷åíèÿ ýëåìåíòà è åãî êëþ÷à ìîãóò èìåòüïðîèçâîëüíóþ çàâèñèìîñòü. Íàïðèìåð, åñëè çíà÷åíèå êëþ÷à ñîîòâåò-ñòâóåò âðåìåíè ïîñòóïëåíèÿ íåêîòîðîé çàÿâêè íà îáñëóæèâàíèå, òîìîæíî ïðåäïîëàãàòü, ÷òî ìèíèìàëüíîå çíà÷åíèå êëþ÷à èìååò òà çà-ÿâêà (ýëåìåíò), êîòîðàÿ ïîñòóïèëà ðàíüøå.  ýòîì ñëó÷àå äëÿ ìî-äåëèðîâàíèÿ ïðîöåññà îáñëóæèâàíèÿ ìîæíî èñïîëüçîâàòü ñòðóêòóðóäàííûõ "î÷åðåäü". Åñëè ïðåäïîëîæèòü, ÷òî ìèíèìàëüíîå çíà÷åíèåêëþ÷à èìååò òà çàÿâêà (ýëåìåíò), êîòîðàÿ ïîñòóïèëà ïîçæå, òî äëÿìîäåëèðîâàíèÿ ïðîöåññà îáñëóæèâàíèÿ ìîæíî èñïîëüçîâàòü ñòðóê-òóðó äàííûõ "ñòåê". Íî åñëè ïðåäïîëîæèòü, ÷òî ìèíèìàëüíîå çíà÷å-íèå êëþ÷à èìååò òà çàÿâêà (ýëåìåíò), êîòîðàÿ ìåíüøå âñåãî ìîæåòæäàòü, äëÿ ìîäåëèðîâàíèÿ ïðîöåññà îáñëóæèâàíèÿ ìîæíî èñïîëü-çîâàòü òàêóþ ñòðóêòóðó äàííûõ, êàê "êó÷à"(ýòî óæå áóäåò î÷åðåäü,êîòîðàÿ ó÷èòûâàåò ïðèîðèòåòû).

Ñóùåñòâóåò ìíîãî ñïîñîáîâ ðåàëèçàöèè ñòðóêòóðû äàííûõ "êó-÷à." äàííîì ðàçäåëå íàìè áóäóò ðàññìîòðåíû: áèíàðíûå êó÷è, áèíî-ìèàëüíûå êó÷è è êó÷è Ôèáîíà÷÷è. Íà ïðèìåðå êó÷ Ôèáîíà÷÷è áóäåòïðîäåìîíñòðèðîâàí ñïîñîá ïîëó÷åíèÿ óñðåäíåííîé îöåíêè òðóäîåì-êîñòè â õóäøåì ñëó÷àå äëÿ ãðóïïû îïåðàöèé.

3.5.1. Áèíàðíûå êó÷èÍàïîìíèì, ÷òî ïîëíûì áèíàðíûì äåðåâîì íàçûâàåòñÿ òàêîå äå-

ðåâî, â êîòîðîì êàæäàÿ âåðøèíà èìååò íå áîëåå äâóõ "ñûíîâåé", àçàïîëíåíèå âåðøèí îñóùåñòâëÿåòñÿ â ïîðÿäêå îò âåðõíèõ óðîâíåé ê

78

Page 77: Теория алгоритмов. Котов В.М., Соболевская Е.П

íèæíèì, ïðè÷åì íà îäíîì óðîâíå çàïîëíåíèå âåðøèí ïðîèçâîäèòñÿñëåâà íàïðàâî.

Íà ðèñ.3.4 ñëåâà èçîáðàæåíî ïîëíîå áèíàðíîå äåðåâî, êîòîðîåèìååò òðè óðîâíÿ. Äåðåâî, èçîáðàæåííîå íà ðèñ.3.4 ñïðàâà, íå ÿâëÿ-åòñÿ ïîëíûì áèíàðíûì äåðåâîì, òàê êàê çàïîëíåíèå âåðøèí óðîâíÿ0 îñóùåñòâëÿëîñü íå ñëåâà íàïðàâî.

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯­

­

¢¢

\\

··

··

@@@

óðîâåíü 0

óðîâåíü 1

óðîâåíü 2±°²¯

¶¶¶

a

b c

d

a

bc

d f

Ðèñ. 3.4. Áèíàðíûå äåðåâüÿ

Íåòðóäíî óáåäèòüñÿ, ÷òî â ïîëíîå áèíàðíîå äåðåâî, èçîáðàæåí-íîå íà ðèñ.3.4, ìîæíî äîáàâèòü (çàïîëíèòü) ìàêñèìóì òðè âåðøèíû,÷òîáû êîëè÷åñòâî óðîâíåé â íåì íå èçìåíèëîñü. Åñëè ìû äîáàâèì(çàïîëíèì) ÷åòûðå âåðøèíû, òî ïîëó÷èòñÿ ïîëíîå ÷åòûðåõóðîâíå-âîå áèíàðíîå äåðåâî, êîòîðîå èçîáðàæåíî íà ðèñ.3.5 Î÷åâèäíî, ÷òîìèíèìàëüíîå êîëè÷åñòâî âåðøèí â ïîëíîì òðåõóðîâíåâîì áèíàðíîìäåðåâå ðàâíî 4, à ìàêñèìàëüíîå ÷èñëî â ïîëíîñòüþ çàïîëíåííîì 7.

Íåñëîæíî óâèäåòü, ÷òî äëÿ ïîëíîãî áèíàðíîãî äåðåâà âûñîòû hìàêñèìàëüíîå êîëè÷åñòâî âåðøèí åñòü

1 + 2 + · · ·+ 2h =h∑

i=0

2i =2h+1 − 1

2− 1= 2h+1 − 1,

à ìèíèìàëüíîå êîëè÷åñòâî âåðøèí åñòü

(1 + 2 + · · ·+ 2h−1) + 1 =h−1∑

i=0

2i + 1 =2h − 12− 1

+ 1 = 2h.

Òàêèì îáðàçîì, êîëè÷åñòâî âåðøèí ïîëíîãî áèíàðíîãî äåðåâàâûñîòû h èçìåíÿåòñÿ îò 2h äî (2h+1 − 1).

79

Page 78: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

HHH

¡¡ @@

a

b c

d e f g

h

©©©

´ AA

¯¯

Ðèñ. 3.5. Ïîëíîå ÷åòûðåõóðîâíåâîå áèíàðíîå äåðåâî

Ïîëíîå áèíàðíîå äåðåâî ñ K âåðøèíàìè ëåãêî ðåàëèçóåòñÿ ñ ïî-ìîùüþ ïðîñòîãî ìàññèâà. Äëÿ ýòîãî íåîáõîäèìî ïðåäñòàâèòü, ÷òî óýëåìåíòà ñ èíäåêñîì i ñûíîâüÿìè ÿâëÿþòñÿ ýëåìåíòû ñ èíäåêñàìè2 · i è 2 · i + 1, 2 · i ≤ K, 2 · i + 1 ≤ K.

Òàê, ïîëíîå áèíàðíîå äåðåâî

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

´´

´l

ll

%%%

LLL

­­­

a

b c

d e f

áóäåò ïðåäñòàâëåíî â âèäå ìàññèâà:Èíäåêñ 1 2 3 4 5 6Âåðøèíà a b c d e f

Êðîìå ìàññèâà, íåîáõîäèìî èìåòü ïåðåìåííóþ, êîòîðàÿ îïðåäå-ëÿåò êîëè÷åñòâî âåðøèí â äåðåâå. Ïóñòü ýòî áóäåò ïåðåìåííàÿ Num.Òîãäà èíäåêñ ìåñòà â ìàññèâå, ìîäåëèðóþùåì ïîëíîå áèíàðíîå äåðå-âî, êóäà î÷åðåäíîé ýëåìåíò áóäåò äîáàâëÿòüñÿ, ðàâåí Num + 1.

Îñíîâíûì ñâîéñòâîì (èíâàðèàíòîì) ñòðóêòóðû äàííûõ êó÷àÿâëÿåòñÿ óñëîâèå, ÷òî ýëåìåíòû â íåé îðãàíèçîâàíû òàêèì îáðàçîì,

80

Page 79: Теория алгоритмов. Котов В.М., Соболевская Е.П

÷òî ïðèîðèòåò ëþáîé âåðøèíû íå íèæå ïðèîðèòåòà êàæäîãî èç åå"ñûíîâåé". Òàê, åñëè â êà÷åñòâå ïðèîðèòåòà ðàññìàòðèâàòü âðåìÿ,êîòîðîå ýëåìåíò ìîæåò "îæèäàòü", òî ïðèîðèòåò âåðøèíû áóäåò òåìâûøå, ÷åì ìåíüøå âðåìÿ âîçìîæíîãî îæèäàíèÿ.Îïðåäåëåíèå 3.10. Áèíàðíàÿ êó÷à ýòî ïîëíîå áèíàðíîå äåðåâî,äëÿ êîòîðîãî âûïîëíÿåòñÿ îñíîâíîå ñâîéñòâî ñòðóêòóðû äàííûõêó÷à (èíâàðèàíò 1).

Ïóñòü H ìàññèâ ðàçìåðà n, êîòîðûé áóäåò èñïîëüçîâàòüñÿ äëÿðåàëèçàöèè áèíàðíîé êó÷è, Num êîëè÷åñòâî ýëåìåíòîâ â êó÷å, àïðèîðèòåò ýëåìåíòà îïðåäåëÿåòñÿ åãî çíà÷åíèåì, ïðè÷åì, ÷åì ìåíüøåçíà÷åíèå ýëåìåíòà, òåì áîëüøå åãî ïðèîðèòåò.

Îñíîâíàÿ èäåÿ ìîäåëèðîâàíèÿ ñîñòîèò â òîì, ÷òî ñûíîâüÿìè âåð-øèíû ñ èíäåêñîì i ÿâëÿþòñÿ âåðøèíû ñ èíäåêñàìè 2i è 2i+1. Îòñþäàñëåäóåò, ÷òî îòöîì âåðøèíû ñ èíäåêñîì j ÿâëÿåòñÿ âåðøèíà ñ èíäåê-ñîì bj/2c. Îòìåòèì, ÷òî ó êîðíåâîé âåðøèíû îòöà íåò.

Ïîýòîìó îñíîâíîå ñâîéñòâî áèíàðíîé êó÷è îáåñïå÷èâàåòñÿ âû-ïîëíåíèåì óñëîâèÿ, ÷òî äëÿ ëþáîé òðîéêè ýëåìåíòîâ ñ èíäåêñàìè i,2i, 2i+1 ýëåìåíò ñ èíäåêñîì i äîëæåí èìåòü ìàêñèìàëüíûé ïðèîðèòåò(â êó÷å èç òðåõ ýëåìåíòîâ áîëåå ñèëüíûé âñåãäà ñâåðõó).

Íèæå ïðèâîäèòñÿ ñïîñîá ïîääåðæàíèÿ ýòîãî ñâîéñòâà ïðè âû-ïîëíåíèè îñíîâíûõ îïåðàöèé ñ áèíàðíûìè êó÷àìè.

Îñíîâíûå îïåðàöèé ñ áèíàðíûìè êó÷àìè

1. Äîáàâëåíèÿ ýëåìåíòà ê áèíàðíîé êó÷å.Ïðåäïîëîæèì, ÷òî â êó÷ó, èçîáðàæåííóþ íà ðèñ. 3.6 ñëåâà,

íåîáõîäèìî äîáàâèòü íîâûé ýëåìåíò ñ êëþ÷îì 17.Ïðè âûïîëíåíèè îïåðàöèè äîáàâëåíèÿ ýëåìåíò äîëæåí ïîìå-

ñòèòüñÿ íà ñâîáîäíîå ìåñòî, ò. å. â ïîçèöèþ ñ èíäåêñîì Num+1.Îäíàêî ýòà ïîçèöèÿ ìîæåò íå ñîîòâåòñòâîâàòü ïðàâèëüíîìó ïî-ëîæåíèþ ýëåìåíòà â êó÷å, òàê êàê íàä íèì ìîæåò íàõîäèòüñÿýëåìåíò, èìåþùèé ìåíüøèé ïðèîðèòåò.Ïðîñòåéøèì ñïîñîáîì ðàçðåøåíèÿ ýòîé ñèòóàöèè ÿâëÿåòñÿ

îáìåí ýëåìåíòîâ, íà êîòîðûõ ïðîèçîøëî íàðóøåíèå îñíîâíî-ãî ñâîéñòâà. Ïðè ýòîì ýëåìåíò ñ áîëüøèì ïðèîðèòåòîì ïîäíè-ìàåòñÿ ââåðõ, à ýëåìåíò ñ ìåíüøèì ïðèîðèòåòîì çàíèìàåò åãîìåñòî. Ëåãêî âèäåòü, ÷òî ïðè òàêîì îáìåíå îñíîâíîå ñâîéñòâîêó÷è äëÿ âåðøèí, ñòîÿùèõ íèæå, íå íàðóøàåòñÿ.

81

Page 80: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

10

21 16

25 29 20 60

25 40 33

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

10

21 16

25 20 60

25 40 33

17-

17

´´ @@

·· LL

¶¶ DD ·· SS

""" @@

­­ AA

¡¡ BB

¯ TT

29

¢¢

££°¢¢ TT

¥¥ ee

Ðèñ. 3.6. Äîáàâëåíèå ýëåìåíòà ê áèíàðíîé êó÷å

Òàêîå ïðåîáðàçîâàíèå ïðèâîäèò ê íîâîìó ïîëíîìó áèíàðíî-ìó äåðåâó (ñì. ðèñ. 3.6 ñïðàâà), êîòîðîå åùå íå óäîâëåòâîðÿåòîñíîâíîìó ñâîéñòâó êó÷è (äëÿ âåðøèíû ñ èíäåêñîì 2).Ïîýòîìó, ïðèìåíÿåì àíàëîãè÷íûé îáìåí äëÿ âåðøèíû ñ èí-

äåêñîì 2.

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

10

16

25 20 60

25 40 33

17

21

29

´´ ee

¶¶ TT ·· JJ

¶¶ DD ¥¥ @@

 ðåçóëüòàòå ïîëó÷åíî ïîëíîå áèíàðíîå äåðåâî, êîòîðîå óäî-âëåòâîðÿåò îñíîâíîìó ñâîéñòâó êó÷è.Ïðèâåäåì ïðîãðàììíóþ ðåàëèçàöèþ îïåðàöèè äîáàâëåíèÿ ýëå-

ìåíòà.

82

Page 81: Теория алгоритмов. Котов В.М., Соболевская Е.П

procedure insert(x:integer; var H: array [0 . . . n] of integer;var Num, code:integer);

var i:integer;beginif Num = n then code := 1else

Num := Num + 1; i := Num; H[0] := x;while (x < H[i div 2]) do H[i] := H[i div 2]; i := i div 2;

H[i] := x; code := 0; end.

Òðóäîåìêîñòü îïåðàöèè äîáàâëåíèÿ îïðåäåëÿåòñÿ êîëè÷åñò-âîì âûïîëíåíèÿ öèêëà while è íå ïðåâûøàåò êîëè÷åñòâà óðîâ-íåé êó÷è, êîòîðîå ðàâíî log2 Num.

2. Óäàëåíèå ìèíèìàëüíîãî ýëåìåíòà èç áèíàðíîé êó÷è.

function delete_min(var H: array [0..n] of integer;var Num, code :integer):integer;

var i, child:integer;last_el:integer; stop:boolean;

beginif Num = 0 then code := 2else

delete_min := H[1]; last_el := H[Num];Num := Num− 1; i := 1; stop := False;while (2 ∗ i <= Num) and (not stop) do child := 2 ∗ i;if child < Num thenif H[child + 1] < H[child] then

child := child + 1;if last_el > H[child] then

H[i] := H[child]; i := child; else stop := True;

H[i] := last_el; code := 0;

end.

83

Page 82: Теория алгоритмов. Котов В.М., Соболевская Е.П

 ñèëó îñíîâíîãî ñâîéñòâà êó÷è ýëåìåíò ñ ìàêñèìàëüíûì ïðè-îðèòåòîì íàõîäèòñÿ â êîðíå ïîëíîãî áèíàðíîãî äåðåâà, ò. å. èìå-åò èíäåêñ 1. Ïîýòîìó ïîñëå óäàëåíèÿ ïåðâîãî ýëåìåíòà åãî ìå-ñòî çàéìåò òîò èç åãî ñûíîâåé èëè ïîñëåäíèé ýëåìåíò, êòî èìååòáîëüøèé ïðèîðèòåò. Îñâîáîäèâøååñÿ ìåñòî ñûíà çàéìåò åãî ñûíèëè ïîñëåäíèé ýëåìåíò, è òàê äàëåå. Ïîñëå òàêèõ ïðåîáðàçîâà-íèé âíóòðè êó÷è íå äîëæíî îñòàòüñÿ "ñâîáîäíûõ"ìåñò.Òðóäîåìêîñòü îïåðàöèè óäàëåíèÿ îïðåäåëÿåòñÿ êîëè÷åñòâîì

âûïîëíåíèÿ öèêëà while è íå ïðåâûøàåò êîëè÷åñòâà óðîâíåéêó÷è, êîòîðîå ðàâíî log2 Num.

Íà ðèñóíêàõ, ïðèâåäåííûõ äàëåå, ïîêàçàíà ïîñëåäîâàòåëü-íîñòü äåéñòâèé ïîñëå óäàëåíèÿ ìèíèìàëüíîãî ýëåìåíòà èç áè-íàðíîé êó÷è ("ïðåòåíäåíòû"íà ñâîáîäíîå ìåñòî âûäåëåíû).

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

10

16

25 20 60

25 40 33

17

21

29

´´ ee

¶¶ TT ·· JJ

¶¶ DD ­­ TT

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

16

25 20 60

25 40 33

17

21

29

´´ ee

¶¶ TT ·· JJ

¶¶ DD ­­ TT

-

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

´´ ee

¶¶ TT ·· JJ

¶¶ DD ­­ TT

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

´´ ee

¶¶ TT ·· JJ

¶¶ DD ­­±°²¯

16

17

25 21 20 60

25 40 33 29

16

17 20

25 21 29 60

25 40 33

-

3. Ñîçäàíèå áèíàðíîé êó÷è.Îäíèì èç ñïîñîáîâ ñîçäàíèÿ áèíàðíîé êó÷è äëÿ ïîñëåäî-

âàòåëüíîñòè A èç n ýëåìåíòîâ ìîæåò áûòü âûïîëíåíèå n ðàç

84

Page 83: Теория алгоритмов. Котов В.М., Соболевская Е.П

ïðîöåäóðû äîáàâëåíèÿ ýëåìåíòà. Òàê êàê ñëîæíîñòü ïðîöåäó-ðû äîáàâëåíèÿ íîâîãî ýëåìåíòà â áèíàðíóþ êó÷ó åñòü O(log n),òî ñëîæíîñòü ïîñòðîåíèÿ áèíàðíîé êó÷è ñòîèëî áû îæèäàòüïîðÿäêà O(n log n). Ïîêàæåì, ÷òî ñóùåñòâóåò àëãîðèòì ïîñòðî-åíèÿ áèíàðíîé êó÷è ñ òðóäîåìêîñòüþ O(n).

Ïåðâîíà÷àëüíî äëÿ ïîñëåäîâàòåëüíîñòè A èç n ýëåìåíòîâñòðîèì ïîëíîå áèíàðíîå äåðåâî:

for i := 1 to n do H[i] := A[i];Num:=n;

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

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

for i := (n div 2) downto 1 dopercolate_down(H, Num, i);

Çäåñü percolate_down(H, Num, i) ïðîöåäóðà, îáåñïå÷èâàþ-ùàÿ èíâàðèàíò äëÿ âåðøèíû ñ èíäåêñîì i.Äàííàÿ ïðîöåäóðà ñîñòîèò â ïåðåìåùåíèè òåêóùåãî ýëåìåíòà

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

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

Ïðîãðàììíàÿ ðåàëèçàöèÿ ïðîöåäóðû percolate_down áóäåòïðèâåäåíà äàëåå.

85

Page 84: Теория алгоритмов. Котов В.М., Соболевская Е.П

procedure percolate_down(var H: array [0..n] of integer;Num, i:integer);

varchild:integer;last_el:integer;stop:boolean;beginlast_el := H[i]; stop := False;while (2 ∗ i <= Num) and (not stop) do child := 2 ∗ i;if child < Num thenif H[child + 1] < H[child] then child := child + 1;

if last_el > H[child] then H[i] := H[child];i := child;

else stop := True;

H[i] := last_el;end;

Ñëåäóþùàÿ òåîðåìà äàåò îòâåò íà âîïðîñ: ÷åìó ðàâíà ñóììàâûñîò âñåõ âåðøèí áèíàðíîé êó÷è.Òåîðåìà 3.3. Äëÿ áèíàðíîé êó÷è âûñîòû h, êîòîðàÿ ñîäåð-æèò 2h+1 − 1 âåðøèí, ñóììà âûñîò âñåõ âåðøèí åñòü 2h+1 −1− (h + 1).Äîêàçàòåëüñòâî. Çàìåòèì, ÷òî áèíàðíàÿ êó÷à ñîäåðæèò 2i âåð-øèí íà âûñîòå h− i. Ñëåäîâàòåëüíî, ñóììà âûñîò âñåõ âåðøèíåñòü

S =h∑

i=0

2i(h−i) = h+2(h−1)+4(h−2)+8(h−3)+· · ·+2h−1. (3.1)

Óìíîæèì ðàâåíñòâî (3.1) íà äâà:

2S = 2h + 4(h− 1) + 8(h− 2) + · · ·+ 2h(1). (3.2)

Âû÷òåì èç ðàâåíñòâà (3.2) ðàâåíñòâî (3.1) è, ó÷èòûâàÿ, ÷òî

2h− 2(h− 1) = 2; 4(h− 1)− 4(h− 2) = 4, . . . ,

86

Page 85: Теория алгоритмов. Котов В.М., Соболевская Е.П

ïîëó÷èì

S = −h + 2 + 4 + 8 + · · ·+ 2h−1 + 2h =

(−h− 1) + (1 + 2 + 4 + · · ·+ 2h−1 + 2h) = −(h + 1) + (2h+1 − 1).

Äîêàçàòåëüñòâî òåîðåìû çàâåðøåíî. 2

Ó÷èòûâàÿ, ÷òî n = 2h+1 − 1, èç òåîðåìû 3.3 ñëåäóåò, ÷òîòðóäîåìêîñòü îïèñàííîãî àëãîðèòìà ïîñòðîåíèÿ áèíàðíîé êó÷èåñòü O(n).

3.5.2. Áèíîìèàëüíûå êó÷è

Îïðåäåëåíèå 3.11. Áèíîìèàëüíûé ëåñ ýòî ñåìåéñòâî áèíîìè-àëüíûõ äåðåâüåâ. Áèíîìèàëüíîå äåðåâî âûñîòû h = 0 ñîñòîèò èç îä-íîé åäèíñòâåííîé âåðøèíû; áèíîìèàëüíîå äåðåâî Bk âûñîòû h = kîáðàçóåòñÿ ïðèñîåäèíåíèåì áèíîìèàëüíîãî äåðåâà âûñîòû k − 1 êêîðíþ äðóãîãî áèíîìèàëüíîãî äåðåâà âûñîòû k − 1.

Íèæå ïîêàçàíû áèíîìèàëüíûå äåðåâüÿ B0, B1, B2 è B3. Èç ðèñóí-êà âèäíî, ÷òî áèíîìèàëüíîå äåðåâî Bk ñîñòîèò èç êîðíÿ, äëÿ êîòîðîãîñûíîâüÿìè ÿâëÿþòñÿ äåðåâüÿ B0, B1, · · ·Bk−1.

±°²¯

±°²¯

±°²¯JJ

±°²¯

±°²¯JJ

±°²¯

±°²¯JJ

hhh ±°²¯

±°²¯JJ ±°

²¯

±°²¯JJ

aaa±°²¯

±°²¯JJ ±°

²¯

±°²¯JJ

aaa

B2 B3

B0 B1

Íàçâàíèå "áèíîìèàëüíîå äåðåâî"îïðåäåëèë òîò ôàêò, ÷òî ó ëþ-áîãî áèíîìèàëüíîãî äåðåâà âûñîòû k íà ãëóáèíå d íàõîäèòñÿ ðîâíîCd

k âåðøèí, ãäå Cdk áèíîìèàëüíûé êîýôôèöèåíò:

(x+ a)m = xm +C1mxm−1a+ · · ·+Ck

mxm−kak + · · ·+Cm−1m xam−1 + am,

87

Page 86: Теория алгоритмов. Котов В.М., Соболевская Е.П

Cnm =

m ∗ (m− 1) ∗ · · · ∗ (m− n + 1)1 ∗ 2 ∗ · · · ∗ n

.

Òàê, äëÿ äåðåâà B3, èçîáðàæåííîãî âûøå:

d = 1; C13 = 3;

d = 2; C23 = 3;

d = 3; C33 = 1.

 äàëüíåéøåì ïîä ðàíãîì âåðøèíû äåðåâà áóäåì ïîíèìàòü êî-ëè÷åñòâî åå ñûíîâåé. Ðàíã äåðåâà ðàâåí ðàíãó åãî êîðíÿ. Çàìåòèì,÷òî ðàíã áèíîìèàëüíîãî äåðåâà ðàâåí åãî âûñîòå.

Áèíîìèàëüíîå äåðåâî âûñîòû k ñîäåðæèò ðîâíî 2k âåðøèí. Ïî-ýòîìó ëþáàÿ ïîñëåäîâàòåëüíîñòü èç n ýëåìåíòîâ ìîæåò áûòü ïðåä-ñòàâëåíà åäèíñòâåííûì îáðàçîì êàê ñåìåéñòâî áèíîìèàëüíûõ äåðå-âüåâ (íå áîëåå îäíîãî äåðåâà êàæäîãî ðàíãà). Ïðåäïîëîæèì, ÷òî n =13, ïåðåâåäåì ýòî ÷èñëî â äâîè÷íóþ ñèñòåìó ñ÷èñëåíèÿ:

1 1 0 123 22 21 20

Ýòî çíà÷èò, ÷òî äåðåâüÿ B0, B2, B3 ïðèñóòñòâóþò â ïðåäñòàâëåíèè, àäåðåâî B1 íåò.

Íàïðèìåð, ïðèîðèòåòíàÿ î÷åðåäü èç 6 ýëåìåíòîâ (6 = 01102)ïðåäñòàâëåíà ñëåäóþùèì íàáîðîì äåðåâüåâ: B1 è B2.

±°²¯

±°²¯PP ±°

²¯

±°²¯PP ±°

²¯

±°²¯PP

1618

12

2124

65

B1 B2

Îïðåäåëåíèå 3.12. Áèíîìèàëüíàÿ êó÷à ýòî áèíîìèàëüíûé ëåñ,äëÿ êîòîðîãî âûïîëíÿþòñÿ ñëåäóþùèå ñâîéñòâà (èíâàðèàíòû):

1. (èíâàðèàíò 1) êàæäàÿ âåðøèíà áèíîìèàëüíîé êó÷è óäîâëåòâî-ðÿåò îñíîâíîìó ñâîéñòâî êó÷è: ïðèîðèòåò îòöà íå íèæå ïðè-îðèòåòà åãî ñûíîâåé;

2. (èíâàðèàíò 2) â áèíîìèàëüíîì ëåñó íå äîëæíî áûòü áèíîìè-àëüíûõ äåðåâüåâ îäèíàêîâîãî ðàíãà.

88

Page 87: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðåäïîëîæèì, ÷òî êó÷à ñîäåðæèò n ýëåìåíòîâ, n ≤ 2m. Òîãäàäàííàÿ êó÷à ìîæåò áûòü ïðåäñòàâëåíà íàáîðîì èç íå áîëåå m áèíî-ìèàëüíûõ äåðåâüåâ (íå áîëåå îäíîãî êàæäîãî ðàíãà). Ñëåäîâàòåëüíî,êîëè÷åñòâî áèíîìèàëüíûõ äåðåâüåâ åñòü O(log n), ãäå n êîëè÷åñòâîýëåìåíòîâ â êó÷å.

Îñíîâíûå îïåðàöèè ñ áèíîìèàëüíûìè êó÷àìè

1. Ïîèñê ìèíèìàëüíîãî ýëåìåíòà.Ýòà ïðîöåäóðà òðåáóåò ïðîâåðêè êîðíåâûõ çíà÷åíèé âñåõ áè-

íîìèàëüíûõ äåðåâüåâ êó÷è. Äëÿ ýôôåêòèâíîé ðåàëèçàöèè äàí-íîé ïðîöåäóðû íåîáõîäèìî, ÷òîáû ñòðóêòóðà äàííûõ, èñïîëüçó-åìàÿ äëÿ õðàíåíèÿ áèíîìèàëüíîé êó÷è, îáåñïå÷èâàëà áûñòðûéäîñòóï ê êîðíåâûì çíà÷åíèÿì âñåõ áèíîìèàëüíûõ äåðåâüåâ (íà-ïðèìåð, êîðíåâûå âåðøèíû âñåõ áèíîìèàëüíûõ äåðåâüåâ îáú-åäèíåíû â ñâÿçíûé ñïèñîê).Òàê êàê êîëè÷åñòâî äåðåâüåâ ïîðÿäêà O(log n), òî òðóäîåì-

êîñòü àëãîðèòìà ïîèñêà ìèíèìàëüíîãî ýëåìåíòà åñòü O(log n).

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

H1 è H2 íîâîé áèíîìèàëüíîé êó÷è H3. Áóäåì ïðåäïîëàãàòü,÷òî ìû ïîääåðæèâàåì äëÿ êàæäîé áèíîìèàëüíîé êó÷è óïîðÿ-äî÷åííîñòü áèíîìèàëüíûõ äåðåâüåâ ïî èõ ðàíãàì, ÷òî ïîçâîëèòâûïîëíèòü ïðîöåññ ñëèÿíèÿ áîëåå ýôôåêòèâíî.

Ðàññìîòðèì ïðîöåññ ñëèÿíèÿ äâóõ êó÷, ïðåäñòàâëåííûõ íàðèñ.3.7.

• Òàê êàê áèíîìèàëüíàÿ êó÷à H2 ñîäåðæèò äåðåâî ðàíãà 0,à H1 íåò, òî äîáàâëÿåì ýòî äåðåâî â êó÷ó H3.

• Òàê êàê îáå áèíîìèàëüíûå êó÷è H1 è H2 ñîäåðæàò äåðåâüÿðàíãà 1, òî ñëèâàåì ýòè äåðåâüÿ, ïîëàãàÿ êîðåíü ñ áîëüøèìêîðíåâûì çíà÷åíèåì îäíèì èç ñûíîâåé êîðíÿ ñ ìåíüøèìêîðíåâûì çíà÷åíèåì.  ðåçóëüòàòå ïîëó÷àåì áèíîìèàëü-íîå äåðåâî ðàíãà h = 2. Ò. î., íîâàÿ êó÷à íå áóäåò èìåòüáèíîìèàëüíîãî äåðåâà ðàíãà 1.

• Òàê êàê ñåé÷àñ èìååòñÿ òðè áèíîìèàëüíûõ äåðåâà âûñîòûh = 2 (ïî îäíîìó â H1 è H2 è ïîëó÷åííîå íà ïðåäûäóùåì

89

Page 88: Теория алгоритмов. Котов В.М., Соболевская Е.П

n n

n

n

nn

n

``

n

n

n

n

nn

``16

18

12

21

24

65

13 14

26

23

51

24

65

H1 :

H2 :

LL

SS b

bb

ll ee bbb

Ðèñ. 3.7. Áèíîìèàëüíûå êó÷è H1 è H2

ýòàïå ñëèÿíèÿ), òî îäíî èç íèõ ìû ïîìåùàåì â êó÷ó H3, àäâà äðóãèõ ñëèâàåì è ïîëó÷àåì äåðåâî ðàíãà h = 3.

• Òàê êàê íè îäíà èç êó÷ H1 è H2 íå èìååò äåðåâà ðàíãà h =3, òî ïîìåùàåì ïîëó÷åííîå äåðåâî â êó÷ó H3 è çàâåðøàåìïðîöåññ ñëèÿíèÿ (ñì. ðèñ. 3.8).

l l

ll

l

PPl

ll

l

PPl

ll

l

PP13 23

51

24

65

12

21

24

65

14

26

16

18

TT AA

SS J

J

ee J

J

Ðèñ. 3.8. Áèíîìèàëüíàÿ êó÷à

Äëÿ ýôôåêòèâíîãî âûïîëíåíèÿ ïðîöåäóðû ñëèÿíèÿ äâóõ áè-íîìèàëüíûõ êó÷ íåîáõîäèìî, ÷òîáû ñòðóêòóðà äàííûõ, ðàçðà-áîòàííàÿ äëÿ õðàíåíèÿ áèíîìèàëüíîé êó÷è, èìåëà ñëåäóþùèéâèä:

• êàæäàÿ âåðøèíà ñîäåðæèò èíôîðìàöèþ î åå ðàíãå;• áèíîìèàëüíûå äåðåâüÿ óïîðÿäî÷åíû ïî ðàíãàì;

90

Page 89: Теория алгоритмов. Котов В.М., Соболевская Е.П

• êàæäàÿ âåðøèíà èìååò óêàçàòåëü íà ïåðâîãî ñûíà (nil, åñëèñûíîâåé íåò), óêàçàòåëè íà ëåâîãî è ïðàâîãî áðàòà;

• ñûíîâüÿ êàæäîé âåðøèíû ïðåäñòàâëåíû â âèäå äâóíàïðàâ-ëåííîãî ñïèñêà è óïîðÿäî÷åíû ïî ðàíãàì èõ ïîääåðåâüåâ;óêàçàòåëü ëåâîãî áðàòà ïåðâîãî ñûíà åñòü ïîñëåäíèé ñûí.

Ñ ó÷åòîì ðàçðàáîòàííîé ñòðóêòóðû äàííûõ, âðåìÿ íåîáõîäè-ìîå äëÿ ñëèÿíèÿ äâóõ áèíîìèàëüíûõ äåðåâüåâ ðàâíî êîíñòàíòå.Òàê êàê ñóùåñòâóåò íå áîëåå log n áèíîìèàëüíûõ äåðåâüåâ, òî

òðóäîåìêîñòü ïðîöåäóðû ñëèÿíèÿ äâóõ áèíîìèàëüíûõ êó÷ åñòüO(log n).

3. Äîáàâëåíèå íîâîãî ýëåìåíòà â êó÷ó.Î÷åâèäíî, ÷òî äàííàÿ ïðîöåäóðà ìîæåò ðàññìàòðèâàòüñÿ êàê

÷àñòíûé ñëó÷àé ïðîöåäóðû ñëèÿíèÿ. Ñîçäàäèì ñíà÷àëà êó÷ó,ñîñòîÿùóþ èç åäèíñòâåííîãî áèíîìèàëüíîãî äåðåâà B0 è âû-ïîëíèì ïðîöåäóðó ñëèÿíèÿ ïîñòðîåííîé êó÷è è èñõîäíîé êó÷è.Òðóäîåìêîñòü ïðîöåäóðû äîáàâëåíèÿ íîâîãî ýëåìåíòà â êó÷ó

åñòü O(log n).

4. Ñîçäàíèå áèíîìèàëüíîé êó÷è. Ïðåäïîëîæèì, ÷òî íàì íåîá-õîäèìî ñîçäàòü áèíîìèàëüíóþ êó÷ó èç n ýëåìåíòîâ. Îäíèì èçâîçìîæíûõ âàðèàíòîâ ñîçäàíèÿ êó÷è ÿâëÿåòñÿ âûçîâ n ðàç ïðî-öåäóðû äîáàâëåíèÿ ýëåìåíòà â êó÷ó.ýëåìåíòîâ îò 1 äî 7. ýòîì ñëó÷àå òðóäîåìêîñòü ïðîöåäóðû ñîçäàíèÿ êó÷è åñòü

O(n), õîòÿ ñëåäîâàëî áû îæèäàòü îöåíêó ïîðÿäêà O(n log n).Äëÿ ýòîãî îòìåòèì, ÷òî åñëè â óæå ñîçäàííîé êó÷å íàèìåíüøååïî ðàíãó íå ñóùåñòâóþùåå äåðåâî åñòü Bi, òî âðåìÿ äîáàâëåíèÿýëåìåíòà â êó÷ó ïðîïîðöèîíàëüíî i+1. Äëÿ ïðèìåðà, åñëè â êó-÷å H3 íå ñóùåñòâóåò äåðåâà ðàíãà 1, òî ïðîöåäóðà äîáàâëåíèÿíîâîãî ýëåìåíòà áóäåò îñóùåñòâëåíà çà äâà øàãà (îáðàçîâàíèåêó÷è èç îäíîãî åäèíñòâåííîãî ýëåìåíòà è ñëèÿíèå ñ óæå ñóùå-ñòâóþùèì äåðåâîì ðàíãà 1).Äëÿ äîêàçàòåëüñòâà äàííîé îöåíêè ââåäåì ôóíêöèþ ïîòåí-

öèàëîâ F (i), ðàâíóþ ÷èñëó äåðåâüåâ â áèíîìèàëüíîé êó÷å èç iýëåìåíòîâ.

91

Page 90: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

åñòü O(n).

5. Óäàëåíèå ìèíèìàëüíîãî ýëåìåíòà.Áóäåì ïðåäïîëàãàòü, ÷òî áèíîìèàëüíàÿ êó÷à ðåàëèçîâàíà â

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

• Äëÿ âûïîëíåíèÿ ïðîöåäóðû óäàëåíèÿ ìèíèìàëüíîãî ýëå-ìåíòà íåîáõîäèìî ñíà÷àëà íàéòè áèíîìèàëüíîå äåðåâî ñìèíèìàëüíûì êîðíåâûì çíà÷åíèåì. Ïðåäïîëîæèì, ÷òî ýòîäåðåâî Bk. Òîãäà òðóäîåìêîñòü ýòîãî øàãà àëãîðèòìà åñòüO(log n).

• Óäàëÿåì äåðåâî Bk èç êó÷è H, ôîðìèðóÿ íîâóþ áèíîìè-àëüíóþ êó÷ó H ′ (êó÷à H áåç äåðåâà Bk). Òðóäîåìêîñòü ýòî-ãî øàãà àëãîðèòìà åñòü O(1).

• Óäàëÿåì èç äåðåâà Bk êîðåíü, â ðåçóëüòàòå ÷åãî áèíàðíîåäåðåâî Bk ðàñïàäàåòñÿ íà äåðåâüÿ B0, B1, · · ·Bk−1, èç êîòî-ðûõ ìû îáðàçóåì íîâóþ áèíîìèàëüíóþ êó÷ó H ′′. Òàê êàêäëÿ êàæäîãî óçëà õðàíèì ññûëêè íà ïåðâîãî ñûíà, ëåâî-ãî è ïðàâîãî áðàòà, òî òðóäîåìêîñòü ýòîãî øàãà àëãîðèòìàðàâíà O(1).

• Âûïîëíÿåì îïåðàöèþ ñëèÿíèÿ êó÷ H ′ è H ′′. Òðóäîåìêîñòüñëèÿíèÿ äâóõ êó÷ åñòü O(log n).

Òðóäîåìêîñòü ïðîöåäóðû óäàëåíèÿ ìèíèìàëüíîãî ýëåìåíòàåñòü O(log n).

92

Page 91: Теория алгоритмов. Котов В.М., Соболевская Е.П

m m

m

m

m

PPm

m

m

m

PPm

m

m

m

PP

m m

mm

m

PPm m

m

m

mm

m

PP

m

m

m

m

PPm

m

m

m

PPm

m

m

m

PP

13 23

51

24

65

12

21

24

65

14

26

16

18

13 23

51

24

65

21 24

65

14

26

16

18

23

51

24

65

13

21

24

65

14

26

16

18

H3

H′ H′′

AA A

ASS S

SSS T

T

AA LLLL AA LL

JJ L

L

AA A

ATT L

L

Ðèñ. 3.9. Óäàëåíèå ìèíèìàëüíîãî ýëåìåíòà èç áèíîìèàëüíîé êó÷è.

Íà ðèñóíêå, ïðèâåäåííîì äàëåå, ïîêàçàíà êó÷à, ïîëó÷åííàÿ èçêó÷è H3 ïîñëå óäàëåíèÿ èç íåå ìèíèìàëüíîãî ýëåìåíòà ñ êëþ÷îì 12.

Áèíîìèàëüíîå äåðåâî èñõîäíîé êó÷è H3 ñ êîðíåì, ñîäåðæàùèìêëþ÷åâîå çíà÷åíèå 12 (âûñîòû 3) ðàñïàäàåòñÿ íà òðè äåðåâà ðàíãà0, 1 è 2 ñîîòâåòñòâåííî, êîòîðûå îáðàçóþò áèíîìèàëüíóþ êó÷ó H ′′.Îñòàëüíûå äâà äåðåâüÿ èñõîäíîé êó÷è H3 ñ êîðíÿìè, ñîäåðæàùèìèêëþ÷åâûå çíà÷åíèÿ 13 è 23 îáðàçóþò áèíîìèàëüíóþ êó÷ó H ′. Ïîñëå÷åãî âûïîëíÿåòñÿ ïðîöåäóðà ñëèÿíèÿ äâóõ êó÷ H ′ è H ′′.

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

93

Page 92: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

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

typetree_ptr =↑ tree_node;tree_node =recordelement:integer;rank :integer;f_child : tree_ptr;l_sib : tree_ptr;r_sib : tree_ptr;

end;Priority_Queue = tree_ptr;

 êà÷åñòâå ïðèìåðà, äëÿ ðàññìîòðåííîé ðàíåå áèíîìèàëüíîé êó-÷å H3, ïðèâåäåì ñîîòâåòñòâóþùóþ åé ìóëüòèñïèñêîâóþ ñòðóêòóðà.

n n

n n

n

n

n n n

n n n

n

-¾13 23 12

51 24

65

21 24 14

65 26 16

18

-¾ -¾

?

0 23

0 1

0

0 1 2

0 0

0

AA

1

-¾? ?

@@

@@

?

­­

­­À ?

AA

´+

½½= ¡¡ª?¡¡ª?

JJ B

BBBBN

@@ @@

Ïðèâåäåì ïðîãðàììíóþ ðåàëèçàöèþ ïðîöåäóðû ñëèÿíèÿ äâóõáèíîìèàëüíûõ êó÷ merge(H1,H2), êîòîðàÿ èñïîëüçóåò ôóíêöèþ ñëè-ÿíèÿ äâóõ áèíîìèàëüíûõ äåðåâüåâ merge_tree(T1, T2) è ïðåäïîëà-ãàåò, ÷òî ñóùåñòâóåò òàêàÿ ôóíêöèÿ extract(T, H), êîòîðàÿ óäàëÿåòäåðåâî T èç áèíîìèàëüíîé êó÷è H.

94

Page 93: Теория алгоритмов. Котов В.М., Соболевская Е.П

function merge_tree(T1, T2 : Priority_Queue):Priority_Queue;

beginif T1 ↑ .element > T2 ↑ .element then swap(T1, T2);if T1 ↑ .rank = 0 then T1 ↑ .f_child := T2;else T2 ↑ .l_sib := T1 ↑ .f_child ↑ .l_sib;T2 ↑ .l_sib ↑ .r_sib := T2;T1 ↑ .f_child ↑ .l_sib := T2;

T1 ↑ .rank := T1 ↑ .rank + 1;merge_tree := T1;

end;

function merge(H1,H2 : Priority_Queue) :PriorityQueue;

var H2 : Priority_Queue;T1, T2, T3 : Priority_Queue;

beginif H1 = nil then merge := H2

elseif H2 = nil then merge := H1

elseif H1 ↑ .rank < H2 ↑ .rank then extract(T1,H1); H3 := merge(H1,H2);T1 ↑ .l_sib := H3 ↑ .l_sib;H3 ↑ .l_sib. ↑ .r_sib := nil;T1 ↑ .r_sib := H3; H3 ↑ .l_sib := T1; merge := T1;

elseif H2 ↑ .rank < H1 ↑ .rank then merge := merge(H2,H1)4else extract(T1,H1); extract(T2,H2);H3 := merge(H1,H2); T3 := merge_tree(T1, T2);merge := merge(H3, T3);

end;

95

Page 94: Теория алгоритмов. Котов В.М., Соболевская Е.П

3.5.3. Êó÷è Ôèáîíà÷÷èÍàçâàíèå êó÷è Ôèáîíà÷÷è îáóñëîâëåíî òåì, ÷òî äëÿ äîêàçàòåëü-

ñòâà îöåíîê òðóäîåìêîñòè îïåðàöèé èñïîëüçóþòñÿ ÷èñëà Ôèáîíà÷÷è.Íàïîìíèì, ÷òî ïîñëåäîâàòåëüíîñòü ÷èñåë Ôèáîíà÷÷è îïðåäåëÿåòñÿñëåäóþùèì îáðàçîì:

F (k) =

1, åñëè k = 1, 2,F (k − 1) + F (k − 2), åñëè k > 2 .

Ñâîéñòâî 3.1. Äëÿ k ≥ 3 ñïðàâåäëèâû ñëåäóþùèå ñîîòíîøåíèÿ:

F (k) ≥ 2(k−1)

2 ; (3.3)

F (k) = 1 + F (1) + F (2) + . . . + F (k − 2). (3.4)Äîêàçàòåëüñòâî. Äîêàæåì ñíà÷àëà ñîîòíîøåíèå (3.7). Ïî îïðåäåëå-íèþ ÷èñåë Ôèáîíà÷÷è äëÿ k ≥ 3

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

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

F (k − 1) ≥ F (k − 2),

ïîëó÷èì:F (k) ≥ 2F (k − 2). (3.5)

Åñëè k íå÷åòíî, òî, èñïîëüçóÿ íåðàâåíñòâî (3.5), ïîëó÷èì ñî-îòíîøåíèå (3.7):

F (k) ≥ 2F (k − 2) ≥ 22F (k − 4) ≥ . . . ≥ 2(k−1)

2 F (1) = 2(k−1)

2 .

Åñëè k ÷åòíî, òî ïðèìåíèì äëÿ äîêàçàòåëüñòâà ìåòîä ìàòåìà-òè÷åñêîé èíäóêöèè. Ïóñòü k = 4. Òîãäà íåðàâåíñòâî

F (4) ≥ 23/2

âûïîëíÿåòñÿ, òàê êàê F (4) = 3. Ïðåäïîëîæèì, ÷òî ñîîòíîøåíèå (3.7)èñòèííî äëÿ âñåõ ÷åòíûõ ÷èñåë, ìåíüøèõ k è, ñ ó÷åòîì åãî âåðíîñòèäëÿ íå÷åòíûõ çíà÷åíèé k, èìååì

F (k) = F (k−1)+F (k−2) ≥ 2(k−2)

2 +2(k−3)

2 = 2(k−3)

2

(21/2 + 1

)≥ 2

(k−1)2 .

96

Page 95: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ñëåäîâàòåëüíî ñîîòíîøåíèå (3.7) âûïîëíÿåòñÿ è äëÿ íå÷åòíûõ çíà-÷åíèé k.

Äîêàæåì ñåé÷àñ ñîîòíîøåíèå (3.8). Äëÿ äîêàçàòåëüñòâà áóäåìèñïîëüçîâàòü ìåòîä ìàòåìàòè÷åñêîé èíäóêöèè. Ïðîâåðèì èñòèííîñòüðàâåíñòâà (3.8) äëÿ k = 3. Ïîëó÷àåì

F (3) = F (2) + F (1) = 1 + F (1),

ñëåäîâàòåëüíî, ðàâåíñòâî (3.8) âûïîëíÿåòñÿ. Ïðåäïîëîæèì, ÷òî

F (k) = F (1) + F (2) + . . . + F (k − 2),

è äîêàæåì âåðíîñòü ñîîòíîøåíèÿ (3.8) äëÿ k + 1. Äåéñòâèòåëüíî

F (k + 1) = F (k) + F (k − 1) = F (1) + F (2) + . . . + F (k − 1).

Ïîýòîìó ñîîòíîøåíèå (3.8) âûïîëíÿåòñÿ è äîêàçàòåëüñòâî ñâîéñòâà3.1 çàâåðøåíî. 2

Ñâîéñòâî 3.2. Åñëè ïîñëåäîâàòåëüíîñòü ÷èñåë G(k) óäîâëåòâîðÿ-åò ñîîòíîøåíèÿì:

G(1) = 1, G(2) = 1,

G(k) ≥ 1 + G(1) + G(2) + . . . + G(k − 2), ∀ k ≥ 3,

òîG(k) ≥ F (k). (3.6)

Äîêàçàòåëüñòâî. Ïðîâåäåì äîêàçàòåëüñòâî ïî èíäóêöèè. Åñëè k = 3,òî

G(3) ≥ 1 + G(1) = 2 = F (3).

Ïðåäïîëîæèì, ÷òî G(k) ≥ F (k) äëÿ âñåõ çíà÷åíèé k äî q − 1 è äî-êàæåì åãî âåðíîñòü äëÿ k = q. Äåéñòâèòåëüíî, ñ ó÷åòîì ðàâåíñòâà(3.8), ïîëó÷àåì

G(q) ≥ 1 + G(1) + . . . + G(q − 2) ≥ 1 + F (1) + . . . + F (q − 2) = F (q).

Ñëåäîâàòåëüíî, íåðàâåíñòâî (3.6) âûïîëíÿåòñÿ. 2

Ðàññìîòðèì ñåìåéñòâî êîðíåâûõ äåðåâüåâ (êàæäîé âåðøèíå äå-ðåâà ïîñòàâëåíî â ñîîòâåòñòâèå íåêîòîðîå êëþ÷åâîå çíà÷åíèå) è äëÿíåãî îïðåäåëèì ñëåäóþùèå ïðîöåäóðû :

97

Page 96: Теория алгоритмов. Котов В.М., Соболевская Е.П

• ïðîöåäóðà link(i, j) ñîñòîèò â ñëèÿíèè äâóõ äåðåâüåâ îäèíàêîâî-ãî ðàíãà, êîðíÿìè êîòîðûõ ÿâëÿþòñÿ âåðøèíû i è j (ïîä ðàíãîìâåðøèíû â äàëüíåéøåì áóäåì ïîíèìàòü êîëè÷åñòâî åå ñûíî-âåé); ïðè ñëèÿíèè êîðåíü äåðåâüåâà ñ áîëüøèì êëþ÷åâûì çíà-÷åíèåì ñòàíîâèòñÿ îäíèì èç ñûíîâåé êîðíÿ äåðåâà ñ ìåíüøèìêëþ÷åâûì çíà÷åíèåì;

• ïðîöåäóðà cut(i) ñîñòîèò â òîì, ÷òî âûðåçàåòñÿ âåðøèíà i âìåñòåñî ñâîèìè ïîääåðåâüÿìè, çàòåì îáðàçóåòñÿ íîâîå äåðåâî, êîðíåìêîòîðîãî ÿâëÿåòñÿ âåðøèíà i.

Îïðåäåëåíèå 3.13. Êó÷à Ôèáîíà÷÷è ýòî ñåìåéñòâî êîðíåâûõäåðåâüåâ, äëÿ êîòîðîãî âûïîëíÿþòñÿ ñëåäóþùèå ñâîéñòâà (èíâàðè-àíòû):

1. (èíâàðèàíò 1) êàæäàÿ âåðøèíà â êó÷å Ôèáîíà÷÷è óäîâëåòâî-ðÿåò îñíîâíîìó ñâîéñòâó êó÷è: ïðèîðèòåò îòöà íå íèæå ïðè-îðèòåòà êàæäîãî èç åãî ñûíîâåé;

2. (èíâàðèàíò 2) â ñåìåéñòâå êîðíåâûõ äåðåâüåâ íåò äâóõ äåðå-âüåâ ñ êîðíÿìè îäèíàêîâîãî ðàíãà;

3. (èíâàðèàíò 3) êàæäàÿ íå êîðíåâàÿ âåðøèíà â êó÷å Ôèáîíà÷÷èìîæåò ïîòåðÿòü íå áîëåå îäíîãî ñûíà ïðè âûïîëíåíèè ïðîöå-äóðû cut.

Ðàññìîòðèì âñå äåðåâüÿ êó÷è ðàíãà k : T k1 , . . . , T k

l . Êàæäîå èçäåðåâüåâ T k

i ñîäåðæèò íåêîòîðîå ÷èñëî âåðøèí G(T ki ). Ïóñòü

G(k) = mini=1,...,l

G(T ki ).

Ñâîéñòâî 3.3. Ñïðàâåäëèâî ñëåäóþùåå íåðàâåíñòâî: G(k) ≥ F (k).Äîêàçàòåëüñòâî. Ïóñòü w âåðøèíà â êó÷å Ôèáîíà÷÷è ñ ðàíãîìk. Óïîðÿäî÷èì ñûíîâåé âåðøèíû w â òîì æå ïîðÿäêå, â êîòîðîìïðåäûäóùèå îïåðàöèè ïðèñîåäèíÿëè èõ ê w (îò ðàííèõ ê ïîçäíèì),è äîêàæåì, ÷òî ðàíã i-ãî ñûíà âåðøèíû w êàê ìèíèìóì (i− 2).

Ïóñòü yi åñòü i-é ñûí âåðøèíû w è ðàññìîòðèì ìîìåíò, êîãäà âåð-øèíà yi ïðèñîåäèíèëàñü ê âåðøèíå w. Ïåðåä ýòèì âåðøèíà w èìåëàêàê ìèíèìóì (i − 1) ñûíà (âåðøèíà w ìîãëà èìåòü è áîëüøå ñûíî-âåé, íî îíè áûëè óäàëåíû ïðè âûïîëíåíèè ïðîöåäóðû cut). Òàê êàê

98

Page 97: Теория алгоритмов. Котов В.М., Соболевская Е.П

â ìîìåíò ïðèñîåäèíåíèÿ êîðíè yi è w èìåëè îäèí è òîò æå ðàíã, òîâåðøèíà yi äîëæíà áûëà èìåòü êàê ìèíèìóì (i− 1) ñûíà.

Çàìåòèì, ÷òî ïîñëå ïðèñîåäèíåíèÿ âåðøèíû yi ê âåðøèíå w âåð-øèíà yi ñòàëà íå êîðíåâîé è ìîãëà ïîòåðÿòü íå áîëåå îäíîãî ñûíà(èíâàðèàíò 3). Ñëåäîâàòåëüíî âåðøèíà yi äîëæíà èìåòü êàê ìèíè-ìóì (i− 2) ñûíà.

Òàêèì îáðàçîì ïîääåðåâî ñ êîðíåì â âåðøèíå w ñîäåðæèò êàêìèíèìóì

G(k) ≥ 1 + G(1) + G(2) + ... + G(k − 2)

âåðøèí è ïî ñâîéñòâó 3.2 çàêëþ÷àåì, ÷òî G(k) ≥ F (k). 2

Ëåììà 3.1. Ìàêñèìàëüíî âîçìîæíûé ðàíã ëþáîãî óçëà â êó÷å Ôè-áîíà÷÷è ðàâåí 2 log n + 1.

Äîêàçàòåëüñòâî. Ó÷èòûâàÿ òîò ôàêò, ÷òî íèêàêîå ïîääåðåâî íå ìî-æåò ñîäåðæàòü áîëüøå ÷åì n óçëîâ, è ñâîéñòâà 3.1, 3.2, 3.3, ïîëó÷àåìñëåäóþùèå íåðàâåíñòâà:

n ≥ G(k) ≥ F (k) ≥ 2k−12 .

Ëîãàðèôìèðóÿ, ïîëó÷èì 2 log n + 1 ≥ k. Òàêèì îáðàçîì, ìàêñèìàëü-íî âîçìîæíûé ðàíã ëþáîãî óçëà â êó÷å Ôèáîíà÷÷è íå ïðåâîñõîäèò2 log n + 1. 2

Òåîðåìà 3.4. Êó÷à Ôèáîíà÷÷è ñîñòîèò íå áîëåå ÷åì èç 2 log n + 2êîðíåâûõ äåðåâüåâ.Äîêàçàòåëüñòâî.  ñèëó ëåììû 3.1 ìàêñèìàëüíûé ðàíã êîðíÿ ëþáî-ãî äåðåâà íå ïðåâîñõîäèò âåëè÷èíû 2 log n + 1. Òàê êàê â êó÷å Ôèáî-íà÷÷è íå ñóùåñòâóåò äâóõ äåðåâüåâ îäèíàêîâîãî ðàíãà, òî îñòàëüíûåäåðåâüÿ ìîãóò èìåòü ðàíãè 2 log n, 2 log n− 1, . . . , 1, 0.

Ñëåäîâàòåëüíî êó÷à Ôèáîíà÷÷è ñîñòîèò íå áîëåå ÷åì èç 2 log n+2êîðíåâûõ äåðåâüåâ. 2

Ñåé÷àñ îïèøåì îñíîâíûå îïåðàöèè äëÿ êó÷è Ôèááîíà÷è è ïîêà-æåì, ÷òî äëÿ èõ ðåàëèçàöèè äîñòàòî÷íî èñïîëüçîâàòü ïîñëåäîâàòåëü-íîñòü ïðîöåäóð link è cut. Äëÿ âûïîëíåíèÿ ýòèõ ïðîöåäóð íåîáõîäè-ìî äëÿ êàæäîé âåðøèíû i äåðåâà õðàíèòü ñëåäóþùóþ èíôîðìàöèþ:

• îòåö âåðøèíû: pred(i);

• êëþ÷åâîå çíà÷åíèå âåðøèíû: key(i) (â äàëüíåéøåì áóäåì ïðåä-ïîëàãàòü, ÷òî key(i) = i);

99

Page 98: Теория алгоритмов. Котов В.М., Соболевская Е.П

• ìíîæåñòâî ñûíîâåé (ýòî ìíîæåñòâî ìîæåò áûòü çàäàíî â âèäåäâóíàïðàâëåííîãî ñïèñêà);

• ðàíã âåðøèíû: rank(i).

Òàêæå íàì â ïîíàäîáÿòñÿ ñëåäóþùèå äàííûå:

• óêàçàòåëü íà êîðåíü äåðåâà ñ ìèíèìàëüíûì êëþ÷åâûì çíà÷å-íèåì minkey;

• ìàññèâ bucket (îò 0 äî 2 log n + 1) ; k-ûé ýëåìåíò ìàññèâà ðà-âåí êîðíþ äåðåâà ðàíãà k â êó÷å Ôèáîíà÷÷è, åñëè â êó÷å íåñóùåñòâóåò äåðåâà ðàíãà k, òî bucket(k) = 0;

• âñïîìîãàòåëüíûé ìàññèâ list (îò 0 äî 2 log n+1); list(k) ñïèñîêêîðíåé äåðåâüåâ ðàíãà k;

• äëÿ êàæäîé âåðøèíû i äåðåâà çàäàäèì âåëè÷èíó lost(i), êîòîðàÿáóäåò ïðèíèìàòü îäíî èç òðåõ çíà÷åíèé 0, 1 èëè 2;

Ñâîéñòâî 3.4. Ïðîöåäóðû link è cut òðåáóþò O(1) âðåìåíè äëÿâûïîëíåíèÿ.

Îñíîâíûå îïåðàöèè ñ êó÷åé Ôèáîíà÷÷è.

1. Ïîèñê ìèíèìàëüíîãî ýëåìåíòà.

Òàê êàê ìû õðàíèì óêàçàòåëü íà êîðåíü äåðåâà ñ ìèíèìàëüíûìêëþ÷åâûì çíà÷åíèåì minkey, òî òðóäîåìêîñòü ïîèñêà ìèíèìàëüíîãîýëåìåíòà ðàâíà O(1).

2.Äîáàâëåíèå íîâîãî ýëåìåíòà â êó÷ó.

Äëÿ âûïîëíåíèÿ ýòîé îïåðàöèè ñíà÷àëà ôîðìèðóåì íîâîå êîðíå-âîå äåðåâî, ñîñòîÿùåå èç åäèíñòâåííîé âåðøèíû ñ êëþ÷îì x. Ïîñëåýòîãî ìîæåò áûòü íàðóøåí èíâàðèàíò 2 è äëÿ åãî âîññòàíîâëåíèÿìîæåò ïîòðåáîâàòüñÿ ïîñëåäîâàòåëüíîñòü ïðîöåäóð link (ñì. äàëååïðîöåäóðó âîññòàíîâëåíèÿ èíâàðèàíòà 2). Êîððåêòèðóåì, åñëè íåîá-õîäèìî çíà÷åíèå minkey.

Òðóäîåìêîñòü îïåðàöèè äîáàâëåíèÿ íîâîãî ýëåìåíòà ðàâíà òðó-äîåìêîñòè âîññòàíîâëåíèÿ èíâàðèàíòà 2.

100

Page 99: Теория алгоритмов. Котов В.М., Соболевская Е.П

3. Óäàëåíèå ìèíèìàëüíîãî ýëåìåíòà èç êó÷è.

Óäàëÿåì ñ ïîìîùüþ èñõîäíûõ ïðîöåäóð cut âñåõ ñûíîâåé êîðíÿäåðåâà, íà êîòîðîå óêàçûâàåò çíà÷åíèå minkey (êàæäûé èç ñûíîâåé xêîðíÿ minkey ïîðîæäàåò íîâîå äåðåâî ñåìåéñòâà ñ êîðíåì â âåðøèíåx.) Âîññòàíàâëèâàåì, åñëè íåîáõîäèìî èíâàðèàíò 2. Ñëåäóåò çàìå-òèòü, ÷òî òàê êàê èñõîäíûå ïðîöåäóðû cut ïðèìåíÿëàñü äëÿ ñûíîâåéêîðíÿ äåðåâà, òî èíâàðèàíò 3 íå íàðóøàåòñÿ (êîðíåâàÿ âåðøèíà ìî-æåò òåðÿòü â ðåçóëüòàòå âûïîëíåíèÿ ïðîöåäóð cut ëþáîå êîëè÷åñòâîñûíîâåé).

Òàê êàê òðóäîåìêîñòü âûïîëíåíèÿ âñåõ èñõîäíûõ ïðîöåäóð cutðàâíà O(log n), òî òðóäîåìêîñòü îïåðàöèè óäàëåíèÿ ðàâíà òðóäîåì-êîñòè âîññòàíîâëåíèÿ èíâàðèàíòà 2 ïëþñ O(log n).

4. Óìåíüøåíèå êëþ÷à âåðøèíû i íà çíà÷åíèå value.

Ïîñëå òîãî, êàê ìû óìåíüøèëè êëþ÷ âåðøèíû i íà çíà÷åíèåvalue, êàæäàÿ âåðøèíà â ïîääåðåâå ñ êîðíåì â âåðøèíå i óäîâëå-òâîðÿåò èíâàðèàíòó 1, íî äëÿ âåðøèíû j = pred(i) (îòöà âåðøèíûi) ýòîò èíâàðèàíò ìîæåò íàðóøèòñÿ. Åñëè ýòî ïðîèçîøëî, òî ìû âû-ïîëíÿåì íà÷àëüíóþ ïðîöåäóðó cut(i), ìîäèôèöèðóåì, åñëè íåîáõîäè-ìî, çíà÷åíèå minkey. Âûïîëíåíèå íà÷àëüíîé ïðîöåäóðû cut(i) ìîãëîïðèâåñòè ê íàðóøåíèþ èíâàðèàíòà 3 äëÿ âåðøèíû j. Âîññòàíàâëè-âàåì èíâàðèàíò 3. Ïîñëå òîãî, êàê âîññòàíîâëåí èíâàðèàíò 3, ìîæåòíàðóøèòñÿ èíâàðèàíò 2, åñëè ýòî òàê, òî âîññòàíàâëèâàåì åãî.

Òðóäîåìêîñòü îïåðàöèè óìåíüøåíèÿ êëþ÷à ïðîïîðöèîíàëüíà êî-ëè÷åñòâó âûïîëíåííûõ ïðîöåäóð cut, íåîáõîäèìûõ äëÿ ïîääåðæêèèíâàðèàíòà 3 ïëþñ òðóäîåìêîñòü âîññòàíîâëåíèÿ èíâàðèàíòà 2.

5. Óâåëè÷åíèå êëþ÷à âåðøèíû i íà çíà÷åíèå value.

Ïîñëå òîãî, êàê ìû óâåëè÷èëè êëþ÷ âåðøèíû i íà çíà÷åíèåvalue, äëÿ îòöà âåðøèíû i èíâàðèàíò 1 âûïîëíÿåòñÿ, íî äëÿ íåêîòî-ðûõ ñûíîâåé j âåðøèíû i ýòîò èíâàðèàíò ìîæåò íàðóøèòñÿ. Åñëè ýòîïðîèçîøëî, òî ìû âûïîëíÿåì èñõîäíûå ïðîöåäóðû cut(j). Âûïîëíå-íèå èñõîäíûõ ïðîöåäóð cut(j) ìîãëî ïðèâåñòè ê íàðóøåíèþ èíâàðè-àíòà 3 äëÿ âåðøèíû i. Âîññòàíàâëèâàåì èíâàðèàíò 3. Ïîñëå òîãî,

101

Page 100: Теория алгоритмов. Котов В.М., Соболевская Е.П

êàê âîññòàíîâëåí èíâàðèàíò 3, ìîæåò íàðóøèòñÿ èíâàðèàíò 2, åñëèýòî òàê, òî âîññòàíàâëèâàåì åãî.

Òðóäîåìêîñòü îïåðàöèè óâåëè÷åíèÿ êëþ÷à ïðîïîðöèîíàëüíà êî-ëè÷åñòâó èñõîäíûõ ïðîöåäóð cut (èõ êîëè÷åñòâî O(log n)) ïëþñ êî-ëè÷åñòâî ïîðîæäåííûõ ïðîöåäóð cut, íåîáõîäèìûõ äëÿ ïîääåðæêèèíâàðèàíòà 3 è ïëþñ òðóäîåìêîñòü âîññòàíîâëåíèÿ èíâàðèàíòà 2.

Îïèøåì òåïåðü ïîñëåäîâàòåëüíîñòü äåéñòâèé, êîòîðûå íåîáõî-äèìî âûïîëíèòü, ÷òîáû âîññòàíîâèòü èíâàðèàíòû êó÷è Ôèáîíà÷÷è.

Âîññòàíîâëåíèå èíâàðèàíòà 2(íèêàêèå äâå êîðíåâûå âåðøèíû

íå äîëæíû èìåòü îäèíàêîâîãî ðàíãà).

Åñëè èíâàðèàíò 2 íàðóøèëñÿ ïðè âûïîëíåíèè ïðîöåäóðû cut, òîçàíåñåì â ìàññèâ list êîðíè âñåõ äåðåâüåâ, ïîëó÷åííûõ â ðåçóëüòàòåâûïîëíåíèÿ èñõîäíûõ è ïîðîæäåííûõ ïðîöåäóð cut.

Çàïèñûâàÿ êîðíè â ìàññèâ list, áóäåì çàáîòèòüñÿ î òîì, ÷òîáûêàæäûé ýëåìåíò ñïèñêà ìàññèâà list ñîäåðæàë íå áîëåå îäíîãî ýëå-ìåíòà. Äëÿ ýòîãî, íàïðèìåð, ìîæíî ïîñòóïèòü ñëåäóþùèì îáðàçîì:åñëè ìû õîòèì çàíåñòè â ìàññèâ list êîðåíü äåðåâà x ðàíãà k, à ñïèñîêlist(k) íå ïóñò, òî âûïîëíÿåì ïðîöåäóðó link äëÿ äåðåâà ñ êîðíåì xè äåðåâà list(k). Ïîñëå ÷åãî list(k) ïîëàãàåì ïóñòûì, à êîðåíü ïîëó-÷åííîãî â ðåçóëüòàòå ñëèÿíèÿ äåðåâà ðàíãà k + 1 ïûòàåìñÿ äîáàâèòüâ ñïèñîê list(k+1) è ò. ä., ïîêà íå íàéäåì ïîäõîäÿùèé ïóñòîé ñïèñîê.Òàê êàê êàæäàÿ ïðîöåäóðà link óìåíüøàåò êîëè÷åñòâî äåðåâüåâ íà1, òî òðóäîåìêîñòü ôîðìèðîâàíèÿ ìàññèâà list ïðîïîðöèîíàëüíà êî-ëè÷åñòâó èñõîäíûõ è ïîðîæäåííûõ ïðîöåäóð cut. Çàìåòèì, ÷òî åñëèíàðóøåíèå èíâàðèàíòà ïðîèçîøëî ïðè âûïîëíåíèè ïðîöåäóðû óäà-ëåíèÿ ìèíèìàëüíîãî ýëåìåíòà, òî ó íàñ òîëüêî íà÷àëüíûå ïðîöåäó-ðû cut è èõ êîëè÷åñòâî íå ïðåâîñõîäèò O(log n). Åñëè æå íàðóøåíèåèíâàðèàíòà ïðîèçîøëî ïðè âûïîëíåíèè îïåðàöèé óìåíüøåíèÿ (óâå-ëè÷åíèÿ) êëþ÷à, òî ó íàñ áóäóò êàê íà÷àëüíûå, òàê è ïîðîæäåííûåïðîöåäóðû cut è îá èõ êîëè÷åñòâå ìû íè÷åãî ñêàçàòü íå ìîæåì.

Åñëè èíâàðèàíò 2 íàðóøèëñÿ ïðè âûïîëíåíèè îïåðàöèè äîáàâ-ëåíèÿ íîâîãî ýëåìåíòà x â êó÷ó, òî çàíåñåì â ìàññèâ list åäèíñòâåí-íûé ýëåìåíò, êîòîðûé ñîîòâåòñòâóåò êîðíþ äåðåâà ðàíãà íîëü ñ êëþ-÷åâûì çíà÷åíèåì x.

Òåïåðü ó íàñ åñòü äâà ìàññèâà: list è bucket ðàçìåðíîñòè O(log n),äëÿ êàæäîãî èç êîòîðûõ âûïîëíÿåòñÿ èíâàðèàíò 2. Âûïîëíèì ñëèÿ-

102

Page 101: Теория алгоритмов. Котов В.М., Соболевская Е.П

íèå ýòèõ ìàññèâîâ â ìàññèâ bucket òàêèì îáðàçîì, ÷òî äëÿ íåãî òàêæåáóäåò âûïîëíåí èíâàðèàíò 2. Ýòî ìîæíî ñäåëàòü, íàïðèìåð, èñïîëü-çóÿ ñëåäóþùóþ ïðîöåäóðó.

beginl := 0;for k := 0 to 2 log n + 1 doif l = 0 thenbeginif (bucket(k) = 0) and (list(k) 6= 0) then

bucket(k) := list(k);if (bucket(k) 6= 0) and (list(k) 6= 0) then

bucket(k) := 0; l := link(bucket(k), list(k)); end

elsebeginif (bucket(k) = 0) and (list(k) = 0) then

bucket(k) := l; l := 0; if (bucket(k) 6= 0) and (list(k) = 0) then

bucket(k) =: 0; l := link(l, bucket(k)); if (list(k) 6= 0)) then

l := link(l, list(k));end

end.

Òðóäîåìêîñòü ñëèÿíèÿ äâóõ ìàññèâîâ ïðîïîðöèîíàëüíà èõ ðàçìåðíî-ñòÿì è ðàâíà O(log n).Òåîðåìà 3.5. Äëÿ îñíîâíûõ îïåðàöèé ñ êó÷åé Ôèáîíà÷÷è ñïðàâåä-ëèâû ñëåäóþùèå îöåíêè òðóäîåìêîñòè â õóäøåì ñëó÷àå:1) ïîèñê ìèíèìàëüíîãî ýëåìåíòà O(1);2) äîáàâëåíèå íîâîãî ýëåìåíòà O(log n);3) óäàëåíèå ìèíèìàëüíîãî ýëåìåíòà O(log n).

Âîññòàíîâëåíèå èíâàðèàíòà 3(êàæäàÿ íå êîðíåâàÿ âåðøèíà â êó÷å Ôèáîíà÷÷è

ìîæåò ïîòåðÿòü íå áîëåå îäíîãî ñûíàïðè âûïîëíåíèè ïðîöåäóðû cut)

Èíâàðèàíò 3 ìîã íàðóøèòüñÿ ïðè âûïîëíåíèè îïåðàöèè óìåíü-øåíèÿ (óâåëè÷åíèÿ) êëþ÷à íåêîòîðîé âåðøèíû. Äëÿ âîññòàíîâëåíèÿ

103

Page 102: Теория алгоритмов. Котов В.М., Соболевская Е.П

ýòîãî èíâàðèàíòà áóäåì õðàíèòü äëÿ êàæäîé âåðøèíû i äîïîëíèòåëü-íûé èíäåêñ lost(i) :

- äëÿ êîðíåâîé âåðøèíû lost(i) = 0;

- äëÿ íå êîðíåâîé âåðøèíû lost(i) ðàâåí ÷èñëó ñûíîâåé, êîòîðûåâåðøèíà i ïîòåðÿëà ïîñëå òîãî, êàê ñòàëà íå êîðíåâîé âåðøèíîé.

Åñëè lost(i) = 2, òî ê âåðøèíå i ïðèìåíèì ïîðîæäåííóþ ïðîöåäóðócut(i).  ñâîþ î÷åðåäü ïðîöåäóðà cut(i) ìîæåò ïîðîäèòü ïðîöåäóðócut(pred(i)) äëÿ îòöà âåðøèíû i, åñëè lost(pred(i)) = 2 è ò. ä. äî òåõïîð, ïîêà íå áóäåò âûïîëíåí èíâàðèàíò 3.

Òàê êàê òðóäîåìêîñòü âûïîëíåíèÿ îïåðàöèè cut ðàâíà O(1), òîòðóäîåìêîñòü âîññòàíîâëåíèÿ èíâàðèàíòà 3 ïðîïîðöèîíàëüíà êîëè-÷åñòâó ïîðîæäåííûõ îïåðàöèé cut.

Ñâîéñòâî 3.5. Îáùåå ÷èñëî ïîðîæäåííûõ îïåðàöèé cut íå ïðåâû-øàåò îáùåãî ÷èñëà èñõîäíûõ îïåðàöèé cut.

Äîêàçàòåëüñòâî. Ïðåäïîëîæèì, ÷òî ìû âûïîëíèëè íåêîòîðîå ÷èñëîèñõîäíûõ îïåðàöèé cut, à îíè ïðèâåëè íàñ ê âûïîëíåíèþ ïîðîæäåí-íûõ îïåðàöèé cut.

Ðàññìîòðèì ôóíêöèþ

Φ =∑

i

lost(i).

Ïðåäïîëîæèì, ÷òî ìû âûïîëíèëè cut(i) è j îòåö âåðøèíû i. Îïå-ðàöèÿ cut(i) óñòàíàâëèâàåò lost(i) â íîëü è óâåëè÷èâàåò lost(j) íàåäèíèöó, åñëè j íå êîðåíü.

Åñëè ìû ðàññìàòðèâàåì èñõîäíóþ îïåðàöèþ cut, òî lost(i) ðàâ-íî íóëþ èëè åäèíèöå äî îïåðàöèè, à åñëè ýòî ïîðîæäåííàÿ cut, òîlost(i) ðàâíî äâóì äî îïåðàöèè. Ïîýòîìó èñõîäíàÿ îïåðàöèÿ óâåëè-÷èâàåò lost(i)+ lost(j) (à ñëåäîâàòåëüíî è ôóíêöèþ Φ) êàê ìàêñèìóìíà åäèíèöó, â òî âðåìÿ êàê ïîðîæäåííàÿ îïåðàöèÿ cut óìåíüøàåòçíà÷åíèå lost(i) + lost(j) êàê ìèíèìóì íà åäèíèöó.

Åñëè ìû íà÷íåì ñî çíà÷åíèÿ Φ = 0, òî îáùåå ÷èñëî óìåíüøåíèéôóíêöèè îãðàíè÷èì îáùèì ÷èñëîì óâåëè÷åíèé. 2

Ñóùåñòâóåò çàâèñèìîñòü ìåæäó ÷èñëîì ïðîöåäóð link è cut ïðèðàáîòå ñî ñòðóêòóðîé äàííûõ êó÷à Ôèáîíà÷÷è.Ñâîéñòâî 3.6. ×èñëî ïðîöåäóð link ðàâíî êàê ìàêñèìóì m ïëþñ÷èñëî ïðîöåäóð cut, ãäå m íà÷àëüíîå ÷èñëî êîðíåâûõ äåðåâüåâ.

104

Page 103: Теория алгоритмов. Котов В.М., Соболевская Е.П

Äîêàçàòåëüñòâî. Ðàññìîòðèì ôóíêöèþ ïîòåíöèàëîâ, îïðåäåëÿåìóþêàê êîëè÷åñòâî êîðíåâûõ äåðåâüåâ. Êàæäàÿ ïðîöåäóðà link óìåíüøà-åò ÷èñëî êîðíåâûõ äåðåâüåâ íà 1 è êàæäàÿ ïðîöåäóðà cut óâåëè÷èâàåòèõ ÷èñëî íà 1. Îáùåå ÷èñëî óìåíüøåíèé ÷èñëà êîðíåâûõ äåðåâüåâ âêó÷å Ôèáîíà÷÷è îãðàíè÷åíî íà÷àëüíûì ÷èñëîì êîðíåâûõ äåðåâüåâ(m) ïëþñ îáùåå ÷èñëî èõ óâåëè÷åíèé. 2

Òàêèì îáðàçîì, åñëè êîëè÷åñòâî èñõîäíûõ ïðîöåäóð cut íå ïðå-âîñõîäèò íåêîòîðîãî ÷èñëà k, òî êîëè÷åñòâî ïîðîæäåííûõ ïðîöåäóðcut òàêæå íå áóäåò ïðåâîñõîäèòü ýòîãî ÷èñëà k (ñâîéñòâî 3.5). Ñëå-äîâàòåëüíî, îáùåå ÷èñëî ïðîöåäóð cut íå ïðåâîñõîäèò âåëè÷èíû 2k èîáùåå ÷èñëî ïðîöåäóð link íå ïðåâîñõîäèò âåëè÷èíû m + 2k, ãäå m íà÷àëüíîå ÷èñëî êîðíåâûõ äåðåâüåâ (ñâîéñòâî 3.6).

Äëÿ îöåíêè òðóäîåìêîñòè â õóäøåì ñëó÷àå íåêîòîðîé ãðóïïû èçn îïåðàöèé (íàïðèìåð, n îïåðàöèé äîáàâëåíèÿ ýëåìåíòà â êó÷ó Ôè-áîíà÷÷è) ìû ìîãëè áû óìíîæèòü ìàêñèìàëüíóþ äëèòåëüíîñòü îïå-ðàöèè íà îáùåå ÷èñëî îïåðàöèé.  ýòîì ñëó÷àå, òðóäîåìêîñòü ãðóï-ïû èç n îïåðàöèé äîáàâëåíèÿ íîâîãî ýëåìåíòà (óäàëåíèÿ ìèíèìàëü-íîãî ýëåìåíòà) áûëà áû ðàâíà O(n log n). Èíîãäà óäàåòñÿ ïîëó÷èòüáîëåå òî÷íóþ îöåíêó âðåìåíè âûïîëíåíèÿ ïîñëåäîâàòåëüíîñòè îïå-ðàöèé (èëè, ÷òî ðàâíîñèëüíî, ñðåäíåãî âðåìåíè âûïîëíåíèÿ îäíîéîïåðàöèè: óñðåäíåííóþ îöåíêó òðóäîåìêîñòè îäíîé îïåðàöèè â õóä-øåì ñëó÷àå). Îöåíêè òàêîãî ðîäà â ëèòåðàòóðå íàçûâàþòñÿ àìîð-òèçàöèîííûì àíàëèçîì íåêîòîðîé ðåàëèçàöèè äëÿ ðàññìàòðèâàåìîéñòðóêòóðû äàííûõ. Äëÿ âû÷èñëåíèÿ óñðåäíåííîé îöåíêè òðóäîåì-êîñòè îäíîé îïåðàöèè, ñóììàðíàÿ òðóäîåìêîñòü ïîñëåäîâàòåëüíîñòèîïåðàöèé äåëèòñÿ íà êîëè÷åñòâî îïåðàöèé, ò. å. ïîëó÷àåì âðåìÿ âðàñ÷åòå íà îäíó îïåðàöèþ. Ïîëó÷èì ñåé÷àñ óñðåäíåííûå îöåíêè òðó-äîåìêîñòè äëÿ îñíîâíûõ îïåðàöèé ñ êó÷åé Ôèáîíà÷÷è.Òåîðåìà 3.6. Äëÿ êó÷è Ôèáîíà÷÷è ñïðàâåäëèâû ñëåäóþùèå óñðåä-íåííûå îöåíêè òðóäîåìêîñòè:1) óñðåäíåííàÿ îöåíêà òðóäîåìêîñòè îïåðàöèè äîáàâëåíèÿ íîâîãîýëåìåíòà äëÿ õóäøåãî ñëó÷àÿ ðàâíà O(1);2) óñðåäíåííàÿ îöåíêà òðóäîåìêîñòè îïåðàöèè óìåíüøåíèÿ êëþ÷àíåêîòîðîãî ýëåìåíòà äëÿ õóäøåãî ñëó÷àÿ ðàâíà O(1);3) óñðåäíåííàÿ îöåíêà òðóäîåìêîñòè îïåðàöèè óäàëåíèÿ ìèíèìàëü-íîãî ýëåìåíòà äëÿ õóäøåãî ñëó÷àÿ ðàâíà O(log n);4) óñðåäíåííàÿ îöåíêà òðóäîåìêîñòè îïåðàöèè óâåëè÷åíèÿ êëþ÷àíåêîòîðîãî ýëåìåíòà äëÿ õóäøåãî ñëó÷àÿ ðàâíà O(log n).

105

Page 104: Теория алгоритмов. Котов В.М., Соболевская Е.П

Äîêàçàòåëüñòâî. Ïðåäïîëîæèì, ÷òî ïåðâîíà÷àëüíî êó÷à ñîñòîÿëà èçz0 êîðíåâûõ äåðåâüåâ.

1. Äîáàâëåíèå íîâîãî ýëåìåíòà.Ðàññìîòðèì ïîñëåäîâàòåëüíîñòü èç n îïåðàöèé äîáàâëåíèÿ ýëå-

ìåíòà. Ïîñëå âûïîëíåíèÿ ïåðâîé îïåðàöèè äîáàâëåíèÿ êîëè÷åñòâîäåðåâüåâ â êó÷å Ôèáîíà÷÷è ñíà÷àëà óâåëè÷èòñÿ íà 1, à çàòåì â ðåçóëü-òàòå ïîääåðæêè èíâàðèàíòà 2 óìåíüøèòñÿ íà ÷èñëî, ðàâíîå êîëè÷å-ñòâó âûïîëíåííûõ ïðîöåäóð link (ïðåäïîëîæèì, ÷òî ÷èñëî ïðîöåäóðlink, âûïîëíåííûõ íà i-îé îïåðàöèè äîáàâëåíèÿ, ðàâíî ti):

z0 + 1− t1.

Ïîñëå âòîðîé îïåðàöèè äîáàâëåíèÿ êîëè÷åñòâî äåðåâüåâ â ñåìåéñòâåñòàíåò ðàâíûì:

z0 + 2− (t1 + t2).

Ïîñëå n-îé îïåðàöèè äîáàâëåíèÿ êîëè÷åñòâî äåðåâüåâ â ñåìåéñòâåñòàíåò ðàâíûì:

z0 + n− (t1 + t2 + . . . + tn).

Òàê êàê íå ìîæåò îñòàòüñÿ ìåíåå, ÷åì îäíî äåðåâî, òî ñïðàâåä-ëèâî ñëåäóþùåå íåðàâåíñòâî:

z0 + n− (t1 + t2 + . . . + tn) ≥ 1.

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

t1 + t2 + . . . + tn ≥ z0 + n− 1. (3.7)

Äëÿ ïîëó÷åíèÿ óñðåäíåííîé îöåíêè òðóäîåìêîñòè îäíîé îïåðàöèè äî-áàâëåíèÿ, íóæíî íàéòè ñóììó òðóäîåìêîñòåé âñåõ ïðîöåäóð ôîðìè-ðîâàíèÿ íîâûõ äåðåâüåâ è âñåõ ïðîöåäóð link, êîòîðûå áûëè âûïîë-íåíû çà n îïåðàöèé äîáàâëåíèÿ íîâîãî ýëåìåíòà, è ðàçäåëèòü ýòóñóììó íà êîëè÷åñòâî îïåðàöèé äîáàâëåíèÿ (= n). Òîãäà, ñ ó÷åòîìíåðàâåíñòâà (3.7) è ñâîéñòâà 3.4, ïîëó÷èì

O(n) + (t1 + t2 + . . . + tn)n

≤ O(n) + z0 + n− 1n

= O(1).

2. Óìåíüøåíèå çíà÷åíèÿ êëþ÷à äëÿ íåêîòîðîãî ýëåìåíòà.Ïîñëå çàâåðøåíèÿ n-îé îïåðàöèè óìåíüøåíèÿ êëþ÷à, áóäóò âû-

ïîëíåíû: n èñõîäíûõ ïðîöåäóð cut, n′ ïîðîæäåííûõ ïðîöåäóð cut

106

Page 105: Теория алгоритмов. Котов В.М., Соболевская Е.П

(ïîääåðæêà èíâàðèàíòà 3) è y ïðîöåäóð link (âîññòàíîâëåíèå èíâà-ðèàíòà 2). Â ñèëó ñâîéñòâ 3.5 è 3.6, ñïðàâåäëèâû ñëåäóþùèå íåðà-âåíñòâà:

n′ ≤ n; y ≤ n + n′ ≤ z0 + 2n. (3.8)Ñ ó÷åòîì íåðàâåíñòâ (3.8) è ñâîéñòâà 3.4, ïîëó÷èì, ÷òî óñðåäíåííàÿîöåíêà îäíîé îïåðàöèè óìåíüøåíèÿ êëþ÷à ðàâíà:

n + n′ + y

n≤ 4n + z0

n= O(1).

3. Óäàëåíèå ìèíèìàëüíîãî ýëåìåíòà (óâåëè÷åíèå çíà÷åíèÿ êëþ-÷à äëÿ íåêîòîðîãî ýëåìåíòà).

Ïîñëå âûïîëíåíèÿ n îïåðàöèé óäàëåíèÿ ìèíèìàëüíîãî ýëåìåíòà(óâåëè÷åíèå çíà÷åíèÿ êëþ÷à äëÿ íåêîòîðîãî ýëåìåíòà) áóäåò âûïîë-íåíî íå áîëåå, ÷åì n log n èñõîäíûõ ïðîöåäóð cut (ëåììà 3.1), íå áîëåå,÷åì n′ ≤ n log n ïîðîæäåííûõ ïðîöåäóð cut äëÿ ïîääåðæêè èíâàðèàí-òà 3 (ñâîéñòâî 3.5) è y ≤ z0 + 2n log n ïðîöåäóð link äëÿ ïîääåðæêèèíâàðèàíòà 2 (ñâîéñòâî 3.6). Ñ ó÷åòîì ýòèõ íåðàâåíñòâ è ñâîéñòâà3.4, ïîëó÷èì, ÷òî óñðåäíåííàÿ îöåíêà îäíîé îïåðàöèè óäàëåíèÿ ìè-íèìàëüíîãî ýëåìåíòà (óâåëè÷åíèÿ çíà÷åíèÿ êëþ÷à äëÿ íåêîòîðîãîýëåìåíòà) ðàâíà:

n + n′ + y

n=

n log n + n log n + 2n log n + z0

n= O(log n).

Äîêàçàòåëüñòâî òåîðåìû çàâåðøåíî. 2

Ðàññìîòðèì ñåé÷àñ íà ïðèìåðå îïåðàöèþ äîáàâëåíèÿ íîâîãî ýëå-ìåíòà â êó÷ó Ôèáîíà÷÷è.Ïðèìåð 3.1. Ðàññìîòðèì äîáàâëåíèå â êó÷ó Ôèáîíà÷÷è (ñì. ðèñ. a)) ýëåìåíòà ñ êëþ÷îì 10.

Ôîðìèðóåì êîðíåâîå äåðåâî íóëåâîãî ðàíãà ñ êëþ÷åâûì çíà÷åíèåìêîðíÿ, ðàâíûì 10. Ôîðìèðóåì ñïèñîê list.  ðåçóëüòàòå ïîëó÷àåì:

i 0 1 2bucket 9 7 1list 10 nil nil

Òàê êàê íàðóøåí èíâàðèàíò 2, òî âûïîëíÿåì ïðîöåäóðó åãî âîññòàíîâ-ëåíèÿ. Äëÿ ýòîãî ñíà÷àëà áóäåò âûïîëíåíà ïðîöåäóðà link(9, 10) (ñì.äàëåå ðèñ. b) ), ïîòîì ïðîöåäóðà link(7, 9) (ñì. äàëåå ðèñ. c) ) è â êîíöå link(1, 7) (ñì. äàëåå ðèñ. d) ).

107

Page 106: Теория алгоритмов. Котов В.М., Соболевская Е.П

Òåïåðü èíâàðèàíò 2 âûïîëíåí è îïåðàöèÿ äîáàâëåíèÿ ýëåìåíòà çà-âåðøåíà.

n

n n

n n n

n

n

n nn

n

n n

n n nn

n

nn

n

nn

¤¤

¢¢

SS

¤¤

¢¢

SS

¤¤

¤¤

1

2 3

4 5 6

7

8

9

1

2 3

4 5 6

7

8

9

10

n

n n

n n n¤¤

¢¢

SS

1

2 3

4 5 6

n

nn

n££

7

8

9

10

n

n n

n n nn¤¤

¢¢

SS

1

2 3

4 5 6

n

n n¢¢

SS

7

8 9

a) b)

c)

n¢¢

10

d)

­­­

AAA

­­

AA

¢¢¢¢

@@

´´

´

PPPPPP

¶¶

­­

AA

Ðàññìîòðèì ñåé÷àñ íà ïðèìåðå îïåðàöèþ óìåíüøåíèÿ êëþ÷åâîãîçíà÷åíèÿ âåðøèíû íà íåêîòîðîå ÷èñëî. Îòìåòèì, ÷òî ïðè âûïîëíå-íèè ýòîé îïåðàöèè ìîæåò ïîòðåáîâàòüñÿ âîññòàíîâëåíèå èíâàðèàíòà2 è èíâàðèàíòà 3.Ïðèìåð 3.2. Ðàññìîòðèì êó÷ó Ôèáîíà÷÷è, èçîáðàæåííóþ äàëåå íàðèñóíêå. Âîçëå êàæäîé âåðøèíû â êâàäðàòíûõ ñêîáêàõ óêàçàíî çíà÷åíèåèíäåêñà lost.

Íåîáõîäèìî âûïîëíèòü îïåðàöèþ óìåíüøåíèÿ êëþ÷åâîãî çíà÷åíèÿ

108

Page 107: Теория алгоритмов. Котов В.М., Соболевская Е.П

âåðøèíû i = 24 íà ÷èñëî 22.

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

½½@

@ ­­ @@

­­ JJ

3

5 7 8

6 13

15

10

11 12

14

18

20 24

[0]

[0] [0] [0]

[0]

[0]

[0]

[0]

[0]

[0]

[1]

[1]

[0] [0]

SS

JJ

Ïîëó÷àåì, ÷òî íîâîå çíà÷åíèå âåðøèíû i ðàâíî 2. Ìîäèôèöèðóåìçíà÷åíèå ìèíèìàëüíîãî êëþ÷à: minkey = 2.

Äëÿ âåðøèíû i íàõîäèì åå îòöà j = pred(i) = 18. Ïîñêîëüêó 2 < 18,ò. å. íàðóøåí èíâàðèàíò 1, òî âûïîëíèì èñõîäíóþ ïðîöåäóðó cut(2). Âðåçóëüòàòå èìååì êîëëåêöèþ êîðíåâûõ äåðåâüåâ, èçîáðàæåííóþ íèæå.

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

½½@

@ ­­ @@

­­

3

5 7 8

6 13

15

10

11 12

14

18

20

[0]

[0] [0] [0]

[0]

[0]

[0]

[0]

[0]

[0]

[1]

[2]

[0]

±°²¯2

[0]

SS

TT

Ïîìåùàåì â ñïèñîê list(0) âåðøèíó ñ êëþ÷îì 2 (list = (2)). Ïîñêîëü-êó lost(18) = 2 (âåðøèíà 18 ïîòåðÿëà äâóõ ñûíîâåé), òî íåîáõîäèìàïîääåðæêà èíâàðèàíòà 3. Ýòî îñóùåñòâëÿåòñÿ ñ ïîìîùüþ ïîðîæäåííîéïðîöåäóðû cut(18). Ìàññèâ list = 2, 18.  ñâîþ î÷åðåäü, ïîðîæäåííàÿ

109

Page 108: Теория алгоритмов. Котов В.М., Соболевская Е.П

ïðîöåäóðà cut(18) ïîðîäèò ïðîöåäóðó cut(14) è ïîñêîëüêó lost(12) = 1,òî èíâàðèàíò 3 âûïîëíåí. Òàê êàê ðàíã óçëà 14 ðàâåí 0, à â ìàññèâå listñïèñîê list(0) íå ïóñò, òî âûïîëíÿåì ïðîöåäóðó link(2, 14) è ïîëó÷àåìêîðíåâîå äåðåâî ñ êîðíåì 2 ðàíãà 1. Òàê êàê ñïèñîê list(1) íå ïóñò, òîâûïîëíÿåì ïðîöåäóðó link(2, 18) è íà ýòîì ôîðìèðîâàíèå ñïèñêà listçàâåðøåíî. Ñïèñîê list = nil, nil, 2.

n

n n n

n n n

n n­­

n@

@@3

5 7 8

6 13

15

10

11 12

[0]

[0] [0] [0]

[0] [0]

[0]

[0]

[0] [1]

a)

n

n

n 18

20

2

[0]

[0]

[0]

b)

n

n n¢¢¢

@@@

n

2

14 18

20

c)

@@@

n14[0]

···

Âûøå íà ðèñóíêàõ èçîáðàæåíû:a) ñåìåéñòâî êîðíåâûõ äåðåâüåâ, êîòîðûå îñòàëèñü â êó÷å Ôèáîíà÷÷èïîñëå âûïîëíåíèÿ èñõîäíîé è ïîðîæäåííûõ ïðîöåäóð cut;b) êîðíåâûå äåðåâüÿ, ñîîòâåòñòâóþùèå ïðîöåäóðàì cut;c) ñåìåéñòâî êîðíåâûõ äåðåâüåâ, ñîîòâåòñòâóþùåå ñïèñêó list (ñîñòîèòèç åäèíñòâåííîãî äåðåâà ðàíãà 2).

Òåïåðü íåîáõîäèìî ïðîâåñòè ñëèÿíèå êîðíåâûõ äåðåâüåâ èç ìàññè-âîâ list è bucket.

110

Page 109: Теория алгоритмов. Котов В.М., Соболевская Е.П

i 0 1 2 3bucket 6 13 10 3list nil nil 2 nil

Äëÿ ñëèÿíèÿ ýòèõ äâóõ ìàññèâîâ áóäåò ñíà÷àëà âûïîëíåíà ïðîöåäóðàlink(2, 10) (ñì. íèæå ðèñ.a)), à çàòåì link(2, 3) (ñì. íèæå ðèñ.b)). Ñåìåé-ñòâî êîðíåâûõ äåðåâüåâ, èçîáðàæåííûõ íà ðèñóíêå b) êó÷à Ôèáîíà÷-÷è, ïîëó÷åííàÿ ïîñëå óìåíüøåíèÿ çíà÷åíèÿ êëþ÷à âåðøèíû ñ êëþ÷îì24 íà ÷èñëî 22.

m

m m m m

m

m

m

m¡¡ ¤¤ SS ¤¤ ¡¡

3

5 7 8 6

13

15 m mCC QQQ

m m m¶¶¶

BBB

AAA

2

10 14 18

11 12 20

a)

m

m¡¡

m mCC QQQ

m m m¶¶¶

BBB

AAA

2

10 14 18

11 12 20

m

m m m¡¡ ¤¤ SS3

5 7 8

PPPPPPPPPP m6

m

m¤¤13

15

b)

Óïðàæíåíèå. Ðåàëèçîâàòü îïåðàöèþ óäàëåíèÿ ïðîèçâîëüíîéâåðøèíû èç êó÷è Ôèáîíà÷÷è è ïîëó÷èòü åå óñðåäíåííóþ îöåíêó.

3.5.4. Ïðèìåíåíèå ïðèîðèòåòíûõ î÷åðåäåéÐàññìîòðèì ñíà÷àëà íåñêîëüêî àëãîðèòìîâ ïîèñêà k-îãî íàèìå-

íüøåãî ýëåìåíòà ìàññèâà. Íàïîìíèì, ÷òî k-ûì ìèíèìàëüíûì ýëå-ìåíòîì íàçûâàåòñÿ ýëåìåíò, êîòîðûé ñòîèò íà k-îì ìåñòå â îòñîðòè-ðîâàííîì ìàññèâå.Îïðåäåëåíèå 3.14. Ìåäèàíîé ìàññèâà èç n ýëåìåíòîâ íàçûâàåòñÿòàêîé åãî ýëåìåíò, êîòîðûé ñòîèò íà ìåñòå dn

2 e â îòñîðòèðîâàí-íîì ìàññèâå.

111

Page 110: Теория алгоритмов. Котов В.М., Соболевская Е.П

Äëÿ ïîñëåäîâàòåëüíîñòè ýëåìåíòîâ:

18 24 12 27 19

ìåäèàíà ðàâíà 19.Î÷åâèäíî, ÷òî äëÿ íàõîæäåíèÿ ìåäèàíû ìîæíî ñíà÷àëà îòñîð-

òèðîâàòü ìàññèâ, à ïîñëå ýòîãî âûáðàòü ýëåìåíò. Òîãäà ýòî ïîòðå-áóåò â ëó÷øåì ñëó÷àå O(n log n) îïåðàöèé. Ïîèñê ìåäèàíû ÿâëÿåòñÿ÷àñòíûì ñëó÷àåì áîëåå îáùåé çàäà÷è: íàõîæäåíèå k-ãî íàèìåíüøåãîýëåìåíòà èç n ýëåìåíòîâ. Ðàññìîòðèì ñíà÷àëà àëãîðèòì äëÿ íàõî-æäåíèÿ k-ãî íàèìåíüøåãî ýëåìåíòà èç n ýëåìåíòîâ, ïðåäëîæåííûé×. Õîàðîì.

Àëãîðèòì 1íàõîæäåíèÿ k-ãî

íàèìåíüøåãî ýëåìåíòà

1. Âûïîëíÿåòñÿ îïåðàöèÿ ðàçäåëåíèÿ íà îòðåçêå [L,R], ãäå ïåðâî-íà÷àëüíî L = 1, R = n, à â êà÷åñòâå ñåïàðàòîðà áåðåòñÿ x = a[k](ñì. àëãîðèòì áûñòðîé ñîðòèðîâêè).  ðåçóëüòàòå ðàçäåëåíèÿïîëó÷àþòñÿ èíäåêñû i, j òàêèå, ÷òî

a[h] < x, h < i;

a[h] > x, h > j;

i > j;

a) åñëè j ≤ k ≤ i, òî ýëåìåíò a[k] ðàçäåëÿåò ìàññèâ íà äâå ÷à-ñòè â íóæíîé ïðîïîðöèè; àëãîðèòì çàêàí÷èâàåò ñâîþ ðà-áîòó;

b) åñëè i < k, òî âûáðàííîå çíà÷åíèå x áûëî ñëèøêîì ìà-ëî, ïîýòîìó ïðîöåññ ðàçäåëåíèÿ íåîáõîäèìî âûïîëíèòü íàîòðåçêå [i, R];

c) åñëè k < j, òî çíà÷åíèå x áûëî ñëèøêîì âåëèêî, ïîýòî-ìó ïðîöåññ ðàçäåëåíèÿ íåîáõîäèìî âûïîëíèòü íà îòðåçêå[L, j].

2. Ïðîöåññ ðàçäåëåíèÿ ïîâòîðÿòü äî òåõ ïîð, ïîêà íå âîçíèêíåòñèòóàöèÿ 1a). Çíà÷åíèå x ñîîòâåòñòâóåò çíà÷åíèþ k-ãî íàèìåíü-øåãî ýëåìåíòà.

112

Page 111: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ñõåìàòè÷íî àëãîðèòì ìîæåò áûòü çàïèñàí ñëåäóþùèì îáðàçîì:L := 1;R := n;while (L < R) do x := a[k];ðàçäåëåíèå a[L] · · · a[R]if i < k then L:=i;if k < j then R:=j;if j ≤ k ≤ i then

x - k-é ìèíèìàëüíûé ýëåìåíò; break;

Çàïèøåì ðåêóððåíòíîå óðàâíåíèå îïèñàííîãî àëãîðèòìà. Åñëèïðåäïîëîæèòü, ÷òî ðàçäåëåíèå â ñðåäíåì ðàçáèâàåò ÷àñòü, ãäå íàõî-äèòñÿ òðåáóåìûé ýëåìåíò ïîïîëàì, òî ðåêóððåíòíîå óðàâíåíèå áóäåòèìåòü âèä:

T (n) = Cn + T(n

2

)

è ïî òåîðåìå î ðåøåíèè ðåêóððåíòíîãî óðàâíåíèÿ òðóäîåìêîñòü àë-ãîðèòìà â ñðåäíåì åñòü O(n). Òàêèì îáðàçîì, ïîëó÷àåì ÿâíîå ïðå-èìóùåñòâî ïî ñðàâíåíèþ ñ ïðÿìûìè ìåòîäàìè, ãäå ñíà÷àëà ñîðòè-ðóåòñÿ âñå ìíîæåñòâî, à çàòåì âûáèðàåòñÿ k-é ýëåìåíò. Ñëåäóåò çà-ìåòèòü, ÷òî â õóäøåì ñëó÷àå, êîãäà â êà÷åñòâå ñåïàðàòîðà áåðåòñÿìàêñèìàëüíûé (ìèíèìàëüíûé ýëåìåíò) ðàññìàòðèâàåìîé ïîäïîñëå-äîâàòåëüíîñòè, ðåêóððåíòíîå óðàâíåíèå áóäåò èìåòü âèä:

T (n) = Cn + T (n− 1)

è òðóäîåìêîñòü àëãîðèòìà â ýòîì ñëó÷àå O(n2).Ðàññìîòðèì òåïåðü åùå îäèí àëãîðèòì íàõîæäåíèÿ k-ãî íàè-

ìåíüøåãî ýëåìåíòà, òðóäîåìêîñòü êîòîðîãî åñòü O(n) â õóäøåì ñëó-÷àå.

Àëãîðèòì 2íàõîæäåíèÿ k-ãî

íàèìåíüøåãî ýëåìåíòà

1. Ðàçáèâàåì èñõîäíóþ ïîñëåäîâàòåëüíîñòü S íà n5 ïîäïîñëåäîâà-

òåëüíîñòåé ïî ïÿòü ýëåìåíòîâ â êàæäîé. Â êàæäîé òàêîé ïîä-ïîñëåäîâàòåëüíîñòè íàõîäèì ìåäèàíó. Ýòî ïîòðåáóåò C1n îïå-ðàöèé.

113

Page 112: Теория алгоритмов. Котов В.М., Соболевская Е.П

2. Èç íàéäåííûõ íà ïåðâîì øàãå ìåäèàí ñòðîèì ïîñëåäîâàòåëü-íîñòü M è ðåêóðñèâíî íàõîäèì åå ìåäèàíó x. Òàê êàê äëèíàðàññìàòðèâàåìîé ïîñëåäîâàòåëüíîñòè M ðàâíà n

5 , òî òðóäîåì-êîñòü íàõîæäåíèÿ ìåäèàíû äëÿ ýòîé ïîñëåäîâàòåëüíîñòè ðàâíàT

(n5

).

3. Äëÿ ïîëó÷åííîãî ýëåìåíòà x âûïîëíèì ïðîöåññ ðàçäåëåíèÿ, êî-òîðûé ïîòðåáóåò C2n îïåðàöèé.  ðåçóëüòàòå âñÿ ðàññìàòðè-âàåìàÿ ïîñëåäîâàòåëüíîñòü S áóäåò ðàçáèòà íà ÷àñòè: S1, ãäåýëåìåíòû íå áîëüøå x; S2, ãäå ýëåìåíòû íå ìåíüøå x. Îäíà èç÷àñòåé ìîæåò áûòü îòáðîøåíà, ïðè÷åì íå ñëîæíî ïîêàçàòü, ÷òîêîëè÷åñòâî ýëåìåíòîâ â êàæäîé èç ÷àñòåé íå ìåíüøå dn

4 e.4. Ðåøàåì çàäà÷ó íàõîæäåíèÿ k-ãî íàèìåíüøåãî ýëåìåíòà îñòàâ-

øèõñÿ b 3n4 c ýëåìåíòîâ, ÷òî ïîòðåáóåò âðåìÿ T ( 3n

4 ).

Òàêèì îáðàçîì, ðåêóððåíòíîå óðàâíåíèå äëÿ îïèñàííîãî âûøåàëãîðèòìà èìååò âèä:

T (n) = C1n + T(n

5

)+ C2n + T

(3n

4

)

èëèT (n) = Cn + T

(n

5

)+ T

(3n

4

).

Ðåøàÿ äàííîå óðàâíåíèå ìåòîäîì ïîäñòàíîâêè, ïðè g(n) = 20Cn èëèìåòîäîì ðåêóðñèâíûõ äåðåâüåâ, ïîëó÷àåì, ÷òî òðóäîåìêîñòü ïðèâå-äåííîãî âûøå àëãîðèòìà åñòü O(n).

Ñëåäóåò îòìåòèòü, ÷òî åñëè èñõîäíóþ ïîñëåäîâàòåëüíîñòü ðàçáè-âàòü íà ñåìåðêè, òî ðåêóððåíòíîå óðàâíåíèå áóäåò èìåòü âèä

T (n) = C3n + T(n

7

)+ T

(3n

4

)≤ 28

3C3n.

Óïðàæíåíèå. Íàïèñàòü ðåêóððåíòíîå óðàâíåíèå, åñëè ýëåìåí-òû ðàçáèâàþòñÿ íà ãðóïïû ïî m ýëåìåíòîâ. Ïðîâåñòè àíàëèç òðóäî-åìêîñòè àëãîðèòìà â çàâèñèìîñòè îò âûáðàííîãî çíà÷åíèÿ m.

Çàäà÷ó íàõîæäåíèÿ k-îãî íàèìåíüøåãî ýëåìåíòà ìàññèâà òàêæåìîæíî ðåøèòü ñ ïîìîùüþ ñòðóêòóðû äàííûõ ïðèîðèòåòíàÿ î÷åðåäü.Äëÿ ýòîãî íóæíî ïîìåñòèòü âñå n ýëåìåíòîâ ìàññèâà â ïðèîðèòåòíóþ

114

Page 113: Теория алгоритмов. Котов В.М., Соболевская Е.П

î÷åðåäü (òðóäîåìêîñòü ñîçäàíèÿ ïðèîðèòåòíîé î÷åðåäè O(n)), à çà-òåì óäàëèòü èç íåå k ýëåìåíòîâ (íàïîìíèì, ÷òî èç ïðèîðèòåòíîé î÷å-ðåäè âñåãäà óäàëÿåòñÿ òîëüêî ìèíèìàëüíûé ýëåìåíò è òðóäîåìêîñòüïðîöåäóðû óäàëåíèÿ ýëåìåíòà ðàâíà O(log n)). Ïîñëåäíèé èç óäàëåí-íûõ ýëåìåíòîâ è áóäåò èñêîìûì. Çàìåòèì, ÷òî åñëè k êîíñòàíòà,òî òðóäîåìêîñòü äàííîãî àëãîðèòìà ðàâíà

O(n) + O(k log2 n) = O(n).

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

O(n) + O(n log n) = O(n log n).

Òàêèì îáðàçîì äàííûé àëãîðèòì èìååò òó æå òðóäîåìêîñòü, ÷òî èëó÷øèå àëãîðèòìû âíóòðåííåé ñîðòèðîâêè.

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

115

Page 114: Теория алгоритмов. Котов В.М., Соболевская Е.П

à ë à â à 4

Îðãàíèçàöèÿ ïîèñêà äàííîé ãëàâå ñíà÷àëà ðàññìàòðèâàþòñÿ ïîèñêîâûå äåðåâüÿ: áè-

íàðíûå ïîèñêîâûå äåðåâüÿ, ÀÂË-äåðåâüÿ è êðàñíî-÷åðíûå äåðåâüÿ.Äëÿ êàæäîãî èç âèäîâ äåðåâüåâ ðàññìàòðèâàþòñÿ áàçîâûå îïåðàöèèè ïðîöåäóðû ïîääåðæêè èíâàðèàíòîâ äëÿ ñáàëàíñèðîâàííûõ äåðå-âüåâ. Çàòåì â ãëàâå ðàññìàòðèâàåòñÿ òàêàÿ ñòðóêòóðà äàííûõ, êàêõåø-òàáëèöû.

4.1. Áèíàðíûå ïîèñêîâûå äåðåâüÿÍàïîìíèì, ÷òî áèíàðíîå ïîèñêîâîå äåðåâî ýòî áèíàðíîå äåðå-

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

Áèíàðíûå ïîèñêîâûå äåðåâüÿ ÷àñòî èñïîëüçóþòñÿ äëÿ ïðåäñòàâ-ëåíèÿ äàííûõ, äëÿ êîòîðûõ îñíîâíûìè îïåðàöèÿìè ÿâëÿþòñÿ:

1. ïîèñê ïî êëþ÷ó (ïîèñê ìàêñèìàëüíîãî, ìèíèìàëüíîãî ýëåìåí-òîâ);

2. äîáàâëåíèå ýëåìåíòà ñ çàäàííûì êëþ÷îì;

3. óäàëåíèå ýëåìåíòà ñ çàäàííûì êëþ÷îì.

Ïðèâåäåì ðåàëèçàöèþ áàçîâûõ îïåðàöèé íàä áèíàðíûìè ïîèñ-êîâûìè äåðåâüÿìè. Òðóäîåìêîñòü âûïîëíåíèÿ ýòèõ îïåðàöèé áóäåòçàâèñåòü îò âûñîòû äåðåâà h. Åñëè áèíàðíîå ïîèñêîâîå äåðåâî âûòÿ-íóòî â ëèíåéíûé ñïèñîê, òî h = n, ãäå n êîëè÷åñòâî âåðøèí äåðåâà.Åñëè æå áèíàðíîå ïîèñêîâîå äåðåâî ÿâëÿåòñÿ ñáàëàíñèðîâàííûì, òîh = log2 n.  êà÷åñòâå ñòðóêòóðû äàííûõ äëÿ ïðåäñòàâëåíèÿ äåðåâàáóäåì èñïîëüçîâàòü ñïèñêîâóþ ñòðóêòóðó:

116

Page 115: Теория алгоритмов. Котов В.М., Соболевская Е.П

typesearch_tree =↑ tree_node;tree_node=recordelement : type_el;left : search_tree;right : search_tree;

end;

Îñíîâíûå îïåðàöèè c áèíàðíûìè ïîèñêîâûìè äåðåâüÿìè

1. Ïîèñê ýëåìåíòà ïî çàäàííîìó êëþ÷ó x.Äàííàÿ îïåðàöèÿ ìîæåò áûòü ðåàëèçîâàíà ñëåäóþùåé ôóíêöèåé.

function nd(x:type_el; T :search _ tree):search_tree;beginif T = nil then nd:=nilelseif x < T ↑ .element then nd:=nd(x, T ↑ .left)elseif x > T ↑ .element then nd:=nd(x, T ↑ .right)else find := T ;

end.

Òðóäîåìêîñòü ïðîöåäóðû ïîèñêà ýëåìåíòà ñ êëþ÷îì x åñòü O(h).Çàìåòèì, ÷òî ïîèñê ìèíèìàëüíîãî (ìàêñèìàëüíîãî) ýëåìåíòà ÿâ-

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

function nd_min(T :search _ tree):search_tree;beginif T = nil then nd_min:=nilelseif T ↑ .left = nil then

nd_min:=Telsend_min:=nd_min(T ↑ .left)

end.

117

Page 116: Теория алгоритмов. Котов В.М., Соболевская Е.П

2. Äîáàâëåíèå ýëåìåíòà ñ êëþ÷îì x.Äàííóþ ïðîöåäóðó ÷àñòî íàçûâàþò ïîèñêîì ïî äåðåâó ñ âêëþ÷å-

íèåì, òàê êàê äëÿ òîãî, ÷òîáû äîáàâèòü íåêîòîðûé ýëåìåíò x, íåîáõî-äèìî ñíà÷àëà îïðåäåëèòü åãî ìåñòîïîëîæåíèå â äåðåâå. Åñëè âåðøèíàñ êëþ÷åâûì çíà÷åíèåì x óæå ñóùåñòâóåò, òî äîáàâëåíèå ýëåìåíòà íåïðîèçâîäèòñÿ, òàê êàê â áèíàðíîì ïîèñêîâîì äåðåâå êëþ÷åâûå çíà-÷åíèÿ âñåõ âåðøèí äîëæíû áûòü ðàçëè÷íû.

Ïðèâåäåì ïðîãðàììíóþ ðåàëèçàöèþ ïðîöåäóðû äîáàâëåíèÿ ýëå-ìåíòà ñ êëþ÷îì x â áèíàðíîå ïîèñêîâîå äåðåâî.

procedure insert(x:type_el;T :search _ tree);beginif T = nil then new(T ); T ↑ .left := nil;T ↑ .right := nil; T ↑ .element := x;

elseif x < T ↑ .element then

insert(x, T ↑ .left)elseif x > T ↑ .element then

insert(x, T ↑ .right)end.

Òðóäîåìêîñòü ïðîöåäóðû ïîèñêà ïî äåðåâó ñ âêëþ÷åíèåì â õóä-øåì ñëó÷àå åñòü O(h).

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

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

118

Page 117: Теория алгоритмов. Котов В.М., Соболевская Е.П

çàäà÷å òðåáóåòñÿ âûïîëíÿòü ïîèñê è ñîðòèðîâêó, òî ëó÷øå ðåêîìåí-äóåòñÿ èñïîëüçîâàòü ïîèñê ïî äåðåâó ñ âêëþ÷åíèåì.3. Óäàëåíèå ýëåìåíòà ñ çàäàííûì êëþ÷îì x.

procedure delete(x:type_el; var T :search _ tree);var tmp : search_tree;beginif T = nil then error(element not found);else if x < T ↑ .element then delete(x, T ↑ .left)elseif x > T ↑ .element then delete(x, T ↑ .right)else found the element to be delete if T ↑ .left = nil then only a right child tmp := T ; T := T ↑ .right;dispose(tmp);

elseif T ↑ .right = nil then only a left child tmp := T ; T := T ↑ .left;dispose(tmp);

else tmp :=nd_min(T ↑ .right);T ↑ .element := tmp ↑ .element;delete(T ↑ .element, T ↑ .right);

end.Ïðîöåäóðà óäàëåíèÿ ýëåìåíòà ñíà÷àëà îïðåäåëÿåò âåðøèíó äå-

ðåâà v ñ êëþ÷åâûì çíà÷åíèåì key(v) = x. Åñëè íàéäåííàÿ âåðøèíàèìååò íå áîëåå îäíîãî ñûíà, òî åå óäàëåíèå èç äåðåâà ïðîèçâîäèòñÿíåïîñðåäñòâåííîå óäàëåíèå âåðøèíû (êàê ýòî òðàäèöèîííî âûïîëíÿ-åòñÿ â ñïèñêîâîé ñòðóêòóðå, êîãäà äëÿ óäàëÿåìîãî ýëåìåíòà èçâåñòåíïðåäûäóùèé è ñëåäóþùèé ýëåìåíòû). Òðóäíîñòè ñ óäàëåíèåì âîçíè-êàþò â ñèòóàöèè, êîãäà ó óäàëÿåìîé âåðøèíû v äâà ñûíà. Äàííûéñëó÷àé ñâîäèòñÿ ê ïðåäûäóùåìó ñëó÷àþ. Äëÿ ýòîãî êëþ÷åâîå çíà-÷åíèå x âåðøèíû v íóæíî çàìåíèòü ëèáî íà ìàêñèìàëüíûé êëþ÷(key(wl)) â ëåâîì ïîääåðåâå äëÿ âåðøèíû v, ëèáî íà ìèíèìàëüíûìêëþ÷ (key(wr)) â ïðàâîì ïîääåðåâå äëÿ âåðøèíû v, à çàòåì ïðîèñõî-äèò óäàëåíèå ñîîòâåòñòâóþùåé âåðøèíû (wl èëè wr). Î÷åâèäíî, ÷òî

119

Page 118: Теория алгоритмов. Котов В.М., Соболевская Е.П

êàæäàÿ èç óêàçàííûõ âåðøèí (wl èëè wr), èìååò íå áîëåå îäíîãî ñû-íà. Òðóäîåìêîñòü ïðîöåäóðû óäàëåíèÿ ýëåìåíòà ñ çàäàííûì êëþ÷îìåñòü O(h).

Íà ðèñóíêå 4.1 ïîêàçàíû äâà ñëó÷àÿ óäàëåíèÿ.  ïåðâîì ñëó÷àåóäàëÿåòñÿ âåðøèíà ñ êëþ÷îì 4, êîòîðàÿ èìååò òîëüêî îäíîãî ñûíà;âî âòîðîì ñëó÷àå óäàëÿåòñÿ âåðøèíà ñ êëþ÷îì 2, êîòîðàÿ èìååò äâóõñûíîâåé (óäàëÿåìûå âåðøèíû âûäåëåíû).

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

½½= @

@R

¶¶¶/

@@@R

¡¡ª

©©©©©¼Q

QQs

½½

½=@

@R

½½½=

HHHHj

¡¡ª

ZZZ~

½½=

ZZZ~

©©©©¼Q

QQQs

½½½=

QQQs¡¡ª

6

2 8

1 4

3

6

2 8

1 4

3

6

28

1 4

3

3.5

6

3 8

1 4

3.5

BBBBBN

££°

¤¤¤¤¤²

AAU

¡¡

aa

!!

@@

Ðèñ. 4.1. Óäàëåíèå â áèíàðíîì ïîèñêîâîì äåðåâå

Êàê áûëî ïîä÷åðêíóòî âûøå, òðóäîåìêîñòü ðåàëèçàöèè âñåõ áà-çîâûõ îïåðàöèé íàä áèíàðíûìè ïîèñêîâûìè äåðåâüÿìè çàâèñèò îòâûñîòû äåðåâà h.  õóäøåì ñëó÷àå h = O(n). Ïîýòîìó îñîáûé èíòå-

120

Page 119: Теория алгоритмов. Котов В.М., Соболевская Е.П

ðåñ âûçûâàþò òàêèå èíâàðèàíòû (ñâîéñòâà) ïîèñêîâûõ äåðåâüåâ, êî-òîðûå îáåñïå÷èâàþò âûñîòó äåðåâüåâ h = O(log2 n), è ïðè ýòîì òðó-äîåìêîñòü ïîääåðæàíèÿ ýòèõ èíâàðèàíòîâ íå ïðåâûøàåò O(log2 n).Äàëåå áóäóò ïðèâåäåíû íåêîòîðûå èíâàðèàíòû ïîèñêîâûõ äåðåâüåâ.

4.2. Ñáàëàíñèðîâàííûå äåðåâüÿÎäíèì èç èíâàðèàíòîâ ñáàëàíñèðîâàííûõ ïîèñêîâûõ äåðåâüåâ

ÿâëÿåòñÿ ñâîéñòâî ñáàëàíñèðîâàííîñòè ïî âûñîòå.

4.2.1. ÀÂË-äåðåâüÿÍàïîìíèì, ÷òî ÀÂË-äåðåâî ýòî áèíàðíîå ïîèñêîâîå äåðåâî, ó

êîòîðîãî äëÿ êàæäîé âåðøèíû v âûïîëíÿåòñÿ ñëåäóþùåå ñâîéñòâî:âûñîòà ïîääåðåâà, êîðíåì êîòîðîãî ÿâëÿåòñÿ ëåâûé ñûí âåðøèíû v,îòëè÷àåòñÿ íå áîëåå ÷åì íà åäèíèöó îò âûñîòû ïîääåðåâà, êîðíåìêîòîðîãî ÿâëÿåòñÿ ïðàâûé ñûí âåðøèíû v.Òåîðåìà 4.1. Ïóñòü n ÷èñëî âíóòðåííèõ âåðøèí ÀÂË-äåðåâà, àh åãî âûñîòà. Òîãäà ñïðàâåäëèâû ñëåäóþùèå íåðàâåíñòâà

log(n + 1) ≤ h < 1.4404 ∗ log(n + 2)− 0.328. (4.1)

Äîêàçàòåëüñòâî. Òàê êàê ÀÂË-äåðåâî ÿâëÿåòñÿ áèíàðíûì äåðåâîì,òî îíî íå ìîæåò ñîäåðæàòü áîëåå, ÷åì 2h − 1 âíóòðåííèõ âåðøèí.Ïîýòîìó

n ≤ 2h − 1; h ≥ log(n + 1)

è ìû ïîëó÷àåì ëåâóþ ÷àñòü íåðàâåíñòâà (4.1).Îïðåäåëèì òåïåðü ìèíèìàëüíîå êîëè÷åñòâî âíóòðåííèõ âåðøèí

äëÿ ÀÂË-äåðåâà âûñîòû h. Îáîçíà÷èì ÷åðåç Th ÀÂË-äåðåâî âû-ñîòû h ñ ìèíèìàëüíûì ÷èñëîì âíóòðåííèõ âåðøèí. Òàê êàê ïðèí-öèï ïîñòðîåíèÿ äåðåâüåâ íàïîìèíàåò ïîñòðîåíèå ÷èñåë Ôèáîíà÷÷è,òî òàêèå äåðåâüÿ îáû÷íî íàçûâàþò äåðåâüÿìè Ôèáîíà÷÷è. Íà ðèñ.4.2 ïðåäñòàâëåíû äåðåâüÿ T0, T1, T2, T3.

Ïóñòü Nh êîëè÷åñòâî âíóòðåííèõ âåðøèí â äåðåâå Th. Òîãäà

Nh+1 = Nh−1 + Nh + 1.

Ñäåëàåì çàìåíó ïåðåìåííîé F ′i = Ni + 1, òîãäà âûðàæåíèå

F ′h+1 = F ′h + F ′h−1

121

Page 120: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

¡¡

­­

%%

@@

¡¡ ee

¡¡

¡¡¡

AA

¯¯

T1 T2

T3

±°²¯

T0

Ðèñ. 4.2. Äåðåâüÿ Ôèáîíà÷÷è âûñîòû 0,1,2,3

ñîîòâåòñòâóåò ÷èñëàì Ôèáîíà÷÷è.Íàïîìíèì, ÷òî åñëè Fh h-å ÷èñëî Ôèáîíà÷÷è, òî

Fh =Φh − Φh

√5

,

ãäåΦ =

1 +√

52

, Φ =1−√5

2.

Íàéäåì ñîîòâåòñòâèå ìåæäó Fi è F ′i . Òàê êàê Fi = F ′j ïðè i = 2 + j,òî F2+h = F ′h è

F ′h =Φh+2

√5

− Φh+2

√5

.

122

Page 121: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïîýòîìó â ñèëó òîãî, ÷òî Nh = F ′h − 1 è∣∣∣1−√5

2

∣∣∣ < 1, èìååì

n ≥ Nh = F ′h − 1 ≥

(1+√

52

)h+2

√5

(1−√5

2

)h+2

√5

− 1 ≥

(1+√

52

)h+2

√5

− 2.

Ëîãàðèôìèðóÿ âûðàæåíèå, ïîëó÷àåì ïðàâóþ ÷àñòü íåðàâåíñòâà 4.1.2Èç òåîðåìû ñëåäóåò, ÷òî äëÿ ÀÂË-äåðåâà ñ n âåðøèíàìè âûñîòà

h = O(log2 n). Ïîýòîìó âñå áàçîâûå îïåðàöèè ìîæíî âûïîëíèòü çàâðåìÿ O(log2 n).

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

Îñíîâíûå îïåðàöèè ñ ÀÂË-äåðåâüÿìè.

1. Äîáàâëåíèå âåðøèíû ñ çàäàííûì êëþ÷îì.

• Ïðîõîäèì ïî ïóòè ïîèñêà (ñì. ïîèñê ýëåìåíòà â áèíàðíîì ïîèñ-êîâîì äåðåâå), ïîêà íå îïðåäåëèì ìåñòî äîáàâëåíèÿ âåðøèíû ñçàäàííûì êëþ÷îì.

• Äîáàâëÿåì íîâóþ âåðøèíó è îïðåäåëÿåì ïðîèçîøëà ëè âäîëüïóòè ïîèñêà ðàçáàëàíñèðîâêà.Ïóñòü k2 âåðøèíà ìàêñèìàëüíîé ãëóáèíû, äëÿ êîòîðîé íàðó-øèëñÿ èíâàðèàíò. Ëåãêî ïðîâåðèòü, ÷òî âñå âåðøèíû, äëÿ êîòî-ðûõ íàðóøèëñÿ èíâàðèàíò, ëåæàò íà ïóòè îò êîðíÿ äî âåðøèíûk2. Ýòî ñâÿçàíî ñ òåì, ÷òî ïîèñê ìåñòîïîëîæåíèÿ äëÿ äîáàâëÿ-åìîé âåðøèíû ïðîõîäèë èìåííî ïî ýòîé öåïî÷êå, è òîëüêî ïîýòîé öåïî÷êå âûñîòû ïîääåðåâüåâ ìîãëè óâåëè÷èòüñÿ íà 1.

• Åñëè ïðîèçîøëà ðàçáàëàíñèðîâêà, òî âûïîëíèòü ïðîöåäóðó, êî-òîðàÿ âîññòàíîâèò íàðóøåííûé èíâàðèàíò. Ïðîöåäóðà äîáàâëå-íèÿ ýëåìåíòà çàâåðøåíà.

 äàëüíåéøåì áóäåò ïîêàçàíî, ÷òî äîñòàòî÷íî âûïîëíèòü ïðîöå-äóðó, âîññòàíàâëèâàþùóþ íàðóøåííûé èíâàðèàíò, òîëüêî äëÿ âåð-øèíû k2, òàê êàê ýòî ïðèâåäåò ê òîìó, ÷òî äëÿ âñåõ âåðøèí áóäåòâûïîëíåíî ñâîéñòâî ñáàëàíñèðîâàííîñòè ïî âûñîòàì.

123

Page 122: Теория алгоритмов. Котов В.М., Соболевская Е.П

2. Óäàëåíèå âåðøèíû ñ çàäàííûì êëþ÷îì.

• Îñóùåñòâëÿåì ïîèñê è óäàëåíèå âåðøèíû ñ çàäàííûì êëþ÷îì.Äàííàÿ ïðîöåäóðà àíàëîãè÷íà ïðîöåäóðå óäàëåíèÿ äëÿ áèíàð-íîãî ïîèñêîâîãî äåðåâà (ðàññìàòðèâàþòñÿ âàðèàíòû: óäàëÿå-ìûé ýëåìåíò èìååò íå áîëåå îäíîãî ñûíà; óäàëÿåìûé ýëåìåíòèìååò äâóõ ñûíîâåé).

• Îïðåäåëÿåì, ïðîèçîøëà ëè âäîëü ïóòè ïîèñêà ðàçáàëàíñèðîâêà.Íàðóøåíèå èíâàðèàíòà ìîãëî ïðîèçîéòè òîëüêî äëÿ îäíîé âåð-øèíû íà ïóòè ïîèñêà, òàê êàê âûñîòû òîëüêî ýòèõ âåðøèí ìîã-ëè óìåíüøèòüñÿ íà 1. Ñëåäóåò îòìåòèòü, ÷òî åñëè âûñîòà âåð-øèíû óìåíüøèëàñü íà 1, òî äëÿ íåå âûïîëíÿåòñÿ ñâîéñòâî ñáà-ëàíñèðîâàííîñòè ïî âûñîòàì.Ïóñòü k2 âåðøèíà, äëÿ êîòîðîé íàðóøèëñÿ èíâàðèàíò (âûñîòàâåðøèíû k2 ïîñëå âûïîëíåíèÿ ïðîöåäóðû óäàëåíèÿ íå èçìåíè-ëàñü, ò. ê. íàðóøåíèå èíâàðèàíòà äëÿ íåå ïðîèçîøëî òîëüêî ïðèóäàëåíèè âåðøèíû èç ïîääåðåâà âåðøèíû k2 ìåíüøåé âûñîòû).

• Åñëè ïðîèçîøëà ðàçáàëàíñèðîâêà, òî âûïîëíèòü ïðîöåäóðó, êî-òîðàÿ âîññòàíîâèò íàðóøåííûé èíâàðèàíò, äëÿ âåðøèíû k2 (z îòåö âåðøèíû).

Ïîñëå âûïîëíåíèÿ áàëàíñèðîâêè äëÿ âåðøèíû k2, ìîãëà ïðî-èçîéòè ðàçáàëàíñèðîâêà äëÿ âåðøèíû íà ïóòè îò êîðíÿ äî âåðøèíûz. Íàõîäèì îïÿòü âåðøèíó íà ìàêñèìàëüíîé ãëóáèíå, äëÿ êîòîðîéïðîèçîøëî íàðóøåíèå èíâàðèàíòà è âûïîëíÿåì áàëàíñèðîâêó äëÿíåå.

Ðàññìîòðèì ðàçëè÷íûå ñèòóàöèè ðàçáàëàíñèðîâêè è ïîêàæåì,êàêèå ïðåîáðàçîâàíèÿ âîññòàíîâÿò òðåáóåìûé èíâàðèàíò.

Âîññòàíîâëåíèÿ èíâàðèàíòà ïîñëå âûïîëíåíèÿ îïåðàöèèäîáàâëåíèÿ íîâîãî ýëåìåíòà

1-ûé ñëó÷àé. Ïóñòü k2 âåðøèíà ìàêñèìàëüíîé ãëóáèíû, äëÿ êîòî-ðîé ïðîèçîøëà ðàçáàëàíñèðîâêà ïîñëå âûïîëíåíèÿ îïåðàöèè äîáàâ-ëåíèÿ íîâîãî ýëåìåíòà (z îòåö âåðøèíû k2) è äëÿ êîòîðîé:

• âûñîòà åå ëåâîãî ïîääåðåâà áîëüøå âûñîòû åå ïðàâîãî ïîääåðå-âà íà 2 (ýòî ïðîèñõîäèò ïîòîìó, ÷òî áàëàíñèðîâêà ïðîèñõîäèò

124

Page 123: Теория алгоритмов. Котов В.М., Соболевская Е.П

ïîñëå êàæäîé îïåðàöèè äîáàâëåíèÿ è óäàëåíèÿ, è ìàêñèìàëüíîâîçìîæíàÿ ðàçíîñòü âûñîò ïîääåðåâüåâ äëÿ êàæäîé âåðøèíûíå ïðåâûøàåò äâóõ, òàê êàê ïåðåä âûïîëíåíèåì ýòîé îïåðàöèèîíà íå ïðåâûøàëà 1);

• ó ëåâîãî ñûíà k1 âåðøèíû k2 âûñîòà ëåâîãî ïîääåðåâà áîëüøåâûñîòû ïðàâîãî ïîääåðåâà (ýòî ñîîòâåòñòâóåò äîáàâëåíèþ ýëå-ìåíòà â ïîääåðåâî, êîðíåì êîòîðîãî ÿâëÿåòñÿ ëåâûé ñûí âåð-øèíû k1).

µ´¶³

µ´¶³

AB

C

k2

k1

h

h− 1

h− 2 h− 3

µ´¶³

µ´¶³

A

B C

k1

k2

h− 3

h− 1

h− 2

h− 2

h− 3 h− 3

µ´¶³

µ´¶³

? ?

¶¶/

@@R

£££°

SSSw

©©©¼HHHj

­­­À

@@R

z z

µ´¶³

µ´¶³

C

k2

k1

h-1

h− 2

h− 3

h− 3

µ´¶³

?

¶¶/

@@R

£££°

SSSw

z

h− 3

a)

b) c)

A B

Âûøå, íà ðèñóíêå a), ïîêàçàí ôðàãìåíò äåðåâà äî âûïîëíåíèÿïðîöåäóðû äîáàâëåíèÿ, íà ðèñóíêå b) íàðóøåíèå èíâàðèàíòà äëÿ

125

Page 124: Теория алгоритмов. Котов В.М., Соболевская Е.П

âåðøèíû k2 ïîñëå âûïîëíåíèÿ ïðîöåäóðû äîáàâëåíèÿ âåðøèíû â äå-ðåâî A, íà ðèñóíêå c) ïîêàçàí LL-ïîâîðîò, êîòîðûé íåîáõîäèìî âû-ïîëíèòü, ÷òîáû äëÿ âåðøèíû k2 âûïîëíèëñÿ íàðóøåííûé èíâàðèàíò(ïîääåðåâüÿ îáîçíà÷åíû ïðÿìîóãîëüíèêàìè, âåðøèíû êðóãàìè).

Ïîñëå âûïîëíåíèÿ LL-ïîâîðîòà âûñîòû âñåõ âåðøèí, äëÿ êîòî-ðûõ áûëî âîçìîæíî íàðóøåíèå èíâàðèàíòà ( ýòî âåðøèíû, ëåæàùèåíà ïóòè îò êîðíÿ ê âåðøèíå z), îñòàëèñü òàêèìè æå, êàê è äî âûïîë-íåíèÿ ïðîöåäóðû äîáàâëåíèÿ, è ïîýòîìó äëÿ íèõ âûïîëíÿåòñÿ ñâîé-ñòâî ñáàëàíñèðîâàííîñòè ïî âûñîòàì (òàê êàê îíî âûïîëíÿëîñü äîòîãî, êàê ïðîèçîøëà ðàçáàëàíñèðîâêà). Ñëåäîâàòåëüíî, LL-ïîâîðîòïðèâîäèò ê ñáàëàíñèðîâàííîñòè ïî âûñîòàì âñåõ âåðøèí äåðåâà.

Îïèñàííûé LL-ïîâîðîò, âîññòàíàâëèâàþùèé íàðóøåííûé èíâà-ðèàíò äëÿ âåðøèíû k2, ìîæåò áûòü ðåàëèçîâàí ñëåäóþùèì îáðàçîì

begink1 := k2 ↑ .left;k2 ↑ .left := k1 ↑ .right;k1 ↑ .right := k2;z := k1;

end.

2-îé ñëó÷àé. Ïóñòü k2 âåðøèíà ìàêñèìàëüíîé ãëóáèíû, äëÿ êîòî-ðîé ïðîèçîøëà ðàçáàëàíñèðîâêà â ðåçóëüòàòå âûïîëíåíèÿ îïåðàöèèäîáàâëåíèÿ íîâîãî ýëåìåíòà è äëÿ êîòîðîé:

• âûñîòà ïðàâîãî ïîääåðåâà âåðøèíû k2 áîëüøå âûñîòû åå ëåâîãîïîääåðåâà íà 2;

• ó ïðàâîãî ñûíà k1 âåðøèíû k2 âûñîòà åãî ïðàâîãî ïîääåðåâàáîëüøå âûñîòû åãî ëåâîãî ïîääåðåâà (ïðîèñõîäèëî äîáàâëåíèåâåðøèíû â äåðåâî, êîðíåì êîòîðîãî ÿâëÿåòñÿ ïðàâûé ñûí âåð-øèíû k1).

Íà ðèñóíêå, ïðèâåäåííîì äàëåå, ïîêàçàíî: a) íàðóøåíèå èíâà-ðèàíòà äëÿ âåðøèíû k2, b) RR-ïîâîðîò, êîòîðûé íåîáõîäèìî âûïîë-íèòü, ÷òîáû âûïîëíÿëñÿ èíâàðèàíò äëÿ âåðøèíû k2. Àíàëîãè÷íî,êàê è äëÿ LL-ïîâîðîòà, ïðîöåäóðà RR-ïîâîðîòà, âûïîëíåííàÿ äëÿâåðøèíû ìàêñèìàëüíîé ãëóáèíû ñ íàðóøåííûì èíâàðèàíòîì, ïðè-âîäèò ê âûïîëíåíèþ ñâîéñòâà ñáàëàíñèðîâàííîñòè ïî âûñîòàì äëÿâñåãî äåðåâà.

126

Page 125: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

A

B C

k2

k1

h

h− 3

h− 1

h− 3h− 2

±°²¯

±°²¯

A B

C

k1

k2

h− 1

h− 2

h− 2

h− 3

±°²¯

±°²¯

z z

?

­­­À

HHHj

­­À SSw

?

©©©¼Q

QQs

¶¶/ AAU

a) b)

h− 3

Îïèñàííûé RR-ïîâîðîò, âîññòàíàâëèâàþùèé íàðóøåííûé èíâà-ðèàíò äëÿ âåðøèíû k2, ìîæåò áûòü ðåàëèçîâàí ñëåäóþùèì îáðàçîì

begink1 := k2 ↑ .right;k2 ↑ .right := k1 ↑ .left;k1 ↑ .left := k2;z := k1;

end;

3-èé ñëó÷àé. Ïóñòü k2 âåðøèíà ìàêñèìàëüíîé ãëóáèíû, äëÿ êîòî-ðîé ïðîèçîøëî íàðóøåíèå èíâàðèàíòà â ðåçóëüòàòå âûïîëíåíèÿ ïðî-öåäóðû äîáàâëåíèÿ ýëåìåíòà (z îòåö âåðøèíû k2) è äëÿ êîòîðîé:

• âûñîòà ïðàâîãî ïîääåðåâà âåðøèíû k2 áîëüøå âûñîòû åå ëåâîãîïîäääåðåâà íà 2;

• ó ïðàâîãî ñûíà k1 âåðøèíû k2 âûñîòà ëåâîãî ïîääåðåâà áîëüøåâûñîòû åãî ïðàâîãî ïîääåðåâà.

Äàëåå, íà ðèñóíêå a), ïîêàçàí ôðàãìåíò äåðåâà äî âûïîëíåíèÿïðîöåäóðû äîáàâëåíèÿ ýëåìåíòà â äåðåâî B, íà ðèñóíêå b) ïîêàçà-íî íàðóøåíèå èíâàðèàíòà äëÿ âåðøèíû k2, íà ðèñóíêå c) èçîáðàæåíRL-ïîâîðîò, êîòîðûé íåîáõîäèìî âûïîëíèòü, ÷òîáû âûïîëíÿëñÿ èí-âàðèàíò äëÿ âåðøèíû k2.

127

Page 126: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

A

B

k2

k1

k3

h

h− 1

h− 3

h− 2

h− 3

±°²¯

µ´¶³

h− 4

A B

µ´¶³

D

k3

k2 k1

h− 1

h− 2

h− 3 h− 3 h− 3

h− 3

h− 2

±°²¯

±°²¯

?

¡¡ª

HHHj

­­À

QQQs

¢¢®

@@R

?

½½½=

ZZZ~

­­­À

CCCW

¢¢®

SSSw

z z

D

C

±°²¯

±°²¯

±°²¯

A

k2

k1

k3

±°²¯

?

¡¡ª

HHHj

­­À

QQQs

¢¢®

@@R

z

D

C

z

h− 1

h− 3

h− 2

h− 3 h− 3

B

h− 4 h− 4

a)

b) c)

h− 4

C

Ïîñëå âûïîëíåíèÿ RL-ïîâîðîòà âûñîòû âåðøèí, ëåæàùèõ íà ïó-òè îò êîðíÿ äî âåðøèíû z, òå æå, ÷òî è äî âûïîëíåíèÿ îïåðàöèè äî-áàâëåíèÿ ýëåìåíòà. Ñëåäîâàòåëüíî, âûïîëíåíèå RL-ïîâîðîòà ïðèâå-ëî ê âûïîëíåíèþ èíâàðèàíòà äëÿ âñåõ âåðøèí äåðåâà. Èçîáðàæåííûéíà ðèñóíêå RL-ïîâîðîò ìîæåò áûòü ðåàëèçîâàí ñëåäóþùèì îáðàçîì:

begink1 := k2 ↑ .right; k3 := k1 ↑ .left;k2 ↑ .right := k3 ↑ .left; k1 ↑ .left := k3 ↑ .right;k3 ↑ .left := k2; k3 ↑ .right := k1;z := k3;

end.

128

Page 127: Теория алгоритмов. Котов В.М., Соболевская Е.П

4-ûé ñëó÷àé. Ïóñòü k2 âåðøèíà ìàêñèìàëüíîé ãëóáèíû, äëÿ êîòî-ðîé ïðîèçîøëî íàðóøåíèå èíâàðèàíòà â ðåçóëüòàòå âûïîëíåíèÿ ïðî-öåäóðû äîáàâëåíèÿ ýëåìåíòà (z îòåö âåðøèíû k2) è äëÿ êîòîðîé:

• âûñîòà ëåâîãî ïîääåðåâà âåðøèíû k2 áîëüøå âûñîòû ïðàâîãîïîääåðåâà íà 2;

• ó ëåâîãî ñûíà k1 âåðøèíû k2 âûñîòà ïðàâîãî ïîääåðåâà áîëüøåâûñîòû åãî ëåâîãî ïîääåðåâà.

Äàëåå, íà ðèñóíêå a), ïîêàçàíî íàðóøåíèå èíâàðèàíòà äëÿ âåð-øèíû k2, íà ðèñóíêå b) LR-ïîâîðîò, êîòîðûé íåîáõîäèìî âûïîë-íèòü, ÷òîáû âîññòàíîâèòü íàðóøåííûé èíâàðèàíò.

±°²¯

±°²¯

±°²¯

A

D

C

k2

k1

k3

h

h− 1

h− 3

h− 3

h− 4

±°²¯

±°²¯

±°²¯

A C D

k3

k1 k2

h− 1

h− 2 h− 2

h− 3 h− 4 h− 3 h− 3

±°²¯

±°²¯

z z

?

­­À

ZZZ~

­­À @@R

­­À ZZ~

?

½½½=

QQQs

¶¶/

JJ

¢¢®

@@R

a) b)

B

h− 3

B

Êàê è äëÿ RL-ïîâîðîòà, âûïîëíåíèå LR-ïîâîðîòà äëÿ âåðøè-íû ìàêñèìàëüíîé ãëóáèíû, äëÿ êîòîðîé ïðîèçîøëà ðàçáàëàíñèðîâêà,ïðèâîäèò ê âûïîëíåíèþ èíâàðèàíòà äëÿ âñåõ âåðøèí äåðåâà. Îïè-ñàííûé ïðîöåññ âîññòàíîâëåíèÿ èíâàðèàíòà ìîæåò áûòü ðåàëèçîâàíñëåäóþùèì îáðàçîì (ïóñòü z ñîäåðæèò ññûëêó íà îòöà âåðøèíûk2):

begink1 := k2 ↑ .left; k3 := k1 ↑ .right;k2 ↑ .left := k3 ↑ .right; k1 ↑ .right := k3 ↑ .left;k3 ↑ .right := k2; k3 ↑ .left := k1;z := k3;

end.

129

Page 128: Теория алгоритмов. Котов В.М., Соболевская Е.П

Âîññòàíîâëåíèÿ èíâàðèàíòà ïîñëåâûïîëíåíèÿ îïåðàöèè óäàëåíèÿ ýëåìåíòà

1-ûé ñëó÷àé. Ïóñòü k2 âåðøèíà, äëÿ êîòîðîé ïðîèçîøëà ðàçáàëàí-ñèðîâêà â ðåçóëüòàòå âûïîëíåíèÿ ïðîöåäóðû óäàëåíèÿ ýëåìåíòà èçÀÂË-äåðåâà (z îòåö âåðøèíû k2) è äëÿ êîòîðîé:

• âûñîòà åå ëåâîãî ïîääåðåâà áîëüøå âûñîòû åå ïðàâîãî ïîääåðåâàC íà 2 (ïðîèñõîäèëî óäàëåíèå âåðøèíû èç äåðåâà C);

• ó ëåâîãî ñûíà k1 âåðøèíû k2 âûñîòà ëåâîãî ïîääåðåâà A áîëüøåèëè ðàâíà âûñîòå ïðàâîãî ïîääåðåâà B.

Ðàññìîòðèì ñíà÷àëà ñèòóàöèþ, êîãäà âûñîòû äåðåâüåâ A è B ðàâíû.

µ´¶³

µ´¶³

A

C

k2

k1

µ´¶³

µ´¶³

A

C

k1

k2

µ´¶³

µ´¶³

? ?

¶¶/

@@R

£££°

SSSw

©©©¼HHHj

­­­À

@@R

z z

B B

h− 2 h− 2 h− 2

h− 2

h− 1

h

h− 3

h− 3

h− 1

h

µ´¶³

µ´¶³

A

k2

k1

µ´¶³

?

¶¶/

@@R

£££°

SSSw

z

B

h− 2 h− 2

h− 1

h

C

h− 2

a)

b) c)

130

Page 129: Теория алгоритмов. Котов В.М., Соболевская Е.П

Íà ðèñóíêå a), èçîáðàæåí ôðàãìåíò äåðåâà äî âûïîëíåíèÿ ïðîöåäó-ðû óäàëåíèÿ âåðøèíû èç äåðåâà C, íà ðèñóíêå b) ïîêàçàíî íàðóøåíèåèíâàðèàíòà äëÿ âåðøèíû k2, íà ðèñóíêå c) ïîêàçàí LL-ïîâîðîò, êî-òîðûé íåîáõîäèìî âûïîëíèòü, ÷òîáû äëÿ âåðøèíû k2 âûïîëíèëñÿíàðóøåííûé èíâàðèàíò.

Ïîñëå âûïîëíåíèÿ LL-ïîâîðîòà âûñîòû âñåõ âåðøèí, ëåæàùèõíà ïóòè îò êîðíÿ äî âåðøèíû z, îñòàëèñü òåìè æå, ÷òî è äî âûïîëíå-íèÿ îïåðàöèè óäàëåíèÿ, ñëåäîâàòåëüíî, äëÿ âñåãî äåðåâà âûïîëíÿåòñÿèíâàðèàíò.

Ðàññìîòðèì òåïåðü ñèòóàöèþ, êîãäà âûñîòà äåðåâà A áîëüøå âû-ñîòû äåðåâà B.

µ´¶³

µ´¶³

A

C

k2

k1

µ´¶³

µ´¶³

A

C

k1

k2

µ´¶³

µ´¶³

? ?

¶¶/

@@R

£££°

SSSw

©©©¼HHHj

­­­À

@@R

z z

h-2

h-2

h-2

h-1

h-3

h-3

h-1

h

µ´¶³

µ´¶³

A

k2

k1

µ´¶³

?

¶¶/

@@R

£££°

SSSw

z

h-2 h-3

h-1

h

C

h-2

a)

b) c)

B

h-3

B B

h-3

Íà ðèñóíêå b), ïîêàçàíî íàðóøåíèå èíâàðèàíòà äëÿ âåðøèíû k2, íà

131

Page 130: Теория алгоритмов. Котов В.М., Соболевская Е.П

ðèñóíêå c) LL-ïîâîðîò, êîòîðûé âîññòàíàâëèâàåò èíâàðèàíò äëÿâåðøèíû k2.

Îòìåòèì, ÷òî ïîñëå ïîâîðîòà âûñîòû âåðøèí, ëåæàùèõ íà ïóòèîò êîðíÿ äî âåðøèíû z, ìîãëè óìåíüøèòüñÿ íà 1, ÷òî ìîæåò ïðèâåñòèê òîìó, ÷òî äëÿ îäíîé èç íèõ áóäåò íàðóøàòüñÿ èíâàðèàíò.2-îé ñëó÷àé. Ïóñòü k2 âåðøèíà, äëÿ êîòîðîé ïðîèçîøëà ðàçáàëàí-ñèðîâêà â ðåçóëüòàòå âûïîëíåíèÿ ïðîöåäóðû óäàëåíèÿ ýëåìåíòà (îò-ìåòèì, ÷òî z îòåö âåðøèíû k2) è äëÿ êîòîðîé:

• âûñîòà åå ïðàâîãî ïîääåðåâà áîëüøå âûñîòû åå ëåâîãî ïîääåðåâàA íà 2 (ïðîèñõîäèëî óäàëåíèå âåðøèíû èç äåðåâà A);

• ó ïðàâîãî ñûíà k1 âåðøèíû k2 âûñîòà ïðàâîãî ïîääåðåâà Ñ áîëü-øå èëè ðàâíà âûñîòå ëåâîãî ïîääåðåâà B.

Ñíà÷àëà ðàññìîòðèì ïåðâóþ ñèòóàöèþ, êîãäà âûñîòà äåðåâà Cáîëüøå âûñîòû äåðåâà B.

±°²¯

±°²¯

A

B C

k2

k1

h

h− 3

h− 1

h− 3h− 2

±°²¯

±°²¯

A B

C

k1

k2

h− 1

h− 2

h− 2

h− 3

±°²¯

±°²¯

z z

?

­­­À

HHHj

­­À SSw

?

©©©¼Q

QQs

¶¶/ AAU

h-3

±°²¯

±°²¯

B C

k2

k1

h

h− 1

h− 3h− 2

±°²¯z

?

­­­À

HHHj

­­À SSwA

h-2

132

Page 131: Теория алгоритмов. Котов В.М., Соболевская Е.П

Íà ðèñóíêå áûë ïðèâåäåí RR-ïîâîðîò, êîòîðûé íåîáõîäèìî âûïîë-íèòü äëÿ òîãî, ÷òîáû âûïîëíÿëñÿ íàðóøåííûé èíâàðèàíò äëÿ âåð-øèíû k2

Òåïåðü ïåðåéäåì ê ðàññìîòðåíèþ âòîðîé ñèòóàöèè, êîãäà âûñîòûäåðåâüåâ B è C ðàâíû.

Íà ðèñóíêå, ïðèâåäåííîì íèæå, ðàññìîòðåíà äàííàÿ ñèòóàöèÿè ïðèâåäåí RR-ïîâîðîò, êîòîðûé íåîáõîäèìî âûïîëíèòü äëÿ òîãî,÷òîáû âûïîëíÿëñÿ íàðóøåííûé èíâàðèàíò äëÿ âåðøèíû k2

±°²¯

±°²¯

A

C

k2

k1

h

h− 3

h− 1

h− 2

±°²¯

±°²¯

A

C

k1

k2

h

h− 1

h− 2

±°²¯

±°²¯

z z

?

­­­À

HHHj

­­À SSw

?

©©©¼Q

QQs

¶¶/ AAU

h− 3

±°²¯

±°²¯

C

k2

k1

h

h− 1

h− 2

±°²¯

z

?

­­­À

HHHj

­­À SSwA

h− 2 B

h− 2

B

h− 2

B

h− 2

 îáîèõ ñèòóàöèÿõ RR-ïîâîðîò ïðèâîäèò ê âûïîëíåíèþ íàðó-øåííîãî èíâàðèàíòà äëÿ âåðøèíû k2. Îäíàêî â ïåðâîé ñèòóàöèè îíïðèâåäåò ê âûïîëíåíèþ èíâàðèàíòà äëÿ âñåãî äåðåâà, à âî âòîðîéñèòóàöèè âîçìîæíî ïîÿâëåíèå âåðøèíû, ëåæàùåé íà ïóòè îò êîðíÿäî âåðøèíû z, ó êîòîðîé áóäåò íàðóøåí èíâàðèàíò.

133

Page 132: Теория алгоритмов. Котов В.М., Соболевская Е.П

3-èé ñëó÷àé. Ïóñòü k2 âåðøèíà, äëÿ êîòîðîé ïðîèçîøëî íàðóøåíèåèíâàðèàíòà â ðåçóëüòàòå âûïîëíåíèÿ ïðîöåäóðû óäàëåíèÿ ýëåìåíòà(z îòåö âåðøèíû k2) è äëÿ êîòîðîé:

• âûñîòà ïðàâîãî ïîääåðåâà âåðøèíû k2 áîëüøå âûñîòû åå ëåâîãîïîäääåðåâà A íà 2 (ïðîèñõîäèëî óäàëåíèå âåðøèíû èç äåðåâàA);

• ó ïðàâîãî ñûíà k1 âåðøèíû k2 âûñîòà ëåâîãî ïîääåðåâà áîëüøåâûñîòû åãî ïðàâîãî ïîääåðåâà.

±°²¯

±°²¯

±°²¯

A

k2

k1

k3

h

h− 1

h− 3

h− 2

±°²¯

µ´¶³

h− 3

A B

µ´¶³

D

k3

k2 k1

h− 1

h− 2

h− 3 h− 3 h− 3

h− 3

h− 2

±°²¯

±°²¯

?

¡¡ª

HHHj

­­À

QQQs

¢¢®

@@R

?

½½½=

ZZZ~

­­­À

CCCW

¢¢®

SSSwD

C

±°²¯

±°²¯

±°²¯

k2

k1

k3

±°²¯

?

¡¡ª

HHHj

­­À

QQQs

¢¢®

@@R

D

C

h

h− 1

h− 3

B

h− 3 h− 3

a)

b) c)

h− 3

C

A

h− 2 h− 2

[h− 4]

B

h− 3[h− 4]

[h− 4]

z

z

z

Íà ðèñóíêå a), ïîêàçàí ôðàãìåíò äåðåâà äî âûïîëíåíèÿ ïðîöåäóðûóäàëåíèÿ âåðøèíû èç äåðåâà À, íà ðèñóíêå b) ïîêàçàíî íàðóøåíèå

134

Page 133: Теория алгоритмов. Котов В.М., Соболевская Е.П

èíâàðèàíòà äëÿ âåðøèíû k2, íà ðèñóíêå c) èçîáðàæåí RL-ïîâîðîò,êîòîðûé íåîáõîäèìî âûïîëíèòü äëÿ âîññòàíîâëåíèÿ èíâàðèàíòà äëÿâåðøèíû k2.

Ïîñëå âûïîëíåíèÿ ïîâîðîòà âîçìîæíî ïîÿâëåíèå âåðøèíû, ëå-æàùåé íà ïóòè îò êîðíÿ äî âåðøèíû z, ó êîòîðîé áóäåò íàðóøåíèíâàðèàíò.4-ûé ñëó÷àé. Ïóñòü k2 âåðøèíà, äëÿ êîòîðîé ïðîèçîøëî íàðóøåíèåèíâàðèàíòà â ðåçóëüòàòå âûïîëíåíèÿ ïðîöåäóðû óäàëåíèÿ ýëåìåíòà(z îòåö âåðøèíû k2) è äëÿ êîòîðîé:

• âûñîòà ëåâîãî ïîääåðåâà âåðøèíû k2 áîëüøå âûñîòû ïðàâîãîïîääåðåâà D íà 2 (ïðîèñõîäèëî óäàëåíèå âåðøèíû èç äåðåâàD);

• ó ëåâîãî ñûíà k1 âåðøèíû k2 âûñîòà ïðàâîãî ïîääåðåâà áîëüøåâûñîòû åãî ëåâîãî ïîääåðåâà.

m

m

lA

D

C

k2

k1

k3

h

h− 1 h− 3

h− 3

h− 3

m

n n

A C D

k3

k1 k2

h− 1

h− 2 h− 2

h− 3 h− 3 h− 3

m m

?

­­À

ZZ~

­­À @@R

­­À ZZ~

?

½½=

QQQs

¶¶/ JJ ¢¢® @

@R

b) c)

B

h− 3[h− 4]

B

h− 3[h− 4]

m

m

lA

C

k2

k1

k3

h

h− 1 h− 2

h− 3

h− 3

?

­­À

ZZ~

­­À @@R

­­À ZZ~

a)

B

h− 3[h− 4]

m

D

z z

z

135

Page 134: Теория алгоритмов. Котов В.М., Соболевская Е.П

Íà ðèñóíêå a), ïîêàçàí ôðàãìåíò äåðåâà äî âûïîëíåíèÿ îïåðàöèèóäàëåíèÿ, íà ðèñóíêå b) íàðóøåíèå èíâàðèàíòà äëÿ âåðøèíû k2,íà ðèñóíêå c) LR-ïîâîðîò, êîòîðûé íåîáõîäèìî âûïîëíèòü, ÷òîáûâîññòàíîâèòü íàðóøåííûé èíâàðèàíò äëÿ âåðøèíû k2.

Ïîñëå âûïîëíåíèÿ ïîâîðîòà âîçìîæíî ïîÿâëåíèå âåðøèíû, ëå-æàùåé íà ïóòè îò êîðíÿ äî âåðøèíû z, ó êîòîðîé áóäåò íàðóøåíèíâàðèàíò.

Òðóäîåìêîñòü âûïîëíåíèÿ ëþáîé áàçîâîé îïåðàöèè äëÿ ÀÂË-äåðåâà åñòü O(log2 n). Ýêñïåðèìåíòàëüíûå èññëåäîâàíèÿ ïîêàçûâàþò,÷òî â ñðåäíåì ïðèáëèçèòåëüíî íà äâà äîáàâëåíèÿ ïðèõîäèòñÿ îäíàáàëàíñèðîâêà, à ïðè èñêëþ÷åíèè ýëåìåíòà áàëàíñèðîâêà ïðîèñõîäèòäàæå â îäíîì èç ïÿòè ñëó÷àåâ.

Óïðàæíåíèå. Ïîñòðîèòü ÀÂË-äåðåâî, ïîñëåäîâàòåëüíî äîáàâ-ëÿÿ êëþ÷è: 2, 3, 4, 6, 1, 9, 10, 11, 5.

4.2.2. 2-3 äåðåâüÿ

Îïðåäåëåíèå 4.1. Ïîèñêîâîå äåðåâî íàçûâàåòñÿ 2-3 äåðåâîì, åñëèîíî îáëàäàåò ñëåäóþùèìè ñâîéñòâàìè (èíâàðèàíòàìè):

• êàæäàÿ âåðøèíà x, íå ÿâëÿþùàÿñÿ ëèñòîì, ñîäåðæèò äâà èëèòðè ñûíà; ïðè ýòîì åãî ñûíîâüÿ êëàññèôèöèðóþòñÿ êàê ëåâûéls(x), ñðåäíèé ss(x) è (âîçìîæíî) ïðàâûé ñûí rs(x);

• âñå âèñÿ÷èå âåðøèíû íàõîäÿòñÿ íà îäíîé ãëóáèíå (íà îäèíàêî-âîì ðàññòîÿíèè îò êîðíÿ).

Îòìåòèì, ÷òî äåðåâî, ñîñòîÿùåå èç îäíîé åäèíñòâåííîé âåðøèíû,òàêæå ñ÷èòàåòñÿ 2-3 äåðåâîì.

Òàê êàê 2-3 äåðåâî ÿâëÿåòñÿ ïîèñêîâûì, òî äëÿ êàæäîé âåðøèíûv âûïîëíÿþòñÿ ñëåäóþùèå ñâîéñòâà: çíà÷åíèå êëþ÷åé â ïîääåðåâå,êîðíåì êîòîðîãî ÿâëÿåòñÿ ëåâûé ñûí âåðøèíû v, ìåíüøå çíà÷åíèéêëþ÷åé â ïîääåðåâå, êîðíåì êîòîðîãî ÿâëÿåòñÿ ñðåäíèé ñûí âåðøèíûv; çíà÷åíèå êëþ÷åé â ïîääåðåâå, êîðíåì êîòîðîãî ÿâëÿåòñÿ ñðåäíèéñûí âåðøèíû v, ìåíüøå çíà÷åíèé êëþ÷åé â ïîääåðåâå, êîðíåì êîòî-ðîãî ÿâëÿåòñÿ ïðàâûé ñûí âåðøèíû v.

Ñòðóêòóðà 2-3 äåðåâà

1. Èíôîðìàöèÿ (êëþ÷è) õðàíèòñÿ òîëüêî â âèñÿ÷èõ âåðøèíàõ, àâñå âíóòðåííèå âåðøèíû ÿâëÿþòñÿ ñïðàâî÷íûìè.

136

Page 135: Теория алгоритмов. Котов В.М., Соболевская Е.П

2. Êàæäàÿ âíóòðåííÿÿ âåðøèíà i èìååò äâå ìåòêè:l(i) ìàêñèìàëüíîå çíà÷åíèå êëþ÷à â ïîääåðåâå, êîðíåì êîòî-ðîãî ÿâëÿåòñÿ ëåâûé ñûí âåðøèíû i;s(i) ìàêñèìàëüíîå çíà÷åíèå êëþ÷à â ïîääåðåâå, êîðíåì êîòî-ðîãî ÿâëÿåòñÿ ñðåäíèé ñûí âåðøèíû i.

Ëþáîå óïîðÿäî÷åííîå ìíîæåñòâî A ìîæíî ïðåäñòàâèòü â âèäå2-3 äåðåâà, åñëè ïðèñâàèâàòü çíà÷åíèÿ ýëåìåíòîâ ýòîãî ìíîæåñòâàâèñÿ÷èì âåðøèíàì (ýëåìåíòû ìîæíî ïðåäñòàâèòü â ïîðÿäêå ñëåâàíàïðàâî).

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

³³³³³³³³³³

PPPPPPPPP

··

···

AAAAA

¢¢

¢¢¢

¢¢

¢¢

AAAAA

5,9

1,3 7,9 11,13

1 3 5 7 9 11 13 15

-

Äîêàæåì ñåé÷àñ òåîðåìó, êîòîðàÿ óñòàíàâëèâàåò ñâÿçü ìåæäóêîëè÷åñòâîì óçëîâ, êîëè÷åñòâîì ëèñòüåâ è âûñîòîé 2-3 äåðåâà.Òåîðåìà 4.2. Ïóñòü n îáùåå êîëè÷åñòâî âåðøèí â 2-3 äåðåâå(âêëþ÷àÿ êîðåíü è ëèñòüÿ), l êîëè÷åñòâî ëèñòüåâ, h âûñîòàäåðåâà. Òîãäà ñïðàâåäëèâû ñëåäóþùèå íåðàâåíñòâà:

2h ≤ l ≤ 3h,

2h+1 − 1 ≤ n ≤ 3h+1 − 12

.

Äîêàçàòåëüñòâî. Ïóñòü âûñîòà 2-3 äåðåâà h = 1, òîãäà ñóùåñòâóþòòîëüêî äâà äåðåâà, êîòîðûå ïðèâåäåíû äàëåå íà ðèñóíêå.

137

Page 136: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

··

··

TTTT

¡¡

¡¡

@@

@@

l = 2, n = 3 l = 3, n = 4

Äëÿ h = 1 (21 ≤ l ≤ 31 è 4 − 1 ≤ n ≤ (9 − 1)/2) óòâåðæäåíèåâåðíî.

Ïðåäïîëîæèì, ÷òî íåðàâåíñòâà âûïîëíÿþòñÿ äëÿ äåðåâà âûñîòûh, äîêàæåì, ÷òî îíè âåðíû è äëÿ h = h + 1.

Ïóñòü èìååòñÿ äåðåâî Th âûñîòû h.Ñíà÷àëà ðàññìîòðèì ñîîòíîøåíèÿ äëÿ ëèñòüåâ.Îáîçíà÷èì ÷åðåç lh êîëè÷åñòâî ëèñòüåâ â Th, à ÷åðåç lmin

h (lmaxh )

ìèíèìàëüíî (ìàêñèìàëüíî) âîçìîæíîå êîëè÷åñòâî ëèñòüåâ â Th.Óâåëè÷åíèå âûñîòû äåðåâà Th íà åäèíèöó ïðèâîäèò ê òîìó, ÷òî

íà ãëóáèíå h + 1 ìàêñèìàëüíîå êîëè÷åñòâî ëèñòüåâ lmaxh+1 íå ïðåâîñõî-

äèò 3lmaxh (êîãäà ê êàæäîìó ëèñòó Th äîáàâëÿåòñÿ òðè íîâûõ ñûíà)

è íå ìåíüøå âåëè÷èíû 2lminh (êîãäà ê êàæäîìó ëèñòó Th äîáàâëÿåòñÿ

äâà íîâûõ ñûíà).Ñëåäîâàòåëüíî, âûïîëíåíû ñëåäóþùèå íåðàâåíñòâà:

lminh+1 ≤ lh+1 ≤ lmax

h+1 ,

2lminh ≤ lh+1 ≤ 3lmax

h .

 ñèëó ñäåëàííîãî ðàíåå íàìè èíäóêöèîííîãî ïðåäïîëîæåíèÿèìååì:

2h+1 ≤ lh+1 ≤ 3h+1.

Òåïåðü äîêàæåì ñîîòíîøåíèå äëÿ îáùåãî êîëè÷åñòâà âåðøèí.Îáîçíà÷èì ÷åðåç nh îáùåå êîëè÷åñòâî âåðøèí â Th, à ÷åðåç nmin

h

( nmaxh ) ìèíèìàëüíî (ìàêñèìàëüíî) âîçìîæíîå êîëè÷åñòâî âåðøèí â

Th.Òîãäà âåðíû ñëåäóþùèå íåðàâåíñòâà:

nminh + lmin

h+1 ≤ nh+1 ≤ nmaxh + lmax

h+1 .

 ñèëó èíäóêöèîííîãî ïðåäïîëîæåíèÿ è ñ ó÷åòîì òîãî, ÷òî

138

Page 137: Теория алгоритмов. Котов В.М., Соболевская Е.П

2h+1 − 1 + 2h+1 = 2h+2 − 1

è

3h+1 − 12

+ 3h+1 =3h+1 + 2 · 3h+1 − 1

2=

3 · 3h+1 − 12

=3h+2 − 1

2

ïîëó÷àåì òðåáóåìîå íåðàâåíñòâî:

2h+2 − 1 ≤ nh+1 ≤ 3h+2 − 12

.

Äîêàçàòåëüñòâî òåîðåìû çàâåðøåíî. 2

Îñíîâíûå îïåðàöèèè ñ 2-3 äåðåâüÿìè

1. Ïîèñê ýëåìåíòà ñ çàäàííûì êëþ÷îì a.

• Ïóñòü root êîðåíü 2-3 äåðåâà. Ïîëàãàåì t = root.

• Ïîêà t íå ëèñò, ïîâòîðÿåì ñëåäóþùóþ ïîñëåäîâàòåëüíîñòü øà-ãîâ :

1. åñëè a ≤ l(t), òî t := ls(t);2. èíà÷å, åñëè a ≤ s(t) èëè rs(t) = 0 (ó âåðøèíû òîëüêî äâà

ñûíà), òî t := ss(t);3. èíà÷å, t := rs(t).

• Ñðàâíèâàåì êëþ÷åâîå çíà÷åíèå âèñÿ÷åé âåðøèíû t ñ êëþ÷îì a;åñëè îíè ñîâïàäàþò, òî âåðøèíà íàéäåíà, â ïðîòèâíîì ñëó÷àåâåðøèíû ñ çàäàííûì êëþ÷îì a â äåðåâå íå ñóùåñòâóåò.Ïðîöåäóðà ïîèñêà ýëåìåíòà ñ çàäàííûì êëþ÷îì a çàâåðøåíà.

2. Äîáàâëåíèå ýëåìåíòà ñ êëþ÷îì a ( ïðåäïîëîæèì, ÷òî íàì íåîáõî-äèìî äîáàâèòü âåðøèíó ñ êëþ÷îì a â íåïóñòîå äåðåâî (èìååòñÿ õîòÿáû îäèí ýëåìåíò)).

Åñëè äåðåâî ñîñòîèò èç åäèíñòâåííîé âåðøèíû w (key(w) êëþ÷âåðøèíû w), òî

• îáðàçóåì íîâóþ âåðøèíó v (ëèñò) ñ êëþ÷îì key(v) := a;

• îáðàçóåì íîâûé êîðåíü r;

139

Page 138: Теория алгоритмов. Котов В.М., Соболевская Е.П

• åñëè key(w) < key(v), òî ïîëàãàåì w è v ëåâûì è ïðàâûì ñûíîìêîðíÿ r ñîîòâåòñòâåííî; â ïðîòèâíîì ñëó÷àå w è v ïðàâûé èëåâûé ñûí r;

• ôîðìèðóåì ìåòêè âåðøèíû r.

Äàííàÿ ñèòóàöèÿ ðàññìàòðèâàåòñÿ íèæå íà ðèñóíêå.

±°²¯

±°²¯

±°²¯

±°²¯

¡¡

JJ

-

2 2 3

r3

Ðàññìîòðèì ñåé÷àñ ñèòóàöèþ, êîãäà â äåðåâå áîëåå îäíîãî óçëà. ýòîì ñëó÷àå äëÿ äîáàâëåíèÿ ýëåìåíòà ñ çàäàííûì êëþ÷îì a íåîá-õîäèìî âûïîëíèòü ñëåäóþùèå äåéñòâèÿ:

1) îñóùåñòâëÿåì ïîèñê îòöà f äëÿ âíîâü äîáàâëÿåìîé âåðøèíû vñ êëþ÷åâûì çíà÷åíèåì a (ýòî áóäåò îòåö âåðøèíû t â îïèñàííîéïðîöåäóðå ïîèñêà ýëåìåíòà ñ çàäàííûì êëþ÷îì a);

2) ôîðìèðóåì íîâûé ëèñò v è ïîëàãàåì key(v) := a;

3) îïðåäåëÿåì ïîçèöèþ âåðøèíû v ïî îòíîøåíèþ ê îòöó. Åñëè óîòöà f áûëî òîëüêî äâà ñûíà v1 è v2 èa) åñëè key(v) < key(v1), òî v, v1, v2;b) åñëè key(v) > key(v2), òî v1, v2, v;c) åñëè key(v1) < key(v) < key(v2), òî v1, v, v2;Åñëè ó îòöà f óæå áûëî òðè ñûíà v1, v2, v3, òî àíàëîãè÷íûìîáðàçîì îïðåäåëÿåì ïîçèöèþ v ïî îòíîøåíèþ ê îòöó êàê îäíóèç ñëåäóþùèõ: v, v1, v2, v3; v1, v, v2, v3; v1, v2, v, v3; v1, v2, v3, v.

4) åñëè ó îòöà f áûëî òîëüêî äâà ñûíà v1 è v2, òî â ñîîòâåòñòâèè ñíàéäåííîé êîíôèãóðàöèåé, óñòàíàâëèâàåì äëÿ âåðøèíû f ññûë-êè íà ëåâîãî, ïðàâîãî è ñðåäíåãî ñûíà è êîððåêòèðóåì ìåòêèâåðøèí âäîëü ïóòè îò êîðíÿ ê äîáàâëåííîé âåðøèíå v; êîíåöïðîöåäóðû äîáàâëåíèÿ;

140

Page 139: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

­­­

LLL

""

""

ll

l

f

1 2

f

1 2 7

-7

1:2 1:2

5) åñëè ó îòöà f óæå áûëî òðè ñûíà v1, v2, v3, òî áóäåì âûïîëíÿòüñëåäóþùèå äåéñòâèÿ:a) â ñîîòâåòñòâèè ñ íàéäåííîé êîíôèãóðàöèåé (ïðåäïîëîæèìäëÿ îïðåäåëåííîñòè, ÷òî îíà ðàâíà v1, v, v2, v3, ò. å. key(v1) <key(v) < key(v2) < key(v3) îáðàçóåì íîâóþ âåðøèíó v′, ñûíî-âüÿìè êîòîðîé ÿâëÿþòñÿ äâå ìàêñèìàëüíûå âåðøèíû èç íàéäåí-íîé êîíôèãóðàöèè, à ñûíîâüÿìè âåðøèíû f äâå ìèíèìàëüíûåâåðøèíû (ñì. ðèñ. 4.3);

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯··

TT¶

¶TT

f

v1 v

v′

v2 v3

Ðèñ. 4.3.

b) ïóñòü f ′ îòåö âåðøèíû f .Åñëè ó âåðøèíû f íåò îòöà (f êîðåíü), òî îáðàçóåì íîâûéêîðåíü r′ è íàçíà÷àåì f è v′ ëåâûì è ñðåäíèì ñûíîâüÿìè êîðíÿr′ è, ñîîòâåòñòâåííî, âûñîòà äåðåâà óâåëè÷èâàåòñÿ íà åäèíèöó.Êîððåêòèðóåì ìåòêè è çàâåðøàåì ïðîöåäóðó äîáàâëåíèÿ ýëå-ìåíòà.

l

n m½½ TT

r′

f v′

141

Page 140: Теория алгоритмов. Котов В.М., Соболевская Е.П

Åñëè ó óçëà f åñòü îòåö f ′, îïðåäåëÿåì êîíôèãóðàöèþ ñûíîâåéf ′ è âåðøèíû v′ ñëåäóþùèì îáðàçîì: óçåë v′ ñëåäóåò íåïîñðåä-ñòâåííî çà óçëîì f . Ïîëàãàåì f = f ′; v = v′ è âîçâðàùàåìñÿê øàãó 4) àëãîðèòìà.

Òðóäîåìêîñòü àëãîðèòìà äîáàâëåíèÿ ýëåìåíòà ñ çàäàííûì êëþ-÷îì çàâèñèò îò îáùåãî êîëè÷åñòâà äîáàâëåíèé âåðøèí (íà÷àëüíîéâåðøèíû v è âåðøèí v′, äîáàâëåíèå êîòîðûõ ïîòðåáîâàëîñü äëÿ ïîä-äåðæàíèÿ èíâàðèàíòîâ 2-3 äåðåâà). Î÷åâèäíî, ÷òî êîëè÷åñòâî äîáàâ-ëÿåìûõ âåðøèí íå ïðåâîñõîäèò âûñîòû äåðåâà h, òàê êàê íà êàæäîìñëåäóþùåì øàãå äîáàâëÿåòñÿ âåðøèíà íà áîëüøåé âûñîòå. Êàê ñëå-äóåò èç òåîðåìû 4.2 âûñîòà 2-3 äåðåâà ñ n ëèñòüÿìè íå ïðåâîñõîäèòlog n, è òàê êàê äëÿ äîáàâëåíèÿ îäíîé âåðøèíû òðåáóåòñÿ êîíå÷íîå÷èñëî îïåðàöèé, òî ñëîæíîñòü àëãîðèòìà äîáàâëåíèÿ íîâîãî ýëåìåí-òà â 2-3 äåðåâî åñòü O(log n).

3. Óäàëåíèå ýëåìåíòà ñ êëþ÷îì a.

• Íàéäåì âåðøèíó v ñ êëþ÷îì key(v) = a.

• Ïóñòü f îòåö âåðøèíû v. Óäàëÿåì âåðøèíó v.

• Åñëè v áûëà êîðíåì, òî ïîëó÷àåì ïóñòîå äåðåâî è çàâåðøàåìïðîöåäóðó óäàëåíèÿ.

• Åñëè ó âåðøèíû f îñòàëîñü äâà ñûíà(ýòî äîïóñòèìî äëÿ 2-3 äå-ðåâà), òî îïðåäåëÿåì êîíôèãóðàöèþ ñûíîâåé âåðøèíû f , ôîð-ìèðóåì ìåòêè âåðøèí è çàâåðøàåì ïðîöåäóðó óäàëåíèÿ.

• Åñëè ó âåðøèíû f îñòàëñÿ òîëüêî îäèí ñûí v1, òîa) åñëè f êîðåíü, òî âåðøèíó v1 äåëàåì êîðíåì, ôîðìèðóåììåòêè è çàâåðøàåì ïðîöåäóðó óäàëåíèÿ;b) åñëè f íå êîðåíü, òî îí äîëæåí èìåòü ïî êðàéíåé ìåðå îäíîãîáðàòà g;

ïðåäïîëîæèì, ÷òî áðàò g íàõîäèòñÿ ñëåâà îò íåãî è ó g òîëüêîäâà ñûíà: w1 è w2, òîãäà äåëàåì v1 ïðàâûì ñûíîì âåðøèíû g;ïîëàãàåì v = f è âîçâðàùàåìñÿ ê øàãó 2 àëãîðèòìà;

142

Page 141: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

¿¿

¿¿

ee

ee

g

w1 w2 v1

f

åñëè ó áðàòà g òðè ñûíà: w1, w2, w3, òî ñàìîãî ïðàâîãî ñûíà w3

äåëàåì ëåâûì ñûíîì âåðøèíû f , à v1 äåëàåì åå ñðåäíèì ñûíîì,ôîðìèðóåì ìåòêè è çàâåðøàåì ïðîöåäóðó óäàëåíèÿ ýëåìåíòà;

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

··

··

AAAA

¶¶

¶¶

AAAA

,,

@@g f

w1 w2 w3 v1

ïðåäïîëîæèì, ÷òî áðàò íàõîäèòñÿ ñïðàâà îò íåãî; åñëè ó gòîëüêî äâà ñûíà: w1 è w2, òî äåëàåì v1 ëåâûì ñûíîì âåðøèíûg, à w1, w2 ñðåäíèì è ïðàâûì ñûíîâüÿìè; ïîëàãàåì v = f è ïå-ðåõîäèì ê øàãó 2 àëãîðèòìà; åñëè ó áðàòà g òðè ñûíà: w1, w2, w3,òî îïðåäåëÿåì v1, w1 êàê ëåâûé è ñðåäíèé ñûí âåðøèíû f , îïðå-äåëÿåì w2, w3 êàê ëåâûé è ñðåäíèé ñûí âåðøèíû g; ôîðìèðóåììåòêè è çàâåðøàåì ïðîöåäóðó óäàëåíèÿ ýëåìåíòà;

Òðóäîåìêîñòü àëãîðèòìà óäàëåíèÿ âåðøèíû v çàâèñèò îò îáùåãîêîëè÷åñòâà óäàëÿåìûõ âåðøèí (íà÷àëüíîé âåðøèíû v è òåõ âåðøèí,óäàëåíèå êîòîðûõ ïîòðåáîâàëîñü äëÿ ïîääåðæàíèÿ èíâàðèàíòîâ 2-3äåðåâà). Îáùåå êîëè÷åñòâî óäàëÿåìûõ âåðøèí íå ïðåâîñõîäèò âûñî-òû äåðåâà, òàê êàê íà êàæäîì î÷åðåäíîì øàãå àëãîðèòìà ïðîèñõî-äèò óäàëåíèå âåðøèíû íà áîëüøåé âûñîòå. Êàê ñëåäóåò èç òåîðåìû4.2, âûñîòà 2-3 äåðåâà ñ n ëèñòüÿìè íå ïðåâîñõîäèò log n, è òàê êàêóäàëåíèå îäíîé âåðøèíû âûïîëíÿåòñÿ çà êîíå÷íîå ÷èñëî øàãîâ, òîñëîæíîñòü àëãîðèòìà óäàëåíèÿ ýëåìåíòà èç 2-3 äåðåâà åñòü O(log n).

143

Page 142: Теория алгоритмов. Котов В.М., Соболевская Е.П

4.2.3. Êðàñíî-÷åðíûå äåðåâüÿÊðàñíî-÷åðíîå äåðåâî ÿâëÿåòñÿ åùå îäíèì ïðèìåðîì ñáàëàíñè-

ðîâàííûõ ïîèñêîâûõ äåðåüåâ. Ñïåöèàëüíûå îïåðàöèè áàëàíñèðîâêèãàðàíòèðóþò, ÷òî âûñîòà êðàñíî-÷åðíîãî äåðåâà íå ïðåâçîéäåò âåëè-÷èíû O(log n), áîëåå òîãî, òðóäîåìêîñòü ñàìèõ ïðîöåäóð áàëàíñèðîâ-êè òàêæå îãðàíè÷åíà ýòîé âåëè÷èíîé. Âñå âûøå ñêàçàííîå ïîçâîëÿåòóòâåðæäàòü, ÷òî òðóäîåìêîñòü âñåõ áàçîâûõ îïåðàöèè äëÿ êðàñíî-÷åðíîãî äåðåâà åñòü O(log n).

k

k

k k

¢¢¢

TTT

­­

JJJ

!!!!!!!HHHH

%%%

BBB

k

k

,,

TTT

¡¡¡

¤¤ k

AA

k

v v

v vv v

v vv v

v v

vv vv

vv

¢¢

DD

££

AA

v££ TT

v

¦¦¦

CCC

vBB

¤¤¤

CCC

¯¯

¦¦CC

TTEE

¤¤

··

CCC

¯¯

BB

1

QQ

QQ

¶¶

ccc

£££

JJJ

26

41

4730

38

3935

2823

21

17

14

16

15

10

7 12

3

19

20

Îïðåäåëåíèå 4.2. Êðàñíî-÷åðíîå äåðåâî ýòî áèíàðíîå ïîèñêîâîåäåðåâî, äëÿ êîòîðîãî âûïîëíÿþòñÿ ñëåäóþùèå ñâîéñòâà:

• êàæäàÿ âåðøèíà ÿâëÿåòñÿ ëèáî êðàñíîé, ëèáî ÷åðíîé;

• êàæäûé ëèñò ÷åðíûé;

• ó êðàñíîé âåðøèíû îáà åå ñûíà ÿâëÿþòñÿ ÷åðíûìè;

• ëþáîé ïóòü èç êîðíÿ â ëèñòüÿ ñîäåðæèò îäèíàêîâîå êîëè÷å-ñòâî ÷åðíûõ âåðøèí.

144

Page 143: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ñâîéñòâà êðàñíî-÷åðíûõ äåðåâüåâ áóäåì äëÿ êðàòêîñòè íàçûâàòü RB-ñâîéñòâàìè.

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

Ðàíåå íà ðèñóíêå ïðèâåäåí ïðèìåð êðàñíî-÷åðíîãî äåðåâà. Âñå÷åðíûå âåðøèíû âûäåëåíû ÷åðíûì öâåòîì, à êðàñíûå - áåëûì; âîçëåêàæäîé âåðøèíû óêàçàíî åå êëþ÷åâîå çíà÷åíèå.

Äëÿ êàæäîé âåðøèíû v äåðåâà îïðåäåëèì åå ÷åðíóþ âûñîòó:bh(v), êàê êîëè÷åñòâî ÷åðíûõ âåðøèí íà ïóòè èç âåðøèíû v âíèç âîäèí èç ëèñòüåâ (â ñèëó ñâîéñòâ êðàñíî-÷åðíûõ äåðåâüåâ, ëþáîé èçýòèõ ïóòåé ñîäåðæèò îäèíàêîâîå êîëè÷åñòâî ÷åðíûõ âåðøèí).Òåîðåìà 4.3. Êðàñíî-÷åðíîå äåðåâî, ñîäåðæàùåå n âíóòðåííèõ âåð-øèí, èìååò âûñîòó íå áîëåå, ÷åì 2 log(n + 1).Äîêàçàòåëüñòâî. Ïîêàæåì ñíà÷àëà, èñïîëüçóÿ äëÿ ýòîãî ìåòîä ìà-òåìàòè÷åñêîé èíäóêöèè (îò ëèñòüåâ ê êîðíþ äåðåâà), ÷òî ïîääåðåâîñ êîðíåì â âåðøèíå x ñîäåðæèò ïî ìåíüøåé ìåðå 2bh(x) − 1 âíóò-ðåííèõ âåðøèí. Ïðåäïîëîæèì, ÷òî âåðøèíà x ÿâëÿåòñÿ ëèñòîì, òî-ãäà bh(x) = 0 è ïîëó÷àåì óòâåðæäåíèå, ÷òî ëèñò ñîäåðæèò íå ìåíåå0 âíóòðåííèõ âåðøèí, êîòîðîå ÿâëÿåòñÿ âåðíûì. Ïðåäïîëîæèì, ÷òîâåðøèíà x íå ëèñò, bh(x) = h′ è äëÿ åå äåòåé (îíè ðàñïîëîæåíû íàâûñîòå h′−1) âûïîëíÿåòñÿ ñäåëàííîå ïðåäïîëîæåíèå. Äåòè âåðøèíûx ìîãóò áûòü êðàñíûìè èëè ÷åðíûìè. Åñëè ðåáåíîê êðàñíûé, òî åãî÷åðíàÿ âûñîòà ðàâíà h′, à åñëè ÷åðíûé, òî åãî ÷åðíàÿ âûñîòà ðàâíàh′−1. Òàêèì îáðàçîì, ïî ïðåäïîëîæåíèþ ìàòåìàòè÷åñêîé èíäóêöèè,êîëè÷åñòâî âíóòðåííèõ âåðøèí ó ëåâîãî è ïðàâîãî ïîääåðåâüåâ âåð-øèíû x íå ìåíåå, ÷åì

2 ∗ (2h′−1 − 1) = 2h′ − 2,

è ïîýòîìó ïîääåðåâî ñ êîðíåì â âåðøèíå x ñîäåðæèò íå ìåíåå, ÷åì2h′ − 1 âíóòðåííèõ âåðøèí.

Ñëåäîâàòåëüíî ïîääåðåâî ñ êîðíåì â âåðøèíå x ñîäåðæèò ïîìåíüøåé ìåðå 2bh(x) − 1 âíóòðåííèõ âåðøèí.

Ðàññìîòðèì êîðåíü äåðåâà âûñîòû h è íåêîòîðûé ïðîèçâîëüíûéïóòü èç êîðíÿ äåðåâà â îäèí èç ëèñòüåâ. Òàê êàê ó êàæäîé êðàñíîé

145

Page 144: Теория алгоритмов. Котов В.М., Соболевская Е.П

âåðøèíû ìîãóò áûòü òîëüêî ÷åðíûå ñûíîâüÿ, òî êîëè÷åñòâî ÷åðíûõâåðøèí íà ýòîì ïóòè íå ìåíåå, ÷åì h/2. Ñëåäîâàòåëüíî ÷åðíàÿ âûñîòàbh äåðåâà íå ìåíüøå h/2 è, ïî ñäåëàííîìó â íà÷àëå äîêàçàòåëüñòâàïðåäïîëîæåíèþ, êîëè÷åñòâî âíóòðåííèõ âåðøèí â äåðåâå

n ≥ 2h/2 − 1. (4.2)

Ëîãàðèôìèðóÿ íåðàâåíñòâî (4.2), ïîëó÷àåì óòâåðæäåíèå òåîðåìû.2Ââåäåì ñëåäóþùèå îáîçíà÷åíèÿ. Ïóñòü z íåêîòîðàÿ âåðøèíà

äåðåâà, òîãäà

• f(z) "îòåö"âåðøèíû;

• gf(z) "äåä"âåðøèíû;

• bf(z) "äÿäÿ"âåðøèíû;

• left(z) ëåâûé ñûí;

• right(z) ïðàâûé ñûí;

• red(z) îêðàñêà âåðøèíû â êðàñíûé öâåò;

• black(z) îêðàñêà âåðøèíû â ÷åðíûé öâåò.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

f(z)

gf(z)

bf(z)

µ´¶³

µ´¶³

¡¡¡

@@@

z

left(z) right(z)

¶¶

¢¢

¢¢

TTTT

146

Page 145: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïóñòü k2 = right(k1) íå ëèñò, òîãäà ëåâûì âðàùåíèåì â âåðøèíåk1 áóäåì íàçûâàòü ñëåäóþùåå ïðåîáðàçîâàíèå:

n

n"

""aaaa

ZZ

,,

k1

k2A

B C

n

naaaa

ZZ

,,

k2

k1 C

A B

-LeftRotate(k1)

,,

Ïóñòü k2 = left(k1) íå ëèñò, òîãäà ïðàâûì âðàùåíèåì â âåðøèíå k1

áóäåì íàçûâàòü ñëåäóþùåå ïðåîáðàçîâàíèå:n

n"

""aaaa

ZZ

,,

k2

k1A

B C

n

naaaa

ZZ

,,

k1

k2 C

A B

-RightRotate(k1)

¡¡

Òðóäîåìêîñòü ïðîöåäóð âðàùåíèÿ ðàâíà O(1).

Îñíîâíûå îïåðàöèè ñ êðàñíî-÷åðíûìè äåðåâüÿìè.

1. Äîáàâëåíèå âåðøèíû ñ çàäàííûì êëþ÷îì.

• Ïðîõîäèì ïî ïóòè ïîèñêà (ñì. ïîèñê ýëåìåíòà â áèíàðíîì ïîèñ-êîâîì äåðåâå), ïîêà íå îïðåäåëèì ìåñòî äîáàâëåíèÿ âåðøèíû ñçàäàííûì êëþ÷îì.

• Äîáàâëÿåì íîâóþ âåðøèíó è äåëàåì åå êðàñíîé.

• Åñëè ïðîèçîøëî íàðóøåíèå RB-ñâîéñòâ, òî âûïîëíèòü ïðîöå-äóðó, âîññòàíàâëèâàþùóþ èõ.

147

Page 146: Теория алгоритмов. Котов В.М., Соболевская Е.П

Çàìåòèì, ÷òî ïîñëå äîáàâëåíèÿ íîâîé âåðøèíû x, êîòîðàÿ áûëàîïðåäåëåíà, êàê êðàñíàÿ, âûïîëíÿþòñÿ âñå RB-ñâîéñòâà, êðîìå îäíî-ãî: êðàñíàÿ âåðøèíà x íå ìîæåò èìåòü êðàñíîãî ðîäèòåëÿ. Ïîñëå êàæ-äîé èòåðàöèè öèêëà, êîòîðûé ïðèâåäåí íèæå, â ìîäèôèöèðîâàííîìäåðåâå ïî-ïðåæíåìó âîçìîæíî òîëüêî íàðóøåíèå ýòîãî RB-ñâîéñòâàäëÿ âåðøèíû x. Åñëè æå íà íåêîòîðîé èòåðàöèè öèêëà óäàåòñÿ óñòðà-íèòü âñå íàðóøåíèÿ ïîëíîñòüþ, ò.å. x êðàñíàÿ è åå îòåö f(x) ÷åðíûé, òî öèêë çàâåðøàåò ñâîþ ðàáîòó.

Àëãîðèòì âîññòàíîâëåíèÿ RB-ñâîéñòâïîñëå âûïîëíåíèÿ ïðîöåäóðû äîáàâëåíèÿ

Ïîêà x íå êîðåíü è f(x) êðàñíûé, âûïîëíÿòü ñëåäóþùóþ ïî-ñëåäîâàòåëüíîñòü øàãîâ.1. Åñëè f(x) ëåâûé ñûí âåðøèíû gf(x), òî1.1 åñëè öâåò bf(x) êðàñíûé, òî

black(f(x));black(bf(x));red(gf(x));x := gf(x);

±°²¯

±°²¯

~

±°²¯

±°²¯

±°²¯

-

~ ~¿

¿¿

¶¶¶

SSS

%%

%

­­­

\\\

x = c

x = a

­­ AA

¿¿ @@

TT ·· JJ JJ ¯ JJ

b

c

d

a b

g d ε

a

b d

a b

g d ε

1.2 åñëè öâåò bf(x) ÷åðíûé, òî1.2.1 åñëè x ëåâûé ñûí äëÿ f(x), òî

black(f(x));red(gf(x));RightRotate(gf(x));

148

Page 147: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

~-

~

~

±°²¯

±°²¯

~

¡¡

¡

TTTT

··

··

¶¶

@@@

SSS

x = a

b

c b

d x = a c

d

·· TT

TT ­­ SS ·· JJ ­­

¢¢TT

a b

g d ε a b g

d ε

Òåïåðü îòåö âåðøèíû x = a ÷åðíûé, âñå RB-ñâîéñòâà âûïîëíÿ-þòñÿ, ñëåäîâàòåëüíî, öèêë çàâåðøèò ñâîþ ðàáîòó.

1.2.2 åñëè x ïðàâûé ñûí äëÿ f(x), òîx := f(x);LeftRotate(x);

±°²¯

±°²¯

~-

~

¡¡

¡

TTTT

AAA

¶¶

@@

¶¶ ee

%%x = a

b

c

d

a

b g

d ε

±°²¯

±°²¯

~

~

¡¡

¡

TTTT

··

··x = b

a

c

d

·· TT

TT ­­ SS

a b

g d ε

b

Òåïåðü íà íîâîé èòåðàöèè öèêëà ìû ïðèäåì ê ñëó÷àþ 1.2.1, âû-ïîëíèì ñîîòâåòñòâóþùèå äåéñòâèÿ è öèêë çàâåðøåí.2. Åñëè f(x) ïðàâûé ñûí äëÿ gf(x), òî2.1 åñëè öâåò bf(x) êðàñíûé, òî

black(f(x));black(bf(x));red(gf(x));x := gf(x);

149

Page 148: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

~

±°²¯

±°²¯

±°²¯

-

~ ~¿

¿¿

¶¶¶

SSS

%%

%

­­­

\\\

­­ AA \\ ·· SS TT

d = x

a

b

c a

x = b

c

d

a b ε a b ε

·· JJ ¢¢ TTg b g b

2.2 åñëè öâåò bf(x) ÷åðíûé, òî2.2.1 åñëè x ïðàâûé ñûí äëÿ f(x), òî

black(f(x));red(gf(x));LeftRotate(gf(x));

±°²¯

~

±°²¯

±°²¯

-¿¿¿

SSS

~TTT

~

±°²¯

~

¶¶

@@@

···

¢¢ AA ¢¢

¢¢ JJ ¢¢ TT

TT ·· SS

a

b

c

x = d a

b

c

x = d

a b g

d ε a b

g d ε

Òåïåðü îòåö âåðøèíû x = d ÷åðíûé, âñå RB-ñâîéñòâà âûïîëíÿ-þòñÿ, ñëåäîâàòåëüíî, öèêë çàâåðøèò ñâîþ ðàáîòó.

2.2.2 åñëè x ëåâûé ñûí äëÿ f(x), òîx := f(x);RightRotate(x);

150

Page 149: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

~

±°²¯

-¿¿¿

SSS

~%

%%

~

±°²¯

¿¿¿

SSS

~

±°²¯

AAA

a a

b b

x = d x = c

dc

·· JJ

¯ TT

LL ·· SS ¯

·· JJ

a b

g d

ε a b g

d ε

Òåïåðü íà íîâîé èòåðàöèè öèêëà ìû ïðèäåì ê ñëó÷àþ 2.2.1, âû-ïîëíèì ñîîòâåòñòâóþùèå äåéñòâèÿ è öèêë çàâåðøåí.

Çàìåòèì, ÷òî öèêë áóäåò ïðîäîëæàòü ñâîþ ðàáîòó òîëüêî â ñëó-÷àå 1.1 è 2.1. Ïðè ýòîì êðàñíàÿ âåðøèíà x ïîäíèìàåòñÿ ââåðõ ïî äå-ðåâó. Òàê êàê âûñîòà êðàñíî-÷åðíîãî äåðåâà O(log n), à òðóäîåìêîñòüîäíîé èòåðàöèè ðàâíà O(1), òî òðóäîåìêîñòü àëãîðèòìà âîññòàíîâëå-íèÿ RB-ñâîéñòâ O(log n). Ñëåäîâàòåëüíî òðóäîåìêîñòü îïåðàöèèäîáàâëåíèÿ íîâîãî ýëåìåíòà O(log n).

2. Óäàëåíèå âåðøèíû ñ çàäàííûì êëþ÷îì.

• Îñóùåñòâëÿåì ïîèñê è óäàëåíèå âåðøèíû ñ çàäàííûì êëþ÷îì.Äàííàÿ ïðîöåäóðà àíàëîãè÷íà ïðîöåäóðå óäàëåíèÿ äëÿ áèíàð-íîãî ïîèñêîâîãî äåðåâà.Ïðåäïîëîæèì, ÷òî íàäî óäàëèòü âåðøèíó z. Îáîçíà÷èì ÷åðåç yòó âåðøèíó, êîòîðàÿ ôàêòè÷åñêè áûëà óäàëåíà. Íàïîìíèì, ÷òîïðè óäàëåíèè âåðøèíû z âîçìîæíû òðè ñëó÷àÿ:

1) óäàëÿåìàÿ âåðøèíà z ëèñò; òîãäà ïîëàãàåì y = z;

2) óäàëÿåìàÿ âåðøèíà z èìååò åäèíñòâåííîãî ðåáåíêà; òîãäàïîëàãàåì y = z;

3) óäàëÿåìàÿ âåðøèíà z èìååò äâóõ äåòåé; òîãäà ôàêòè÷åñêèóäàëÿåòñÿ âåðøèíà y ìèíèìàëüíûé ýëåìåíò â ïðàâîìïîääåðåâå âåðøèíû z.

Ïîñëå âûïîëíåíèÿ ïðîöåäóðû óäàëåíèÿ ïåðåìåííàÿ f(x) áóäåòóêàçûâàòü íà f(y), è ïóñòü ïåðåìåííàÿ x óêàçûâàåò íà åäèí-

151

Page 150: Теория алгоритмов. Котов В.М., Соболевская Е.П

ñòâåííîãî ðåáåíêà âåðøèíû y (x = nil, åñëè äåòåé ó âåðøèíû yíåò).

• Åñëè ôàêòè÷åñêè óäàëåííàÿ âåðøèíà y èìåëà êðàñíûé öâåò, òî,ïîñëå âûïîëíåíèÿ ïðîöåäóðû óäàëåíèÿ, áóäóò âûïîëíÿòüñÿ âñåRB-ñâîéñòâà. Îïåðàöèÿ óäàëåíèÿ ýëåìåíòà çàâåðøåíà.

• Åñëè ôàêòè÷åñêè óäàëåííàÿ âåðøèíà y èìåëà ÷åðíûé öâåò, òîëþáîé ïóòü, ÷åðåç íåå ïðîõîäèâøèé, òåïåðü ñîäåðæèò íà îä-íó ÷åðíóþ âåðøèíó ìåíüøå. Òàêèì îáðàçîì íàðóøàåòñÿ RB-ñâîéñòâî, êîòîðîå òðåáóåò, ÷òîáû ëþáîé ïóòü èç êîðíÿ â ëè-ñòüÿ ñîäåðæàë îäèíàêîâîå êîëè÷åñòâî ÷åðíûõ âåðøèí. Ïîñòó-ïèì ñëåäóþùèì îáðàçîì: åñëè âåðøèíà x êðàñíàÿ, òî ñäåëà-åì åå ÷åðíîé; åñëè âåðøèíà x ÷åðíàÿ, òî áóäåì ïðè ïîäñ÷å-òå ÷èñëà ÷åðíûõ âåðøèí íà ïóòè îò êîðíÿ ê ëèñòüÿì ñ÷èòàòüåå çà äâå ÷åðíûõ âåðøèíû. Òàê äëÿ êðàñíî-÷åðíîãî äåðåâà íåïðåäóñìîòðåíû òàêèå äâîéíûå ÷åðíûå âåðøèíû, òî âûïîëíèìïðîöåäóðó, êîòîðàÿ ïðåâðàùàåò ïîëó÷åííîå äåðåâî â íàñòîÿùååêðàñíî-÷åðíîå äåðåâî.

 äàëüíåéøåì, âåðøèíó, êîòîðàÿ ìîæåò áûòü îêðàøåíà êàê â÷åðíûé, òàê è êðàñíûé öâåò, íà ðèñóíêå áóäåì îáîçíà÷àòü r/b.

Àëãîðèòì âîññòàíîâëåíèÿ RB-ñâîéñòâïîñëå âûïîëíåíèÿ ïðîöåäóðû óäàëåíèÿ

(I)Ïîêà âåðøèíà x íå êîðåíü è öâåò âåðøèíû x ÷åðíûé, âûïîëíÿòüñëåäóþùóþ ïîñëåäîâàòåëüíîñòü øàãîâ.

1. Åñëè x ëåâûé ñûí âåðøèíû f(x), òî w = right(f(x)).

Ñëó÷àé 1.1: åñëè w êðàñíàÿ, òî

black(w);red(f(x));LeftRotate(f(x));w = right(f(x));

 ðåçóëüòàòå îïèñàííûõ äåéñòâèé (ñì. äàëåå ðèñóíîê) âåðøèíàx îñòàåòñÿ äâàæäû ÷åðíîé, à åå íîâûé áðàò ÷åðíûé, ïîýòîìó ìûñâåëè ñëó÷àé 1.1 ê îäíîìó èç ñëó÷àåâ 1.2, 1.3 èëè 1.4.

152

Page 151: Теория алгоритмов. Котов В.М., Соболевская Е.П

~

~ ±°²¯

~ ~

¶¶

¶¶

SS

S

­­­

JJJ

±°²¯

~ ~

­­­

JJJ

~

~

¡¡¡

@@

@@-

££ AA

¢¢ TT ¢¢ ¢¢ JJ ¢¢ AA

·· TT

AA

x = a

b

c

w = d

e

x = a

b

w = c

d

e

a b

g d ε z a b

ε z

g d

Ñëó÷àé 1.2: åñëè w, left(w) è right(w) ÷åðíûå, òîred(w);x = f(x);

~

~ ~

¶¶

¶¶

SS

S

JJJ

-~­

­­

±°²¯

~ ~

JJJ

­­

­

±°²¯~

±°²¯

¿¿¿

@@@

r/b r/b

·· AA

¢¢ JJ ¢¢ TT

·· AA

·· JJ ¢¢ AA

x = a

b

w = d

c e

a

x = b

d

c e

a b

g d ε z

a b

g d ε z

Ìû ñíÿëè ëèøíþþ ÷åðíóþ îêðàñêó ñ âåðøèíû x, ÷åðíóþ îêðàñ-êó ñ âåðøèíû w (ñäåëàâ åå êðàñíîé) è äîáàâèëè åäèíèöó ÷åðíîòûðîäèòåëþ f(x).

Åñëè ìû ïðèøëè ê ñëó÷àþ 1.2 èç ñëó÷àÿ 1.1, òî âåðøèíà f(x)áûëà êðàñíàÿ, ïîýòîìó ïîñëåäîâàòåëüíîñòü äåéñòâèé (I) çàâåðøèò-ñÿ.  ïðîòèâíîì ñëó÷àå, öâåò íîâîé âåðøèíû x äâàæäû ÷åðíûé èïîñëåäîâàòåëüíîñòü äåéñòâèé øàãà (I) áóäåò ïðîäîëæåíà.

Ñëó÷àé 1.3: åñëè w, right(w) ÷åðíûå, à left(w) êðàñíàÿ, òîblack(left(w));

153

Page 152: Теория алгоритмов. Котов В.М., Соболевская Е.П

red(w);RightRotate(w);w = right(f(x));

~

~

¶¶

¶¶

SS

S

JJJ

-~

±°²¯

~

~~

±°²¯

¿¿¿

@@@r/b

r/b

±°²¯

¶¶

±°²¯

JJJ

ee

­­ AA

·· ¯ AABB

¯ LL¢¢

¯

¯ LL

x = a w = d

b

c e

x = a w = c

b

d

e

a b

g d ε z

a b g

d

ε z

Áðàòîì âåðøèíû x òåïåðü ñòàíîâèòñÿ ÷åðíàÿ âåðøèíà ñ êðàñíûìïðàâûì ðåáåíêîì, è ìû ñâåëè ñëó÷àé ñëó÷àé 1.3 ñëó÷àþ 1.4. Âåðøèíàx îñòàåòñÿ äâàæäû ÷åðíîé.

Ñëó÷àé 1.4: åñëè w ÷åðíàÿ è right(w) êðàñíàÿ, òîöâåò w òàêîé æå, êàê è ó f(x);black(f(x));black(right(w));LeftRotate(f(x));x êîðåíü äåðåâà;

~

¶¶

¶¶

SS

S

JJJ

-~

±°²¯

~~

±°²¯

¿¿¿

@@@

r/b r/b

±°²¯

¶¶

¶r/b

±°²¯

±°²¯~ r/b

¢¢

¢¢

JJ

JJ

·· JJ TT·· ·· JJ

¤¤ TT

x = a w = d

b

c e a

b

d

e

c

a b

g d ε z a b g d

ε z

154

Page 153: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ìû óäàëÿåì ëèøíþþ ÷åðíîòó ó âåðøèíû x, íå íàðóøàÿ RB-ñâîéñòâ,è òàê êàê íîâàÿ âåðøèíà x êîðåíü äåðåâà, òî ýòî ïðèñâàèâàíèåâûâîäèò íàñ èç öèêëà (I).

2. Åñëè x ïðàâûé ñûí f(x), òî (ñëåäóþùèé ôðàãìåíò ñèììåò-ðè÷åí ïðåäûäóùåìó) w = left(f(x)).

Ñëó÷àé 2.1: åñëè w êðàñíàÿ, òîblack(w);red(f(x));RightRotate(f(x));w = left(f(x);

Ñëó÷àé 2.2: åñëè w, right(w) ÷åðíûå è left(w) ÷åðíàÿ, òîred(w);x = f(x);

Ñëó÷àé 2.3: åñëè w, left(w) ÷åðíûå è right(w) êðàñíàÿ, òîred(w);LeftRotate(w);w = left(f(x));

Ñëó÷àé 2.4: åñëè w ÷åðíàÿ, è left(w) êðàñíàÿ, òîöâåò w òàêîé æå, êàê è öâåò f(x);black(f(x));black(left(w));RightRotate(f(x));x êîðåíü äåðåâà;

(II) black(x);

Ïðè âîññòàíîâëåíèè RB-ñâîéñòâ öèêë çàâåðøàåò ñâîþ ðàáîòó,êàê òîëüêî îáíàðóæèâàåòñÿ ñëó÷àé 1.1, 1.3 èëè 1.4 (2.1, 2.3, 2.4).Êàæäûé èç ýòèõ òðåõ ñëó÷àåâ âûïîëíÿåòñÿ çà âðåìÿ O(1) (è ñàìîåáîëüøåå ïðîèñõîäèò òðè âðàùåíèÿ).

Ïðè êàæäîì âûïîëíåíèè ñëó÷àÿ 1.2 (2.2) öèêë ïðîäîëæàåò ñâîþðàáîòó (òðóäîåìêîñòü âûïîëíåíèÿ ñëó÷àÿ 2 O(1)), íî ïðè êàæäîìïîâòîðåíèè óêàçàòåëü íà âåðøèíó x ïåðåìåùàåòñÿ ââåðõ ïî äåðåâóè íèêàêèå âðàùåíèÿ ïðè ýòîì íå ïðîèçâîäÿòñÿ, ïîýòîìó êîëè÷åñòâîïîâòîðåíèé ñëó÷àÿ 2.2 îãðàíè÷åíî âûñîòîé äåðåâà: O(log n). Òàêèìîáðàçîì òðóäîåìêîñòü àëãîðèòìà âîññòàíîâëåíèÿ RB-ñâîéñòâ ðàâíàO(log n). Ñëåäîâàòåëüíî òðóäîåìêîñòü îïåðàöèè óäàëåíèÿ ýëåìåíòàèç êðàñíî-÷åðíîãî äåðåâà ðàâíà O(log n).

155

Page 154: Теория алгоритмов. Котов В.М., Соболевская Е.П

4.3. Õåø-òàáëèöûÅñëè íåîáõîäèìî âûïîëíÿòü òîëüêî îïåðàöèè: ïîèñêà, äîáàâëå-

íèÿ èëè óäàëåíèÿ ýëåìåíòà, òî ÷àñòî ïðèìåíÿþò òàê íàçûâàåìîå õå-øèðîâàíèå, à ñîîòâåòñòâóþùàÿ ñòðóêòóðà äàííûõ íàçûâàåòñÿ õåø-òàáëèöåé.

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

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

Ðàññìîòðèì äâå îñíîâíûå ôîðìû õåøèðîâàíèÿ: îòêðûòîå (âíåø-íåå õåøèðîâàíèå) è çàêðûòîå (âíóòðåííåå õåøèðîâàíèå).

4.3.1. Îòêðûòîå õåøèðîâàíèåÎñíîâíàÿ èäåÿ îòêðûòîãî õåøèðîâàíèÿ çàêëþ÷àåòñÿ â òîì, ÷òî

èñõîäíîå ìíîæåñòâî (âîçìîæíî áåñêîíå÷íîå) ðàçáèâàåòñÿ íà êîíå÷-íîå ÷èñëî êëàññîâ. Äëÿ ýòèõ m êëàññîâ, ïðîíóìåðîâàííûõ îò 0 äîm − 1, ñòðîèòñÿ õåø-ôóíêöèÿ h òàêàÿ, ÷òî äëÿ ëþáîãî ýëåìåíòà xèñõîäíîãî ìíîæåñòâà ôóíêöèÿ h(x) ïðèíèìàåò öåëî÷èñëåííîå çíà÷å-íèå èç èíòåðâàëà 0, . . . ,m − 1, êîòîðîå ñîîòâåòñòâóåò êëàññó, êîòî-ðîìó ïðèíàäëåæèò ýëåìåíò x. Ýëåìåíò x íàçûâàþò êëþ÷îì, h(x) õåø-çíà÷åíèåì x, à êëàññû ñåãìåíòàìè. Áóäåì ãîâîðèòü, ÷òî xïðèíàäëåæèò ñåãìåíòó h(x).

Åñëè äëÿ íåêîòîðûõ äâóõ êëþ÷åé õåø-çíà÷åíèÿ ñîâïàäàþò, òîãîâîðÿò, ÷òî ïðîèçîøëà êîëëèçèÿ. Ïðè îòêðûòîì õåøèðîâàíèè ðàç-ðåøåíèå êîëëèçèé ïðîèñõîäèò ñ ïîìîùüþ öåïî÷åê, ò. å. ýëåìåíòû,êîòîðûì ñîîòâåòñòâóåò îäíî è òî æå õåø-çíà÷åíèå, ñâÿçûâàþòñÿ âñåãìåíòå â ñïèñîê.

156

Page 155: Теория алгоритмов. Котов В.М., Соболевская Е.П

Òàêèì îáðàçîì, ìàññèâ T, íàçûâàåìûé òàáëèöåé ñåãìåíòîâ, èìå-åò ðàçìåðíîñòü m (èíäåêñû ýëåìåíòîâ ìàññèâà èçìåíÿþòñÿ îò 0 äîm−1), à T (i) àäðåñ íà÷àëà ñïèñêà êëþ÷åé, èìåþùèõ õåø-çíà÷åíèåðàâíîå i (åñëè â ìíîæåñòâå îòñóòñòâóþò êëþ÷è ñ õåø-çíà÷åíèåì i, òîâ T (i) õðàíèòñÿ Nil).

Îïåðàöèÿ äîáàâëåíèÿ ðàáîòàåò â õóäøåì ñëó÷àå çà âðåìÿ O(1),åñëè ïðîèçâîäèòü îïåðàöèþ äîáàâëåíèÿ ýëåìåíòà â íà÷àëî ñîîòâåò-ñòâóþùåãî ñïèñêà.

Ìàêñèìàëüíîå âðåìÿ ïîèñêà ïðîïîðöèîíàëüíî äëèíå ñïèñêà. Åñ-ëè ñåãìåíòû ïðèìåðíî îäèíàêîâû ïî ðàçìåðó, òî äëÿ èñõîäíîãî ìíî-æåñòâà èç n ýëåìåíòîâ ñðåäíÿÿ äëèíà ñïèñêà ðàâíà êîýôôèöèåíòóçàïîëíåíèÿ a = n/m. Åñëè ìîæíî îöåíèòü âåëè÷èíó n è âûáðàòü âå-ëè÷èíó m êàê ìîæíî áëèæå ê çíà÷åíèþ n, òî â êàæäîì ñïèñêå áóäåòîäèí-äâà ýëåìåíòà, òîãäà âðåìÿ âûïîëíåíèÿ îïåðàöèé áóäåò ìàëîéïîñòîÿííîé âåëè÷èíîé, çàâèñÿùåé îò n.

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

Óäàëåíèå ýëåìåíòà (çàäàí àäðåñ) ïðîâîäèòñÿ çà âðåìÿ O(1), åñ-ëè ñïèñêè äâóíàïðàâëåííûå. Åñëè æå ñïèñêè îäíîíàïðàâëåííûå, òîäëÿ óäàëåíèÿ ýëåìåíòà íàäî íàéòè åãî ïðåäøåñòâåííèêà, äëÿ ÷åãîíåîáõîäèì ïîèñê ïî ñïèñêó, ïîýòîìó òðóäîåìêîñòü óäàëåíèÿ è ïîèñêàïðèìåðíî îäèíàêîâû.

Òàêèì îáðàçîì, ñðåäíÿÿ ñòîèìîñòü ïîèñêà çàâèñèò îò òîãî, íà-ñêîëüêî ðàâíîìåðíî õåø-ôóíêöèÿ ðàñïðåäåëÿåò õåø-çíà÷åíèÿ ïî öå-ïî÷êàì òàáëèöû. Ãèïîòåçà ðàâíîìåðíîãî õåøèðîâàíèÿ çàêëþ÷àåòñÿâ ïðåäïîëîæåíèè, ÷òî êàæäûé èç n ýëåìåíòîâ ìíîæåñòâà ìîæåò ïî-ïàñòü â ëþáóþ èç m öåïî÷åê T õåø-òàáëèöû ñ ðàâíîé âåðîÿòíîñòüþè íåçàâèñèìî îò òîãî, êóäà ïîïàë äðóãîé ýëåìåíò.Òåîðåìà 4.4. Ïóñòü T õåø-òàáëèöà ñ öåïî÷êàìè, èìåþùàÿ êî-ýôôèöèåíò çàïîëíåíèÿ a. Ïðåäïîëîæèì, ÷òî õåøèðîâàíèå ðàâíî-ìåðíî. Òîãäà ïðè ïîèñêå ýëåìåíòà, îòñóòñòâóþùåãî â òàáëèöå, áó-äåò ïðîñìîòðåíî â ñðåäíåì a ýëåìåíòîâ òàáëèöû, à ñðåäíåå âðåìÿòàêîãî ïîèñêà (âêëþ÷àÿ âðåìÿ íà âû÷èñëåíèå õåø-ôóíêöèè) áóäåòðàâíî Θ(1 + a).Òåîðåìà 4.5. Ïðè ðàâíîìåðíîì õåøèðîâàíèè ñðåäíåå âðåìÿ óñïåø-

157

Page 156: Теория алгоритмов. Котов В.М., Соболевская Е.П

íîãî ïîèñêà â õåø-òàáëèöå ñ öåïî÷êàìè åñòü Θ(1 + a), ãäå a êî-ýôôèöèåíò çàïîëíåíèÿ.

Íà ïðàêòèêå ïðè âûáîðå õåø-ôóíêöèè ïîëüçóþòñÿ ðàçëè÷íûìèýâðèñòèêàìè. Ðàññìîòðèì äâà ñïîñîáà ïîñòðîåíèÿ õåø-ôóíêöèé:

• äåëåíèå ñ îñòàòêîì;• óìíîæåíèå.1. Äåëåíèå ñ îñòàòêîì. Ïóñòü k íåêîòîðûé êëþ÷, à m ÷èñëî

ðàçëè÷íûõ õåø-çíà÷åíèé. Òîãäà õåø-ôóíêöèÿ îïðåäåëÿåòñÿ ñëåäóþ-ùèì îáðàçîì:

h(k) = k mod m.

Ïðèìåð 4.1. Ïóñòü m = 10, à êëþ÷ k ðàâåí 136, òîãäà õåø-çíà÷åíèåðàâíî 6.

Ïðè ýòîì íåêîòîðûõ çíà÷åíèé m ñòîèò èçáåãàòü:1) åñëè m = 2p, òî h(k) ýòî p ìëàäøèõ áèòîâ ÷èñëà k è åñëè íåò

óâåðåííîñòè â òîì, ÷òî âñå êîìáèíàöèè ìëàäøèõ áèòîâ áóäóòâñòðå÷àòüñÿ ñ îäèíàêîâîé ÷àñòîòîé, òî ñòåïåíü äâîéêè â êà÷å-ñòâå ÷èñëà m íå âûáèðàþò;

2) åñëè êëþ÷è âîçíèêàþò êàê äåñÿòè÷íûå ÷èñëà, òî íå æåëàòåëü-íî âûáèðàòü â êà÷åñòâå m ñòåïåíü 10, òàê êàê â ýòîì ñëó÷àåîêàæåòñÿ, ÷òî ÷àñòü öèôð êëþ÷à óæå ïîëíîñòüþ îïðåäåëÿåòõåø-çíà÷åíèå;

3) åñëè êëþ÷è ÷èñëà â ñèñòåìå ñ÷èñëåíèÿ ñ îñíîâàíèåì 2p, òî íåæåëàòåëüíî áðàòü m = 2p − 1, ïîñêîëüêó ïðè ýòîì îäèíàêîâîåõåø-çíà÷åíèå èìåþò êëþ÷è, îòëè÷àþùèåñÿ ëèøü ïåðåñòàíîâêîé2p- è÷íûõ öèôð.

 êà÷åñòâå m ïðåäïî÷òèòåëåí âûáîð ïðîñòîãî ÷èñëà, äàëåêî îò-ñòîÿùåãî îò ñòåïåíè 2.

2. Óìíîæåíèå. Çàôèêñèðóåì êîíñòàíòó A â èíòåðâàëå 0 < A < 1.Òîãäà õåø-ôóíêöèÿ îïðåäåëÿåòñÿ ñëåäóþùèì îáðàçîì:

h(k) = bm ∗ (k ∗A mod 1)c,ãäå k ∗Amod 1 äðîáíàÿ ÷àñòü ÷èñëà k ∗A.

Îáû÷íî â êà÷åñòâå m âûáèðàþò ñòåïåíü äâîéêè. Óòâåðæäàþò,÷òî íàèáîëåå óäà÷íîå çíà÷åíèå êîíñòàíòû A åñòü 0, 6180339887 (çîëî-òîå ñå÷åíèå).

158

Page 157: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðèìåð 4.2. Ïóñòü k = 123456, m = 10000 è A îïðåäåëåíî, êàê ðåêî-ìåíäîâàíî âûøå, òîãäà

h(k) = b10000 ∗ (123456 ∗ 0, 6180339887 mod 1)c = 41.

4.3.2. Çàêðûòîå õåøèðîâàíèåÏðè çàêðûòîì õåøèðîâàíèè â òàáëèöå ñåãìåíòîâ õðàíÿòñÿ íåïî-

ñðåäñòâåííî êëþ÷è, à íå çàãîëîâêè ñïèñêîâ. Ïîýòîìó â êàæäîì ñåã-ìåíòå õðàíèòñÿ òîëüêî îäíî ÷èñëî.

Ïðè ýòîì ñïîñîáå õåøèðîâàíèÿ ïðèìåíÿåòñÿ ìåòîäèêà ïîâòîð-íîãî õåøèðîâàíèÿ (âûïîëíÿåòñÿ ïîñëåäîâàòåëüíîñòü ïðîá), êîòîðàÿçàêëþ÷àåòñÿ â ñëåäóþùåì: åñëè ìû ïûòàåìñÿ ïîìåñòèòü ýëåìåíò âñåãìåíò h(x), êîòîðûé óæå çàíÿò äðóãèì êëþ÷îì, òî âûáèðàåòñÿ ïî-ñëåäîâàòåëüíîñòü äðóãèõ íîìåðîâ ñåãìåíòîâ h1(x), h2(x) è ò. ä., êóäàìîæíî ïîìåñòèòü äàííîå êëþ÷åâîå çíà÷åíèå. Êàæäîå èç ìåñòîïîëî-æåíèé ïîñëåäîâàòåëüíî ïðîâåðÿåòñÿ, ïîêà íå áóäåò íàéäåíî ñâîáîäíîåìåñòî. Åñëè ñâîáîäíûõ ìåñò íåò, òî òàáëèöà ïîëíîñòüþ çàïîëíåíà èýëåìåíò äîáàâèòü íåëüçÿ.

Ïåðâîíà÷àëüíî ïðåäïîëàãàåòñÿ, ÷òî âñÿ õåø-òàáëèöà ïóñòà: êàæ-äûé ñåãìåíò ïîìå÷àåì ìåòêîé empty, êîòîðàÿ íå ñîâïàäàåò íè ñ îäíèìâîçìîæíûì çíà÷åíèåì êëþ÷à.

Ïðè ïîèñêå ýëåìåíòà íåîáõîäèìî ïðîñìîòðåòü âñå âîçìîæíûå ìå-ñòîïîëîæåíèÿ ýëåìåíòà: h(x), h1(x), . . . ïîêà íå áóäåò íàéäåí ýëåìåíòèëè ïîêà íå âñòðåòèòñÿ ïóñòîé ñåãìåíò.

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

Åñëè òåïåðü äîïóñòèòü âîçìîæíîñòü îïåðàöèè óäàëåíèÿ êëþ÷åé,òî ïðè äîñòèæåíèè ïóñòîãî ñåãìåíòà ìû, íå íàéäÿ ýëåìåíòà x, íå ìî-æåì áûòü óâåðåíû â òîì, ÷òî îí îòñóòñòâóåò â õåø-òàáëèöå (ýëåìåíòx íå ìîã áûòü äîáàâëåí â ÿ÷åéêó hi(x), ïîòîìó ÷òî îíà áûëà çàíÿ-òà è çàíÿë äðóãóþ âîçìîæíóþ äëÿ åãî ðàçìåùåíèÿ ÿ÷åéêó, à çàòåìýëåìåíò, íàõîäèâøèéñÿ â ÿ÷åéêå hi(x) áûë óäàëåí, è îíà îñâîáîäè-ëàñü). Äëÿ ðàçðåøåíèÿ ýòîé ñèòóàöèè, íåîáõîäèìî â ñåãìåíò, îñâîáî-äèâøèéñÿ ïîñëå óäàëåíèÿ êëþ÷à, ïîìåñòèòü ìåòêó deleted (óäàëåí-

159

Page 158: Теория алгоритмов. Котов В.М., Соболевская Е.П

íûé). Òåïåðü ïðè ïîèñêå ýëåìåíòà ìû ïðåêðàùàåì ïîèñê ëèøü ïðèíàõîæäåíèè ñåãìåíòà, ïîìå÷åííîãî ìåòêîé empty, â òî âðåìÿ, êàê, ïî-âñòðå÷àâ ñåãìåíò ñ ìåòêîé deleted, ïðîäîëæàåì ïîèñê äàëüøå. Êðîìåòîãî, ïðè äîáàâëåíèè ýëåìåíòà, ñåãìåíòû deleted ìîæíî ðàññìàòðè-âàòü êàê ñâîáîäíûå è èñïîëüçîâàòü èõ äëÿ ðàçìåùåíèÿ êëþ÷åé.

Îáû÷íî ïðèìåíÿþò òðè ñïîñîáà âû÷èñëåíèÿ ïîñëåäîâàòåëüíîñòèèñïðîáîâàííûõ ìåñò:

1) ëèíåéíûé;

2) êâàäðàòè÷íûé;

3) äâîéíîå õåøèðîâàíèå.

1. Ôóíêöèÿ ëèíåéíîé ïîñëåäîâàòåëüíîñòè ïðîá çàäàåòñÿ ôîð-ìóëîé:

h(k, i) = (h′(k) + i)modm.

Òàêèì îáðàçîì, ïðè ðàáîòå ñ êëþ÷îì x íà÷èíàþò ñ ÿ÷åéêè T (h′(k)), à

çàòåì ïåðåáèðàþò ÿ÷åéêè òàáëèöû ïîäðÿä T (h′(k)+1), T (h

′(k)+2), . . .

(ïîñëå ÿ÷åéêè T (m− 1) ïåðåõîäÿò ê ÿ÷åéêå T (0)).Íåäîñòàòîê äàííîé ïîñëåäîâàòåëüíîñòè ïðîá çàêëþ÷àåòñÿ â âîç-

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

2.Ôóíêöèÿ êâàäðàòè÷íîé ïîñëåäîâàòåëüíîñòè ïðîá çàäàåòñÿ ñëå-äóþùåé ôîðìóëîé:

h(k, i) = (h′(k) + c1i + c2i

2)mod m,

ãäå h′ íåêîòîðàÿ õåø-ôóíêöèÿ, à êîíñòàíòû c1, c2 îòëè÷íû îò íóëÿ.Çäåñü ÿ÷åéêè ðàññìàòðèâàþòñÿ íå ïîäðÿä. Íîìåð ÿ÷åéêè êâàäðà-

òè÷íî çàâèñèò îò íîìåðà ïîïûòêè. Ýòîò ìåòîä ðàáîòàåò çíà÷èòåëü-íî ëó÷øå, ÷åì ëèíåéíûé, íî åñëè ìû õîòèì, ÷òîáû ïðè ïðîñìîòðå

160

Page 159: Теория алгоритмов. Котов В.М., Соболевская Е.П

õåø-òàáëèöû èñïîëüçîâàëèñü âñå ÿ÷åéêè, çíà÷åíèÿ m, c1 è c2 íåëüçÿâûáèðàòü ñëó÷àéíûì îáîàçîì. Íàïðèìåð, ìîæíî âûáðàòü

m = 11, c2 = 1, c2 = 3,

h′(k) = k mod m.

Ïðè äàííîì ñïîñîáå âûáîðà ïîñëåäîâàòåëüíîñòè ïðîá òåíäåíöèèê îáðàçîâàíèþ êëàñòåðîâ íåò, íî àíàëîãè÷íûé ýôôåêò ïðîÿâëÿåòñÿâ ôîðìå îáðàçîâàíèÿ âòîðè÷íûõ êëàñòåðîâ.

3. Äâîéíîå õåøèðîâàíèå îäèí èç ëó÷øèõ ìåòîäîâ çàêðûòî-ãî õåøèðîâàíèÿ. Ïåðåñòàíîâêè èíäåêñîâ, âîçíèêàþùèå ïðè äâîéíîìõåøèðîâàíèè, îáëàäàþò ìíîãèìè ñâîéñòâàìè, ïðèñóùèìè ðàâíîìåð-íîìó õåøèðîâàíèþ. Ôóíêöèÿ äëÿ äâîéíîãî õåøèðîâàíèÿ, çàäàåòñÿôîðìóëîé:

h(k, i) = (h1(k) + ih2(k))mod m,

ãäå h1, h2 îáû÷íûå õåø-ôóíêöèè.Ïîñëåäîâàòåëüíîñòü ïðîá â ýòîé ñèòóàöèè ïðè ðàáîòå ñ êëþ÷îì

k ïðåäñòàâëÿåò ñîáîé àðèôìåòè÷åñêóþ ïðîãðåññèþ (ïî ìîäóëþ m) ñïåðâûì ÷ëåíîì h1(k) è øàãîì h2(k).

×òîáû ïîñëåäîâàòåëüíîñòü ïðîá ïîêðûëà âñþ òàáëèöó, çíà÷åíèåh2(k) äîëæíî áûòü âçàèìíî ïðîñòûì ñ m. Äëÿ ýòîãî ìîæíî ïîñòóïèòüñëåäóþùèì îáðàçîì:

• (ïåðâûé âàðèàíò) âûáðàòü â êà÷åñòâå m ñòåïåíü äâîéêè, à ôóíê-öèþ h2 âçÿòü òàêóþ, ÷òîáû îíà ïðèíèìàëà òîëüêî íå÷åòíûåçíà÷åíèÿ;

• (âòîðîé âàðèàíò) m ïðîñòîå ÷èñëî, çíà÷åíèå h2 öåëûå ïîëî-æèòåëüíûå ÷èñëà, ìåíüøèå m; íàïðèìåð, äëÿ ïðîñòîãî m ìîæ-íî ïîëîæèòü

h1(k) = k mod m,

h2(k) = 1 + k mod m′,

ãäå m′ ÷óòü ìåíüøå, ÷åì m (= m− 1).

Òåîðåìà 4.6. Ìàòåìàòè÷åñêîå îæèäàíèå ÷èñëà ïðîá ïðè ïîèñêå âòàáëèöå ñ çàêðûòûì õåøèðîâàíèåì îòñóòñòâóþùåãî â íåì ýëåìåí-òà íå ïðåâîñõîäèò 1/(1−a) (õåøèðîâàíèå ïðåäïîëàãàåòñÿ ðàâíîìåð-íûì, ÷åðåç a < 1 îáîçíà÷åí êîýôôèöèåíò çàïîëíåíèÿ).

161

Page 160: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ñëåäñòâèå 4.1.  ïðåäïîëîæåíèè ðàâíîìåðíîãî õåøèðîâàíèÿ ìà-òåìàòè÷åñêîå îæèäàíèå ÷èñëà ïðîá ïðè äîáàâëåíèè íîâîãî ýëåìåí-òà â òàáëèöó ïðè çàêðûòîì õåøèðîâàíèè íå ïðåâîñõîäèò 1/(1−a),ãäå a < 1 êîýôôèöèåíò çàïîëíåíèÿ.Òåîðåìà 4.7. Ðàññìîòðèì òàáëèöó ïðè çàêðûòîì õåøèðîâàíèè,êîýôôèöèåíò çàïîëíåíèÿ êîòîðîé a < 1. Ïóñòü õåøèðîâàíèå ðàâíî-ìåðíî. Òîãäà ìàòåìàòè÷åñêîå îæèäàíèå ÷èñëà ïðîá ïðè óñïåøíîìïîèñêå ýëåìåíòà â òàáëèöå íå ïðåâîñõîäèò

1a

ln1

1− a,

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

162

Page 161: Теория алгоритмов. Котов В.М., Соболевская Е.П

à ë à â à 5

Îñíîâíûå àëãîðèòìû íà ãðàôàõÑóùåñòâóåò ìíîãî àëãîðèòìîâ íà ãðàôàõ, â îñíîâå êîòîðûõ ëåæèòòàêîé ïåðåáîð âåðøèí ãðàôà, ïðè êîòîðîì êàæäàÿ âåðøèíà ïðîñìàò-ðèâàåòñÿ â òî÷íîñòè îäèí ðàç. Ïîýòîìó âàæíîé çàäà÷åé ÿâëÿåòñÿ íà-õîæäåíèå õîðîøèõ ìåòîäîâ ïîèñêà â ãðàôå.

Áóäåì ãîâîðèòü, ÷òî

• âåðøèíà ÿâëÿåòñÿ ïîìå÷åííîé, åñëè îíà çàíåñåíà â ñòðóêòóðó(ò. å. åé äàåòñÿ íåêîòîðàÿ ìåòêà);

• âåðøèíà ÿâëÿåòñÿ ïðîñìîòðåííîé, åñëè îíà óäàëåíà èç ñòðóê-òóðû ïåðâûé ðàç (èíîãäà â ñòðóêòóðå íåêîòîðàÿ âåðøèíà ìîæåòõðàíèòüñÿ íåñêîëüêî ðàç, íî ñ ðàçíûìè ìåòêàìè, è ïåðâîå óäà-ëåíèå äàííîé âåðøèíû èç ñòðóêòóðû äåëàåò åå ïðîñìîòðåííîé).

5.1. Ïîèñê â ãëóáèíó â ãðàôåÏîèñê â ãëóáèíó îäèí èç ìåòîäîâ îáõîäà âñåõ âåðøèí (è äóã)

ãðàôà G = (V,E), êîòîðûé ïîñëóæèë îñíîâîé äëÿ ðàçðàáîòêè ðÿäàýôôåêòèâíûõ àëãîðèòìîâ íà ãðàôàõ.

 ïðîöåññå ïîèñêà â ãëóáèíó âåðøèíàì ïðèñâàèâàþòñÿ ìåòêè,êîòîðûå ñîîòâåòñòâóþò ïîðÿäêó îáõîäà âåðøèí ãðàôà, à åãî ðåáðàïîìå÷àþòñÿ êàê "äðåâåñíûå"èëè "îáðàòíûå".

 íà÷àëå ðàáîòû àëãîðèòìà âåðøèíû íå èìåþò ìåòîê, à ðåáðàíå ïîìå÷åíû.

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

163

Page 162: Теория алгоритмов. Котов В.М., Соболевская Е.П

Àëãîðèòì ïîèñêà â ãëóáèíó â ãðàôå

1. Íåêîòîðîé ôèêñèðîâàííîé âåðøèíå s ïðèñâàèâàåòñÿ ìåòêà k =1, è âåðøèíà s çàíîñèòñÿ â ñòåê.

2. Ïîêà âñå âåðøèíû íå áóäóò ïîìå÷åíû èëè ñòåê íå ñòàíåò ïóñò(ïðîèçîéäåò âîçâðàùåíèå â âåðøèíó s, à èç íåå âñå ðåáðà óæå ïîìå÷å-íû), ïîâòîðÿòü ñëåäóþùèå äåéñòâèÿ: ïóñòü v ïîñëåäíÿÿ çàíåñåííàÿâ ñòåê âåðøèíà è k ïîñëåäíÿÿ ïðèñâîåííàÿ ìåòêà, òîãäà âîçìîæíàîäíà èç ñèòóàöèé:

• èìååòñÿ íåïîìå÷åííîå ðåáðî (v, w) è ó âåðøèíû w óæå èìååòñÿìåòêà, òîãäà ðåáðî (v, w) ïîìå÷àåì êàê "îáðàòíîå"è ïðîäîëæà-åì ïîèñê íåïîìå÷åííîãî ðåáðà, èíöèäåíòíîãî âåðøèíå v;

• èìååòñÿ íåïîìå÷åííîå ðåáðî (v, w) è âåðøèíà w íå èìååò ìåòêè(ÿâëÿåòñÿ íîâîé), òîãäà ïðèñâàèâàåì âåðøèíå w ìåòêó, ðàâíóþk = k + 1, ïîìå÷àåì ðåáðî (v, w) êàê "äðåâåñíîå", çàíîñèì âåð-øèíó w â ñòåê è âîçâðàùàåìñÿ ê øàãó 2 àëãîðèòìà;

• âñå ðåáðà, èíöèäåíòíûå âåðøèíå v, óæå ïîìå÷åíû, òîãäà óäàëÿ-åì âåðøèíó v èç ñòåêà (âåðøèíà v ñòàíîâèòñÿ èñïîëüçîâàííîéèëè ïðîñìîòðåííîé) è âîçâðàùàåìñÿ ê øàãó 2 àëãîðèòìà.

Òàêèì îáðàçîì, ïîèñê â ãëóáèíó èç âåðøèíû v çàêëþ÷àåòñÿ âïîèñêå â ãëóáèíó äëÿ âñåõ íîâûõ âåðøèí, ñìåæíûõ ñ v.

Îöåíèì òðóäîåìêîñòü àëãîðèòìà. Êàæäîå âêëþ÷åíèå è èñêëþ-÷åíèå âåðøèíû èç ñòåêà âûïîëíÿåòñÿ çà âðåìÿ O(1). Òàê êàê êàæäàÿâåðøèíà ïîìå÷àåòñÿ è ïðîñìàòðèâàåòñÿ òîëüêî îäèí ðàç, òî äëÿ âñåéðàáîòû, ñâÿçàííîé ñî ñòåêîì, òðåáóåòñÿ âðåìÿ O(|V |). Êàæäîå ðåá-ðî ãðàôà ïîìå÷àåòñÿ òîëüêî îäèí ðàç è ýòî òðåáóåò âðåìåíè ïîðÿäêàO(1), ïîýòîìó òðóäîåìêîñòü ïîìåòêè ðåáåð åñòü O(|E|). Ñëåäîâàòåëü-íî, òðóäîåìêîñòü ïîèñêà â ãëóáèíó â ãðàôå åñòü O(|V |+ |E|).Ïðèìåð 5.1. Íà ðèñ. 5.1 ïðèâåäåíû äâà ïðèìåðà ðåàëèçàöèè àëãîðèò-ìà ïîèñêà â ãëóáèíó.  ðåçóëüòàòå ðàáîòû àëãîðèòìà:

• êàæäîå ðåáðî ïîìå÷åíî êàê 'd' äðåâåñíîå èëè 'o' îáðàòíîå;

• êàæäàÿ âåðøèíà õàðàêòåðèçóåòñÿ ñëåäóþùèì îáðàçîì: [ ìåòêà;íîìåð âåðøèíû, èç êîòîðîé äàííàÿ âåðøèíà ïîëó÷èëà ìåòêó ].

164

Page 163: Теория алгоритмов. Котов В.М., Соболевская Е.П

n

n

nn n´

´´3

XXXXz

HHHHHj

»»»»»: -1

2

3

4 5

n

n

nn n´

´´3

XXXXz

HHHHHj-1

2

3

4 5

[1,0]

[2,1]

[5,4]

[3,2] [4,3]d d

d

do

d d

d o

d[1,0]

[2,1]

[3,2] [4,4]

[5,1]

»»»»»9

Ðèñ. 5.1. Ïîèñê â ãëóáèíó â ãðàôå

Çàìå÷àíèå 5.1. Çàìåòèì, ÷òî ìíîæåñòâî âñåõ ðåáåð ãðàôà G, êî-òîðûå áûëè ïîìå÷åíû êàê "äðåâåñíûå"â ðåçóëüòàòå ïîèñêà â ãëóáè-íó èç íåêîòîðîé ñòàðòîâîé âåðøèíû s, îáðàçóþò îðèåíòèðîâàííîåêîðíåâîå äåðåâî T ãðàôà G ñ êîðíåì â âåðøèíå s (ýòî äåðåâî ÷àñòîíàçûâàþò êîðíåâûì ãëóáèííûì äåðåâîì).Çàìå÷àíèå 5.2. Ïîèñê â ãëóáèíó ìîæåò áûòü èñïîëüçîâàí äëÿâûäåëåíèÿ ñâÿçíûõ êîìïîíåíò íåîðèåíòèðîâàííîãî ãðàôà.

Äëÿ âûäåëåíèÿ ñâÿçíûõ êîìïîíåíò íåîðèåíòèðîâàííîãî ãðàôàäîñòàòî÷íî âûïîëíèòü ïîèñê â ãëóáèíó, íà÷èíàÿ ñ ïðîèçâîëüíîé íà-÷àëüíîé âåðøèíû s.

Ìíîæåñòâî ïîìå÷åííûõ âåðøèí è ìíîæåñòâî "äðåâåñíûõ"è "îá-ðàòíûõ"äóã îáðàçóþò êîìïîíåíòó ñâÿçíîñòè ãðàôà. Åñëè èìåþòñÿíåïîìå÷åííûå âåðøèíû, òî íåîáõîäèìî íàéòè îäíó èç íèõ, è, ïîëà-ãàÿ åå â êà÷åñòâå íà÷àëüíîé âåðøèíû s, ïîâòîðèòü äëÿ íåå îïèñàííûéâûøå ïðîöåññ ïîèñêà â ãëóáèíó (ïðè ýòîì áóäåò ïîëó÷åíà íîâàÿ êîì-ïîíåíòà ñâÿçíîñòè ãðàôà).

Ïðîöåññ âûäåëåíèÿ ñâÿçíûõ êîìïîíåíò ãðàôà çàêàí÷èâàåòñÿ, êî-ãäà âñå âåðøèíû áóäóò ïîìå÷åíû.

165

Page 164: Теория алгоритмов. Котов В.М., Соболевская Е.П

Òðóäîåìêîñòü àëãîðèòìà âûäåëåíèÿ ñâÿçíûõ êîìïîíåíò íåîðè-åíòèðîâàííîãî ãðàôà åñòü O(|V |+ |E|).

Ñâÿçíûå êîìïîíåíòû îðãðàôà íàõîäÿòñÿ òàêæå, êàê â íåîðèåí-òèðîâàííîì ãðàôå, åñëè ðàññìàòðèâàòü èñõîäíûé îðãðàô êàê íåîðè-åíòèðîâàííûé.Çàìå÷àíèå 5.3. Çàìåòèì, ÷òî êîãäà â ñòåê çàíîñèòñÿ íåêîòîðàÿâåðøèíà v, òî ñòåê ñîäåðæèò ïîñëåäîâàòåëüíîñòü âåðøèí, îïðåäå-ëÿþùóþ ïóòü èç ñòàðòîâîé âåðøèíû s â âåðøèíó v.

Òàêèì îáðàçîì, åñëè íàì íåîáõîäèìî íàéòè ïóòü èç íåêîòîðîéñòàðòîâîé âåðøèíû s â âåðøèíó t, òî âîçìîæíà îäíà èç äâóõ ñèòóà-öèé:

• íà íåêîòîðîì øàãå â ñòåê çàíåñåíà âåðøèíà t, òîãäà ñîäåðæèìîåñòåêà åñòü ïóòü èç s â t;

• ñòåê ïóñò, à âåðøèíà t îñòàëàñü íåïîìå÷åííîé, òîãäà íå ñóùå-ñòâóåò ïóòè èç s â t.

Ïðîãðàììíàÿ ðåàëèçàöèÿ àëãîðèòìà ïîèñêà ïóòè èç s â t ìîæåò áûòüâûïîëíåíà ñëåäóþùèì îáðàçîì:

function poisk(s, t:byte):boolean;var i, l, z, k:byte; dop:uk;beginfor i := 1 to n do visit[i]:=false;in_stk(top, s); visit[s] := true;while (top 6= nil) and (top ↑ .val 6= t) dok := top ↑ .val;dop := gr[k];while (dop 6= nil) and (visit[dop ↑ .val] )do

dop := dop ↑ .next;if dop = nil then k:=out_stk(top);else visit[dop ↑ .val]:=true;in_stk(top, dop ↑ .val);

if top = nil then result:=falseelse result:=true;

end;

166

Page 165: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ìû ïðåäïîëàãàëè, ÷òî ãðàô çàäàí ñïèñêàìè ñìåæíîñòè:

typeuk =↑ el;el=recordval:byte;next:uk;

end;var gr:array[1..n] of uk;

Çàìå÷àíèå 5.4. Ïîèñê â ãëóáèíó ìîæåò áûòü èñïîëüçîâàí äëÿîïðåäåëåíèÿ äâóäîëüíîñòè ãðàôà.

Íàïîìíèì, ÷òî ãðàô ÿâëÿåòñÿ äâóäîëüíûì, åñëè ìíîæåñòâî âåð-øèí ãðàôà ìîæíî ðàçáèòü íà äâà ïîäìíîæåñòâà (äîëè) òàêèì îáðà-çîì, ÷òî êàæäîå ðåáðî ñîåäèíÿåò òîëüêî âåðøèíû èç ðàçíûõ ïîäìíî-æåñòâ.

Ïóñòü v íåêîòîðàÿ âåðøèíà â ñòåêå è îíà îòíåñåíà ê ïåðâîé(âòîðîé) äîëå, òîãäà âñå âåðøèíû, êîòîðûå áóäóò ïîìå÷åíû èç äàí-íîé âåðøèíû, áóäóò îòíåñåíû êî âòîðîé (ïåðâîé) äîëå. Ãðàô áóäåòÿâëÿòüñÿ äâóäîëüíûì, åñëè âñå îáðàòíûå ðåáðà áóäóò ñîåäèíÿòü âåð-øèíû ðàçíûõ äîëåé.Ïðèìåð 5.2. Ïðèâåäåííûé íà ðèñ. 5.2 ãðàô ÿâëÿåòñÿ äâóäîëüíûì, òàêêàê îáðàòíûå ðåáðà (v1, v3), (v5, v2), (v9, v7) ñîåäèíÿþò âåðøèíû ðàçíûõäîëåé (1 set è 2 set).

m

m

m

m

m

m

m

m mm½½½>

SSSw

- -

¾¾

QQ

QQk

QQ

QQQs

©©©©©¼

¶¶

¶7

@@I

-v1

v2

v3

v4

v5

v6

v7

v8

v9 v10

1(1 set)

2(2 set) 3(1 set ) 4(2 set)

5(1 set) 7(1 set) 8(2 set)

10(2 set) 9(1 set) 6(2 set)

o

o

o

Ðèñ. 5.2. Îïðåäåëåíèå äâóäîëüíîñòè â ãðàôå (ïîèñê â ãëóáèíó)

167

Page 166: Теория алгоритмов. Котов В.М., Соболевская Е.П

5.2. Ïîèñê â øèðèíó â ãðàôåÅùå îäíèì ìåòîäîì îáõîäà ãðàôà ÿâëÿåòñÿ ïîèñê â øèðèíó. Ïî-

èñê â øèðèíó îñíîâûâàåòñÿ íà èñïîëüçîâàíèè î÷åðåäè.

Àëãîðèòì ïîèñêà â øèðèíó â ãðàôå

1. Ïðèñâàèâàåì ñòàðòîâîé âåðøèíå s ìåòêó key(s) = 0, çàíîñèì ååâ î÷åðåäü è ñ÷èòàåì ïîìå÷åííîé.

2. Ïîêà âñå âåðøèíû íå ïîìå÷åíû è î÷åðåäü íå ñòàíåò ïóñòîé, ïî-âòîðÿåì ñëåäóþùóþ ïîñëåäîâàòåëüíîñòü äåéñòâèé: ïóñòü ïåð-âûì ýëåìåíòîì î÷åðåäè ÿâëÿåòñÿ âåðøèíà v è S(v) ìíîæåñòâîíå ïîìå÷åííûõ âåðøèí, ñìåæíûõ ñ âåðøèíîé v, òîãäà

a) êàæäóþ âåðøèíó w ∈ S(v)

• ïîìå÷àåì ìåòêîé key(w) = key(v) + 1;• çàíîñèì w â î÷åðåäü;• çàïîìèíàåì, ÷òî âåðøèíà w áûëà ïîìå÷åíà èç âåðøè-

íû v;b) âåðøèíó v ñ÷èòàåì ïðîñìîòðåííîé, óäàëÿåì åå èç î÷åðåäè

è âîçâðàùàåìñÿ ê øàãó 2 àëãîðèòìà.

Êàê ñëåäóåò èç îïèñàíèÿ àëãîðèòìà, ÷åì ðàíüøå ïîìå÷àåòñÿ âåðøè-íà, òåì ðàíüøå îíà áóäåò ïðîñìîòðåíà. Òðóäîåìêîñòü ïîèñêà â øè-ðèíó â ãðàôå åñòü O(|V |+ |E|).Ïðèìåð 5.3. Âûïîëíèì ïîèñê â øèðèíó äëÿ ãðàôà, êîòîðûé ïðèâå-äåí íà ðèñóíêå. Ñòàðòîâîé âåðøèíîé ÿâëÿåòñÿ âåðøèíà s = 1. Êàæäàÿâåðøèíà õàðàêòåðèçóåòñÿ ñëåäóþùèì îáðàçîì: [ìåòêà; íîìåð âåðøèíû,èç êîòîðîé äàííàÿ âåðøèíà ïîëó÷èëà ìåòêó].

l

l

l

l

l

l l¶¶

¶¶7

-Z

ZZ~

-

- -

QQ

QQ

Qs

©©©©©*

»»»»»»»»»»»»:1

2

3

4

5

6

7

[1,1]

[1,1]

[1,1]

[2,2]

[2,3] [2,4]

168

Page 167: Теория алгоритмов. Котов В.М., Соболевская Е.П

Çàìå÷àíèå 5.5. Ïîèñê â øèðèíó ìîæåò áûòü èñïîëüçîâàí äëÿîïðåäåëåíèÿ êîìïîíåíò ñâÿçíîñòè íåîðèåíòèðîâàííîãî ãðàôà.

Åñëè ãðàô G = (V,E) ñâÿçåí, òî àëãîðèòì ïîìåòèò âñå âåðøèíû,à åñëè ãðàô íå ñâÿçåí, òî áóäóò ïîìå÷åíû âñå âåðøèíû òîé êîìïî-íåíòû ñâÿçíîñòè, êîòîðîé ïðèíàäëåæèò ñòàðòîâàÿ âåðøèíà s.  ýòîìñëó÷àå äëÿ ïîñòðîåíèÿ ñëåäóþùåé êîìïîíåíòû ñâÿçíîñòè äîñòàòî÷-íî âçÿòü ëþáóþ íå ïîìå÷åííóþ âåðøèíó è íà÷àòü ïîèñê â øèðèíó èçíåå.

Àíàëîãè÷íî îñóùåñòâëÿåì ïîèñê êîìïîíåíò ñâÿçíîñòè îðãðàôà,ðàññìàòðèâàÿ åãî êàê íåîðèåíòèðîâàííûé ãðàô.Çàìå÷àíèå 5.6. Àíàëîãè÷íî ñ êîðíåâûì äåðåâîì ïîèñêà â ãëóáèíóìîæíî îïðåäåëèòü êîðíåâîå äåðåâî ïîèñêà â øèðèíó, êîòîðîå ïîç-âîëÿåò âîññòàíîâèòü ïóòü èç íà÷àëüíîé âåðøèíû â çàäàííóþ.Çàìå÷àíèå 5.7. Ïîèñê â øèðèíó ìîæíî èñïîëüçîâàòü äëÿ îïðåäå-ëåíèÿ äâóäîëüíîñòè ãðàôà.

Åñëè îòíåñòè ïðîèçâîëüíóþ âåðøèíó ãðàôà ê ïåðâîìó ïîäìíî-æåñòâó (ïîìåòèòü 1), òî ñìåæíûå ñ íåé âåðøèíû áóäóò îòíåñåíû êîâòîðîìó ïîäìíîæåñòâó (ïîìåòèòü èõ 2); ñìåæíûå ñ íèìè ê ïåð-âîìó ïîäìíîæåñòâó è ò. ä. Âûïîëíèâ ïîèñê â øèðèíó, ìû ðàçîáüåììíîæåñòâî âåðøèí ãðàôà íà äâà ïîäìíîæåñòâà. Åñëè ãðàô íå ÿâëÿ-åòñÿ äâóäîëüíûì, òî â êàêîé-òî ìîìåíò ïîèñêà ìû îáíàðóæèì, ÷òîâåðøèíà, ïîìå÷åííàÿ 1 èëè 2, îêàæåòñÿ ñìåæíîé ñ âåðøèíîé òîé æåìåòêè.Ïðèìåð 5.4. Ðàññìîòðèì ãðàô, ïðèâåäåííûé íèæå íà ðèñóíêå, è âû-ïîëíèì ïîèñê â øèðèíó äëÿ íåãî (êàæäîé âåðøèíå áóäåì ñòàâèòü âñîîòâåòñòâèå íîìåð ïîäìíîæåñòâà, ê êîòîðîìó îíà îòíåñåíà).

l

l

l

l

l

l

l

l

l

l

l

l

l

¡¡

@@

@@ ,,

,,

ll

ll

@@

@@1

2

3

4

5

6

7

8

9

10

11

12

13

14

1

2

2

2

1

1

1

2

2

2

169

Page 168: Теория алгоритмов. Котов В.М., Соболевская Е.П

Íà íåêîòîðîì øàãå àëãîðèòìà ìû ïûòàåìñÿ ïîìåòèòü âñå âåðøèíûèç âåðøèíû ñ íîìåðîì 8 (ýòà âåðøèíà îòíåñåíà ê ïîäìíîæåñòâó 2):ýòî âåðøèíà ñ íîìåðîì 11 (îòíîñèì åå ê ïîäìíîæåñòâó 1) è âåðøèíà ñíîìåðîì 9, êîòîðàÿ óæå áûëà îòíåñåíà êî âòîðîìó ïîäìíîæåñòâó ( îíàáûëà ïîìå÷åíà èç âåðøèíû ñ íîìåðîì 6).

Òàêèì îáðàçîì, îêàçûâàåòñÿ, ÷òî äâå ñìåæíûå âåðøèíû ñ íîìå-ðàìè 8 è 9 ïîìå÷åíû îäíîé ìåòêîé (2), è ïîýòîìó ãðàô íå ÿâëÿåòñÿäâóäîëüíûì.Ïðèìåð 5.5. Ðàññìîòðèì ãðàô, ïðèâåäåííûé íèæå íà ðèñóíêå, è âû-ïîëíèì äëÿ íåãî ïîèñê â ãëóáèíó.

m

m

mm

m

m

m

m

©©©*

HHHj

QQQs

©©©*

-Q

QQ

QQs

½½

½½=¾

1

2

3

4

1

4

2

3

1 1

2

2

1 2

-

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

Çàìåòèì, ÷òî ìåòêà, êîòîðîé ïîìå÷àåòñÿ íà íåêîòîðîì øàãå àë-ãîðèòìà âåðøèíà v, åñòü íàèìåíüøåå ðàññòîÿíèå äî äàííîé âåðøèíûèç ñòàðòîâîé âåðøèíû s.

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

 ïðîöåññå ðàáîòû àëãîðèòìà áóäåò ñôîðìèðîâàí ìàññèâ path(ðàçìåðíîñòè n), ãäå path[i] íîìåð âåðøèíû, èç êîòîðîé áûëà ïî-ìå÷åíà i-ÿ âåðøèíà. Äàííûé ìàññèâ ÿâëÿåòñÿ êàíîíè÷åñêèì ïðåä-ñòàâëåíèåì êîðíåâîãî äåðåâà, ñîîòâåòñòâóþùåãî äðåâåñíûì äóãàì,ïîëó÷åííûìè â ðåçóëüòàòå ïîèñêà â øèðèíó. Èñïîëüçóÿ ýòîò ìàññèâ,íåñëîæíî âîññòàíîâèòü íàèìåíüøèé ïî ÷èñëó ðåáåð ïóòü èç ñòàðòî-âîé âåðøèíû s â ëþáóþ äðóãóþ âåðøèíó ãðàôà.

170

Page 169: Теория алгоритмов. Котов В.М., Соболевская Е.П

procedure poisk(s:byte);var i, z, k:byte; dop:uk;beginhead:=nil; tail:=nil;for i:=1 to n do visit[i]:=false;path[i]:=0;

visit[s]:=true; key[s]:=0;in_ocher(head, tail, s);while head 6= nil doz:=out_ocher(head, tail);dop := gr[z];while dop 6= nil doif not (visit[dop ↑ .val]) thenk := dop ↑ .val;visit[k]:=true; path[k] := z;key[k] := key[z] + 1;in_ocher(head, tail, k);

dop := dop ↑ .next;

end;

5.3. Ïóòè â ãðàôàõ

5.3.1. Êðàò÷àéøèé ýëåìåíòàðíûé ïóòüÐàññìàòðèâàåòñÿ çàäà÷à íàõîæäåíèÿ êðàò÷àéøåãî ýëåìåíòàðíî-

ãî ïóòè â îðãðàôå G = (V, E) èç âåðøèíû s â âåðøèíó t, ïðè óñëî-âèè, ÷òî êàæäîé äóãå îðãðàôà ïðèïèñàíà íåêîòîðàÿ ñòîèìîñòü c(v, w)(êðàò÷àéøåãî ïóòè, â êîòîðîì êàæäàÿ âåðøèíà âñòðå÷àåòñÿ íå áîëååîäíîãî ðàçà). Îêàçûâàåòñÿ, ÷òî çàäà÷à ïîèñêà êðàò÷àéøåãî ýëåìåí-òàðíîãî ïóòè â îðãðàôå èç âåðøèíû s â âåðøèíó t ýêâèâàëåíòíà ïî-èñêó êðàò÷àéøèõ ýëåìåíòàðíûõ ïóòåé èç âåðøèíû s â êàæäóþ èçâåðøèí. Ýòî ñâÿçàíî ñ òåì, ÷òî çàðàíåå íå èçâåñòíî, ÷åðåç êàêèå âåð-øèíû áóäåò ïðîõîäèòü ýòîò ïóòü.

171

Page 170: Теория алгоритмов. Котов В.М., Соболевская Е.П

Àëãîðèòì Ôîðäà-Áýëìàíà

Àëãîðèòì Ôîðäà-Áýëìàíà íàõîäèò êðàò÷àéøèå ýëåìåíòàðíûå ïóòèèç íåêîòîðîé âåðøèíû s âî âñå îñòàâøèåñÿ äîñòèæèìûå èç íåå âåð-øèíû. Àëãîðèòì ðàáîòàåò ïðè ñëåäóþùèõ îãðàíè÷åíèÿõ:

• âåñà äóã îðãðàôà ïðîèçâîëüíû;

• â îðãðàôå îòñóòñòâóþò ýëåìåíòàðíûå êîíòóðû îòðèöàòåëüíîéñòîèìîñòè.

Îáîçíà÷èì ÷åðåç D(v) äëèíó íåêîòîðîãî ýëåìåíòàðíîãî ïóòè èçâåðøèíû s â âåðøèíó v ∈ V, à ÷åðåç d(s, v) äëèíó êðàò÷àéøåãîýëåìåíòàðíîãî ïóòè.

Ïåðâîíà÷àëüíî äëÿ âñåõ âåðøèí v òàêèõ, ÷òî (s, v) ∈ E ïîëà-ãàåì D(v) = c(s, v), äëÿ âåðøèíû s ïîëàãàåì D(s) = 0, à äëÿ âñåõîñòàâøèõñÿ âåðøèí D(v) = ∞.

Íà êàæäîé èòåðàöèè àëãîðèòìà ïðîèñõîäèò ïåðåñ÷åò êîìïîíåíòâåêòîðà D ïî ñëåäóþùåìó ïðàâèëó:

D(v) = minu∈V

D(v), D(u) + c(u, v). (5.1)

Î÷åâèäíî, ÷òî ïðè ïåðåñ÷åòå êîìïîíåíòû D(v) ó÷àñòâóþò òîëüêî âåð-øèíû u, êîòîðûå ÿâëÿþòñÿ íà÷àëüíûìè âåðøèíàìè äóã, âõîäÿùèõ ââåðøèíó v (ñì. ðèñóíîê).

'

&

$

%

±°²¯

±°²¯

±°²¯

±°²¯

s

u1

u2

uk

aaa³³³³³³³³³1D(u2)

±°²¯

v

ZZ

ZZ

ZZ~

HHHHHHj

»»»»»»:

D(v)

172

Page 171: Теория алгоритмов. Котов В.М., Соболевская Е.П

Êîëè÷åñòâî èòåðàöèé àëãîðèòìà (ïåðåâû÷èñëåíèé âåêòîðà D)îãðàíè÷åíî ÷èñëîì (n − 2), òàê êàê åñëè ïîñëå âûïîëíåíèÿ èòåðà-öèè íåêîòîðàÿ êîìïîíåíòà âåêòîðà D(w) èçìåíèëà ñâîå çíà÷åíèå, òîêîëè÷åñòâî äóã â êðàò÷àéøåì ýëåìåíòàðíîì ïóòè äî âåðøèíû w óâå-ëè÷èëîñü íà 1, à òàê êàê îòñóòñòâóþò ýëåìåíòàðíûå êîíòóðû îòðè-öàòåëüíîé ñòîèìîñòè, òî êðàò÷àéøèé ýëåìåíòàðíûé ïóòü äî ëþáîéèç âåðøèí ñîäåðæèò íå áîëåå (n− 1) äóã.

Ñëåäóåò çàìåòèòü, ÷òî àëãîðèòì ìîæåò çàêîí÷èòü ñâîþ ðàáîòóðàíüøå â òîì ñëó÷àå, åñëè ïðè âûïîëíåíèè î÷åðåäíîé èòåðàöèè íèîäíà èç êîìïîíåíò âåêòîðà D íå èçìåíèëà ñâîåãî çíà÷åíèÿ. Ïðè çà-âåðøåíèè ðàáîòû àëãîðèòìà d(s, v) = D(v).Ïðèìåð 5.6. Äëÿ îðãðàôà, èçîáðàæåííîãî íà ðèñóíêå, íàéòè êðàò÷àé-øèé ýëåìåíòàðíûé ïóòü èç âåðøèíû s = 1 âî âñå îñòàâøèåñÿ.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³¶

¶¶¶7

-

JJ

JJ

?­­

­­Á

­­

­­

­­

­­Á

SS

SSSw

1

2 3

4 5

6

1

2

2

4

0-3

2

1

s

èòåðàöèÿ D(1) D(2) D(3) D(4) D(5) D(6)

k = 0 0 11 ∞1 21 ∞1 ∞1

k = 1 0 11 22 21 −13 04

k = 2 0 11 22 21 −13 04

Íà âòîðîé èòåðàöèè íè îäíà êîìïîíåíòà âåêòîðà D íå èçìåíèëàñâîåãî çíà÷åíèÿ, ñëåäîâàòåëüíî êðàò÷àéøèå ýëåìåíòàðíûå ïóòè èç âåð-øèíû s = 1 âî âñå îñòàâøèåñÿ âåðøèí îïðåäåëåíû.

Ñëåäóåò çàìåòèòü, ÷òî åñëè îðãðàô ÿâëÿåòñÿ áåñêîíòóðíûì, òîäëÿ âû÷èñëåíèÿ êðàò÷àéøåãî ýëåìåíòàðíîãî ïóòè èç íåêîòîðîé âåð-øèíû âî âñå îñòàâøèåñÿ äîñòèæèìûå ñóùåñòâóåò àëãîðèòì òðóäîåì-êîñòè O(n+m), â êîòîðîì êàæäàÿ êîìïîíåíòà âåêòîðà D âû÷èñëÿåòñÿòîëüêî îäèí ðàç. Àëãîðèòì èñïîëüçóåò òîò ôàêò, ÷òî äëÿ âåðøèí áåñ-êîíòóðíîãî îðãðàôà ìîæíî âûïîëíèòü òîïîëîãè÷åñêóþ ñîðòèðîâêó:

173

Page 172: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

Àëãîðèòì Äåéêñòðû

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

• âåñà äóã îðãðàôà íåîòðèöàòåëüíû;

• â îðãðàôå ìîãóò áûòü ýëåìåíòàðíûå êîíòóðû.

Îïèñàíèå ýòîãî àëãîðèòìà â ñòàíäàðòíîì âèäå ìîæíî íàéòè âáîëüøèíñòâå ïîñîáèé ïî òåîðèè ãðàôîâ. Îäíàêî èíîãäà ïðåäïî÷òè-òåëüíî èñïîëüçîâàòü ðåàëèçàöèþ àëãîðèòìà Äåéêñòðû ñ èñïîëüçîâà-íèåì ñïåöèàëüíûõ ñòðóêòóð äàííûõ. Íàïîìíèì ñõåìó ðàáîòû àëãî-ðèòìà.

Ïðåäïîëîæèì, ÷òî ìíîæåñòâî âåðøèí îðãðàôà ðàçáèòî íà äâàïîäìíîæåñòâà S è V \S. Ìíîæåñòâî S ýòî ìíîæåñòâî âåðøèí äîêîòîðûõ êðàò÷àéøèé ýëåìåíòàðíûé ïóòü èç èñòî÷íèêà s óæå èçâå-ñòåí. Ïåðâîíà÷àëüíî

S = s.Íà î÷åðåäíîì øàãå àëãîðèòì Äåéêñòðû íàõîäèò âåðøèíó v, êîòîðàÿïðèíàäëåæèò ìíîæåñòâó V \S è ðàññòîÿíèå äî êîòîðîé îò èñòî÷íè-êà íàèìåíüøåå ñðåäè âñåõ âåðøèí ìíîæåñòâà V \S. Ïîñëå ÷åãî íàé-äåííàÿ âåðøèíà äîáàâëÿåòñÿ åå ê ìíîæåñòâó S. Àëãîðèòì Äåéêñòðûçàêàí÷èâàåò ñâîþ ðàáîòó, êîãäà |S| = n.

Îáùàÿ ñõåìà àëãîðèòìà Äåéêñòðû

1. S = s;∀v : (s, v) ∈ E D(v) := c(s, v);∀v : (s, v) 6∈ E D(v) := ∞;

2. Ïîêà |S| 6= n âûïîëíÿòü

174

Page 173: Теория алгоритмов. Котов В.М., Соболевская Е.П

2.1 w := arg minv∈V \S D(v);

2.2 S := S ∪ w;2.3 ∀v ∈ V \ S, (w, v) ∈ E : D(v) := minD(v), D(w) + c(w, v).

Çàìåòèì, ÷òî íà êàæäîé èòåðàöèè äëÿ êàæäîé âåðøèíû v ∈ Vçíà÷åíèå D(v) ñîîòâåòñòâóåò äëèíå íàèìåíüøåãî íà äàííûé ìîìåíòýëåìåíòàðíîãî ïóòè èç ñòàðòîâîé âåðøèíû s â äàííóþ âåðøèíó.

Ðàññìîòðèì òåïåðü íà êîíêðåòíîì ïðèìåðå ðàáîòó àëãîðèòìàÄåéêñòðû.Ïðèìåð 5.7. Çàäàí îðãðàô G = (V, E), êàæäîé äóãå (v, w) êîòîðîãîïîñòàâëåíà â ñîîòâåòñòâèå íåêîòîðàÿ íåîòðèöàòåëüíàÿ ñòîèìîñòü c(v, w)(ñì. ðèñóíîê). Òðåáóåòñÿ íàéòè êðàò÷àéøèå ýëåìåíòàðíûå ïóòè èç âåð-øèíû s = 1 âî âñå îñòàâøèåñÿ.

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯´

´´

´3

-Z

ZZ

ZZ~

ZZ

ZZZ~ ¡

¡¡

¡¡

¡¡

¡¡µ

- ½½

½½½>

XXXXXXXXXXXXXXXz1

2 3

4 5

6

1

2

1

3

2

2

4

3[0]

[1] [2]

[4]

[2] [4]

s

Äàëåå ïðèâîäèòñÿ ïîñëåäîâàòåëüíîñòü øàãîâ àëãîðèòìà. Äëÿ êàæ-äîé èòåðàöèè óêàçàíû: ìíîæåñòâî S, êîòîðîå âêëþ÷àåò â ñåáÿ òå âåðøè-íû îðãðàôà, äëÿ êîòîðûõ êðàò÷àéøèå ýëåìåíòàðíûå ïóòè óæå ïîñòðîå-íû, à äëÿ îñòàâøèõñÿ âåðøèí v ∈ V \S óêàçàíà äëèíà D(v) íàèëó÷øåãîíà äàííûé ìîìåíò ïóòè èç âåðøèíû s â äàííóþ âåðøèíó.

0-èòåðàöèÿ

S = 1.v 2 3 4 5 6

D(v) 1 ∞ 2 ∞ ∞

175

Page 174: Теория алгоритмов. Котов В.М., Соболевская Е.П

1-èòåðàöèÿ

S = 1, 2.v 3 4 5 6

D(v) 2 2 ∞ 4

2-èòåðàöèÿ

S = 1, 2, 3.v 4 5 6

D(v) 2 ∞ 4

3-èòåðàöèÿ

S = 1, 2, 3, 4.v 5 6

D(v) 4 4

4-èòåðàöèÿ

S = 1, 2, 3, 4, 5.v 6

D(v) 4

5-èòåðàöèÿ

S = 1, 2, 3, 4, 5, 6.Íà ðèñóíêå âîçëå êàæäîé âåðøèíû v â êâàäðàòíûõ ñêîáêàõ óêàçà-

íà äëèíà êðàò÷àéøåãî ýëåìåíòàðíîãî ïóòè èç ñòàðòîâîé âåðøèíû s âäàííóþ âåðøèíó, êîòîðóþ ìû áóäåì íàçûâàòü ïîòåíöèàëîì.

Äëÿ îöåíêè òðóäîåìêîñòè àëãîðèòìà çàìåòèì, ÷òî êîëè÷åñòâîèòåðàöèé îãðàíè÷åíî êîëè÷åñòâîì âåðøèí îðãðàôà, òàê êàê íà êàæ-äîé èòåðàöèè íîâàÿ âåðøèíà v äîáàâëÿåòñÿ ê ìíîæåñòâó S. Ó÷èòû-âàÿ, ÷òî ïîèñê ìèíèìóìà â ìàññèâå èç n ýëåìåíòîâ åñòü O(n) è îáùååêîëè÷åñòâî îïåðàöèé, íåîáõîäèìûõ äëÿ ïåðåñ÷åòà êîìïîíåíò âåêòî-ðà D, îãðàíè÷åíî ÷èñëîì äóã (ïðåäïîëàãàåì, ÷òî m < n2), ïîëó÷àåì,÷òî òðóäîåìêîñòü ïðèâåäåííîé ðåàëèçàöèè àëãîðèòìà Äåéêñòðû åñòüO(n2).

Ïðèìåíÿÿ àëãîðèòì Äåéêñòðû äëÿ êàæäîé âåðøèíû îðãðàôà,ïîñòðîèì êðàò÷àéøèå ýëåìåíòàðíûå ïóòè èç âñåõ âåðøèí îðãðàôà

176

Page 175: Теория алгоритмов. Котов В.М., Соболевская Е.П

âî âñå îñòàâøèåñÿ (òðóäîåìêîñòü àëãîðèòìà O(n3)).Çàìåòèì, ÷òî ñàìîé òðóäîåìêîé îïåðàöèåé àëãîðèòìà Äåéêñòðû

ÿâëÿåòñÿ ïîèñê ìèíèìàëüíîãî ýëåìåíòà (âåðøèíû ñ íàèìåíüøèì ïî-òåíöèàëîì) â n-ýëåìåíòíîì ìàññèâå. Äëÿ âûïîëíåíèÿ îïåðàöèé ïîèñ-êà è óäàëåíèÿ ìèíèìàëüíîãî ýëåìåíòà íàèáîëåå ýôôåêòèâíîé ñòðóê-òóðîé äàííûõ ÿâëÿåòñÿ ïðèîðèòåòíàÿ î÷åðåäü (êó÷à). Íàïîìíèì, ÷òîåñëè êó÷ó ðåàëèçîâàòü â âèäå ïîëíîãî áèíàðíîãî äåðåâà (ïîëó÷àåìáèíàðíóþ êó÷ó), òî îïåðàöèè äîáàâëåíèÿ è óäàëåíèÿ ìèíèìàëüíîãîýëåìåíòà âûïîëíÿþòñÿ çà âðåìÿ O(log n).

Èñïîëüçóÿ â êà÷åñòâå ñòðóêòóðû äàííûõ ïðèîðèòåòíóþ î÷åðåäü,ìîäèôèöèðóåì àëãîðèòì Äåéêñòðû.

Àëãîðèòì íàõîæäåíèÿ êðàò÷àéøåãî ýëåìåíòàðíîãî ïóòè ñèñïîëüçîâàíèåì ñòðóêòóðû äàííûõ ïðèîðèòåòíàÿ î÷åðåäü

1. Äîáàâëÿåì â êó÷ó âåðøèíó s ñ ïðèîðèòåòîì p(s) = 0.

2. Ïîêà íå ïðîñìîòðåíà êîíå÷íàÿ âåðøèíà t èëè êó÷à íå ñòàíåòïóñòîé, âûïîëíÿåì ñëåäóþùóþ ïîñëåäîâàòåëüíîñòü øàãîâ:

a) èç êó÷è óäàëÿåòñÿ âåðøèíà v (ñ ìèíèìàëüíûì ïðèîðèòå-òîì p(v));

b) åñëè ýòà âåðøèíà ðàíåå óäàëÿëàñü èç êó÷è, òî îíà èãíîðè-ðóåòñÿ;

c) âåðøèíà v ñ÷èòàåòñÿ ïðîñìîòðåííîé;d) äëÿ âåðøèíû v íàõîäÿòñÿ åå íå ïðîñìîòðåííûå ñîñåäè w

(îíè óæå ìîãóò áûòü â êó÷å) è äîáàâëÿþòñÿ â êó÷ó ñ ïðè-îðèòåòîì p(w) = p(v) + c(v, w).

Çàìå÷àíèå 5.9. Îäíà âåðøèíà ìîæåò íåñêîëüêî ðàç ïîìåñòèòü-ñÿ â êó÷ó. Ïðèîðèòåò, ñ êîòîðûì âåðøèíà íàõîäèòñÿ â êó÷å, åñòüäëèíà íåêîòîðîãî ïðîèçâîëüíîãî ýëåìåíòàðíîãî ïóòè èç ñòàðòîâîéâåðøèíû s â äàííóþ âåðøèíó.Çàìå÷àíèå 5.10. Âåðøèíà ñòàíîâèòñÿ ïðîñìîòðåííîé ïðè åå ïåð-âîì óäàëåíèè èç êó÷è. Êàæäîé âåðøèíå v ñòàâèì â ñîîòâåòñòâèåïîòåíöèàë, ðàâíûé òîìó ïðèîðèòåòó, êîòîðûé áûë ó v ïðè åå ïåð-âîì óäàëåíèè èç êó÷è. Ïîòåíöèàë âåðøèíû v äëèíà êðàò÷àéøåãîýëåìåíòàðíîãî ïóòè èç ñòàðòîâîé âåðøèíû s â äàííóþ âåðøèíó.

177

Page 176: Теория алгоритмов. Котов В.М., Соболевская Е.П

Çàìå÷àíèå 5.11. Ñèòóàöèÿ, êîãäà íåêîòîðàÿ âåðøèíà v äîñòàåò-ñÿ èç êó÷è ïîâòîðíî, îáðàáàòûâàåòñÿ ñëåäóþùèì îáðàçîì: óäàëÿåìâåðøèíó v èç êó÷è è íè÷åãî äëÿ íåå íå äåëàåì.  äàííîì ñëó÷àå äëÿâåðøèíû v óæå èçâåñòåí êðàò÷àéøèé ýëåìåíòàðíûé ïóòü äî íåå, àòîò ôàêò, ÷òî äàííàÿ âåðøèíà íàõîäèëàñü â êó÷å ñ ïðèîðèòåòîìp(v), ãîâîðèò î òîì, ÷òî â äàííóþ âåðøèíó èç ñòàðòîâîé âåðøèíûñóùåñòâóåò åùå îäèí ýëåìåíòàðíûé ïóòü, íî åãî äëèíà p(v) áîëü-øå, ÷åì äëèíà êðàò÷àéøåãî ýëåìåíòàðíîãî ïóòè â âåðøèíó v.

Çàìå÷àíèå 5.12. Êîëè÷åñòâî ýëåìåíòîâ â êó÷å îãðàíè÷åíî ÷èñëîìðåáåð.Çàìå÷àíèå 5.13. Ýëåìåíòàìè êó÷è ìîæåò áûòü, íàïðèìåð, ñëå-äóþùàÿ òðîéêà ÷èñåë: ïðèîðèòåò (ýòî ïîëå ÿâëÿåòñÿ êëþ÷åâûì);íîìåð âåðøèíû; ïðåäøåñòâóþùèé ýëåìåíò (ò. å. òîò ýëåìåíò, èçêîòîðîãî äëÿ äàííîé âåðøèíû áûëî âû÷èñëåíî çíà÷åíèå åå ïðèîðè-òåòà).

typezap=recordprior:integer;n_ver:integer;pred:integer;

end;varheap:array[0..n] of zap;Num:integer;

Âîññòàíîâèòü êðàò÷àéøèé ïóòü èç âåðøèíû s â âåðøèíó v ìîæíîîäíèì èç ñëåäóþùèõ äâóõ ñïîñîáîâ:

• äâèãàòüñÿ èç âåðøèíû v â âåðøèíó s ïî îáðàòíûì äóãàì, äëÿêîòîðûõ ñòîèìîñòü äóãè (x, y) ðàâíà ðàçíîñòè ïîòåíöèàëîâ âåð-øèíû x è âåðøèíû y;

• äâèãàòüñÿ èç âåðøèíû v â âåðøèíó s, èñïîëüçóÿ ìåòêó "ïðåä-øåñòâóþùèé ýëåìåíò".

Òðóäîåìêîñòü àëãîðèòìà ïîèñêà êðàò÷àéøåãî ïóòè â îðãðàôååñòü O(n + m ∗ log m).Ïðèìåð 5.8. Äëÿ èçîáðàæåííîãî äàëåå íà ðèñóíêå îðãðàôà íåîáõîäè-ìî íàéòè êðàò÷àéøèå ýëåìåíòàðíûå ïóòè èç ñòàðòîâîé âåðøèíû s = 1âî âñå âåðøèíû, äîñòèæèìûå èç íåå.

178

Page 177: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯¡

¡¡µ

QQQs

ZZ

ZZ~

´´

´31

2

3

4

1

5

8

2

[0]

[1]

[5]

[7]

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

Íèæå ïðèâîäèòñÿ ñîäåðæèìîå ñòðóêòóðû äàííûõ "êó÷à"íà êàæäîìøàãå àëãîðèòìà:

1) íà÷àëüíîå ñîñòîÿíèå êó÷è:(ïðèîðèòåò = 0, âåðøèíà = 1, ïðåäø. = 0);

2) âåðøèíà 1 ïðîñìîòðåíà;(ïðèîðèòåò = 1, âåðøèíà = 2, ïðåäø. = 1);(ïðèîðèòåò = 5, âåðøèíà = 3, ïðåäø. = 1);

3) âåðøèíà 2 ïðîñìîòðåíà;(ïðèîðèòåò = 5, âåðøèíà = 3, ïðåäø. = 1);(ïðèîðèòåò = 9, âåðøèíà = 4, ïðåäø. = 2);

4) âåðøèíà 3 ïðîñìîòðåíà;(ïðèîðèòåò = 9, âåðøèíà = 4, ïðåäø. = 2);(ïðèîðèòåò = 7, âåðøèíà = 4, ïðåäø. = 3);

5) âåðøèíà 4 ïðîñìîòðåíà;(ïðèîðèòåò = 7, âåðøèíà = 4, ïðåäø. = 3).

179

Page 178: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

d.prior:=0;d.n_ver:=s;d.pred:=0;insert_heap(d,H, Num, code);for i:=1 to n do

visible[i]:=false;ptn[i]:=0;ptn_ver[i]:=0;

while Num 6= 0 dod:= delete_min_heap(H,Num, code);if not (visible[d.n_ver]) thenptn[d.n_ver] := d.prior;ptn_ver[d.n_ver] := d.pred;dop := gr[d.n_ver];while dop 6=nil doif not (visible[dop ↑ .val]) thenz.prior := d.prior + dop ↑ .c;z.n_ver := dop ↑ .val;z.pred := d.n_ver;insert_heap(z, H, Num, code);

dop := dop ↑ .next;

visible[d.n_ver]:=true;

180

Page 179: Теория алгоритмов. Котов В.М., Соболевская Е.П

Àëãîðèòì Ôëîéäà

 ñëó÷àå, êîãäà ñòîèìîñòè äóã îðãðàôà ïðîèçâîëüíû, äëÿ ïîèñêàêðàò÷àéøèõ ýëåìåíòàðíûõ ïóòåé â îðãðàôå èç âñåõ âåðøèí âî âñåîñòàâøèåñÿ ìîæíî èñïîëüçîâàòü àëãîðèòì Ôîðäà-Áýëìàíà, êîòîðûéèìåë áû â ýòîì ñëó÷àå òðóäîåìêîñòü O(n4). Îäíàêî ñóùåñòâóåò àëãî-ðèòì Ôëîéäà, êîòîðûé ðåøàåò ýòó æå çàäà÷ó è èìååò òðóäîåìêîñòüO(n3).

Çàìåòèì, ÷òî åñëè áû ñòîèìîñòè äóã áûëè íåîòðèöàòåëüíû, òîòàêóþ æå òðóäîåìêîñòü, êàê è ó àëãîðèòìà Ôëîéäà, èìåë àëãîðèòìÄåéêñòðû. Ýôôåêòèâíàÿ ðåàëèçàöèÿ àëãîðèòìà Äåéêñòðû äëÿ ýòîéçàäà÷è èìåëà áû òðóäîåìêîñòü O(nm log m), è åñëè ïðåäïîëîæèòü,÷òî êîëè÷åñòâî äóã îðãðàôà G íàìíîãî ìåíüøå, ÷åì n2, òî ïðèìåíå-íèå ýôôåêòèâíîé ðåàëèçàöèè àëãîðèòìà Äåéêñòðû ÿâëÿåòñÿ ïðåäïî-÷òèòåëüíåå àëãîðèòìà Ôëîéäà.

 àëãîðèòìå Ôëîéäà ïðîèñõîäèò ïåðåñ÷åò ìàòðèöû ýëåìåíòàð-íûõ ïóòåé A èç âñåõ âåðøèí îðãðàôà âî âñå îñòàâøèåñÿ. Ïîñëå k-îéèòåðàöèè ýëåìåíò ìàòðèöû Ak[i, j] ñîäåðæèò äëèíó êðàò÷àéøåãî ýëå-ìåíòàðíîãî ïóòè èç âåðøèíû i â âåðøèíó j, êîòîðûé ïðîõîäèò òîëüêîïî âåðøèíàì ñ íîìåðàìè ìåíüøå ëèáî ðàâíûìè çíà÷åíèÿ k (ñàìè iè j ìîãóò áûòü êàê áîëüøå, òàê è ìåíüøå k). Êîëè÷åñòâî èòåðàöèéàëãîðèòìà ðàâíî êîëè÷åñòâó âåðøèí îðãðàôà.

Ïåðâîíà÷àëüíî çíà÷åíèÿ ìàòðèöû A îïðåäåëÿþòñÿ ñëåäóþùèìîáðàçîì:

• A[i, j] = c(i, j), åñëè i 6= j è ñóùåñòâóåò äóãà (i, j) ∈ E,

• A[i, j] = ∞ , åñëè i 6= j è íå ñóùåñòâóåò äóãè (i, j) ∈ E,

• A[i, j] = 0, åñëè i = j.

Ïåðåñ÷åò ýëåìåíòîâ ìàòðèöû îñóùåñòâëÿåòñÿ ïî ôîðìóëå:

Ak[i, j] = minAk−1[i, j], Ak−1[i, k] + Ak−1[k, j].

for k:=1 to n dofor i:=1 to n do

for j:=1 to n doif A[i, k] + A[k, j] < A[i, j] then

A[i, j] := A[i, k] + A[k, j]

181

Page 180: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðèìåð 5.9. Äëÿ îðãðàôà, èçîáðàæåííîãî íèæå íà ðèñóíêå, íàéòèêðàò÷àéøèå ýëåìåíòàðíûå ïóòè èç âñåõ âåðøèí îðãðàôà âî âñå îñòàâ-øèåñÿ.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³¶

¶¶¶7

-

JJ

JJ

?­­

­­Á

­­

­­

­­

­­Á

SS

SSSw

1

2 3

4 5

6

1

3

2

1

12

1

1

0 èòåðàöèÿ1 2 3 4 5 6

1 0 1 ∞ 2 ∞ ∞2 ∞ 0 3 ∞ ∞ ∞3 ∞ ∞ 0 ∞ 2 14 ∞ ∞ 1 0 1 ∞5 ∞ ∞ ∞ ∞ 0 16 ∞ ∞ ∞ ∞ ∞ 0

Ïîñëå âûïîëíåíèÿ ïåðâîé èòåðàöèè ìàòðèöà îñòàåòñÿ ïðåæíåé.2 èòåðàöèÿ

1 2 3 4 5 61 0 1 4 2 ∞ ∞2 ∞ 0 3 ∞ ∞ ∞3 ∞ ∞ 0 ∞ 2 14 ∞ ∞ 1 0 1 ∞5 ∞ ∞ ∞ ∞ 0 16 ∞ ∞ ∞ ∞ ∞ 0

3 èòåðàöèÿ1 2 3 4 5 6

1 0 1 4 2 6 52 ∞ 0 3 ∞ 5 43 ∞ ∞ 0 ∞ 2 14 ∞ ∞ 1 0 1 25 ∞ ∞ ∞ ∞ 0 16 ∞ ∞ ∞ ∞ ∞ 0

182

Page 181: Теория алгоритмов. Котов В.М., Соболевская Е.П

4 èòåðàöèÿ1 2 3 4 5 6

1 0 1 3 2 3 42 ∞ 0 3 ∞ 5 43 ∞ ∞ 0 ∞ 2 14 ∞ ∞ 1 0 1 25 ∞ ∞ ∞ ∞ 0 16 ∞ ∞ ∞ ∞ ∞ 0

Ïîñëå 5 è 6 èòåðàöèé ìàòðèöà êðàò÷àéøèõ ïóòåé íå èçìåíÿåòñÿ. Ïî-ñòðîåííàÿ ìàòðèöà ÿâëÿåòñÿ ìàòðèöåé ýëåìåíòàðíûõ êðàò÷àéøèõ ïóòåéâ ãðàôå.

5.3.2. Êðàò÷àéøèå ïóòè (ìàðøðóòû)Çàìåòèì, ÷òî íå âñåãäà êðàò÷àéøèé ïóòü (ìàðøðóò) ÿâëÿåòñÿ

ýëåìåíòàðíûì, â ÷åì ìîæíî óáåäèòüñÿ íà ïðèâåäåííûõ äàëåå ïðèìå-ðàõ.

Çàäà÷à 1. Èìååòñÿ N ãîðîäîâ, êîòîðûå ïðîíóìåðîâàíû îò 1 äîN, ãäå N íàòóðàëüíîå ÷èñëî. Íåêîòîðûå èç íèõ ñîåäèíåíû äâóõñòî-ðîííèìè äîðîãàìè, êîòîðûå ïåðåñåêàþòñÿ òîëüêî â ãîðîäàõ. Èìååòñÿäâà òèïà äîðîã: øîññåéíûå è æåëåçíûå. Äëÿ êàæäîé äîðîãè èçâåñòíàáàçîâàÿ ñòîèìîñòü ïðîåçäà ïî íåé.

Ñòîèìîñòü ïðîåçäà çàâèñèò îò íàáîðà äîðîã, ïî êîòîðûì ìû ïðî-åçæàåì, è îò ñïîñîáà ïðîåçäà. Òàê, åñëè âû ïîäúåõàëè ê ãîðîäó C ïîøîññåéíîé (æåëåçíîé) äîðîãå X → C è õîòèòå åõàòü äàëüøå ïî äî-ðîãå C → Y òîãî æå òèïà, òî âû äîëæíû óïëàòèòü òîëüêî áàçîâóþñòîèìîñòü ïðîåçäà ïî äîðîãå C → Y. Åñëè òèï äîðîãè C → Y îòëè÷åíîò òèïà äîðîãè X → C, òî âû äîëæíû óïëàòèòü áàçîâóþ ñòîèìîñòüïðîåçäà ïî äîðîãå C → Y ïëþñ 10% îò áàçîâîé ñòîèìîñòè ïðîåçäàïî ýòîé äîðîãå (ñòðàõîâîé âçíîñ). Ïðè âûåçäå èç ãîðîäà A ñòðàõîâîéâçíîñ ïëàòèòñÿ âñåãäà.

Íåîáõîäèìî îïðåäåëèòü ñàìûé äåøåâûé ìàðøðóò ïðîåçäà èç ãî-ðîäà A â ãîðîä B â âèäå ïîñëåäîâàòåëüíîñòè ãîðîäîâ, à òàêæå âû÷èñ-ëèòü ñòîèìîñòü ïðîåçäà ïî ýòîìó ìàðøðóòó.

Çàäà÷à 2. Äàíû äåêàðòîâû êîîðäèíàòû N ïåðåêðåñòêîâ ãîðîäà,êîòîðûå ïðîíóìåðîâàíû ÷èñëàìè îò 1 äî N. Íà êàæäîì ïåðåêðåñòêåèìååòñÿ ñâåòîôîð. Íåêîòîðûå èç ïåðåêðåñòêîâ ñîåäèíåíû äâóõñòî-ðîííèìè äîðîãàìè ñ ïðàâîñòîðîííèì äâèæåíèåì, êîòîðûå ïåðåñåêà-þòñÿ òîëüêî íà ïåðåêðåñòêàõ. Äëÿ êàæäîé äîðîãè èçâåñòíî âðåìÿ,

183

Page 182: Теория алгоритмов. Котов В.М., Соболевская Е.П

êîòîðîå òðåáóåòñÿ äëÿ ïðîåçäà ïî íåé îò îäíîãî ïåðåêðåñòêà äî äðó-ãîãî.

Âðåìÿ ïðîåçäà çàâèñèò îò íàáîðà äîðîã, ïî êîòîðûì âû åäåòå, èîò âðåìåíè îæèäàíèÿ íà ïåðåêðåñòêàõ. Òàê, åñëè âû ïîäúåõàëè îò ïå-ðåêðåñòêà X ê ïåðåêðåñòêó C ïî äîðîãå X → C è õîòèòå åõàòü äàëüøåïî äîðîãå C → Y, òî âðåìÿ îæèäàíèÿ íà ïåðåêðåñòêå C çàâèñèò îòòîãî, ïîâîðà÷èâàåòå ëè âû íàëåâî èëè íåò. Åñëè âû ïîâîðà÷èâàåòåíàëåâî, òî âðåìÿ îæèäàíèÿ áóäåò ðàâíî D ∗K, ãäå D êîëè÷åñòâîäîðîã, ïåðåñåêàþùèõñÿ íà ïåðåêðåñòêå C, à K íåêîòîðàÿ êîíñòàíòà.Åñëè âû íå ïîâîðà÷èâàåòå íàëåâî, òî âðåìÿ îæèäàíèÿ ðàâíî íóëþ.

Íåîáõîäèìî ïðîåõàòü îò ïåðåêðåñòêà ñ íîìåðîì A äî ïåðåêðåñòêàñ íîìåðîì B çà ìèíèìàëüíîå âðåìÿ.

Çàäà÷à 3. Èìååòñÿ N ãîðîäîâ, ñîåäèíåííûõ äâóõñòîðîííèìè äî-ðîãàìè ñ ïðàâîñòîðîííèì äâèæåíèåì. Äëÿ êàæäîé äîðîãè çàäàíà ååïðîòÿæåííîñòü. Ìàøèíà ìîæåò ïîâîðà÷èâàòü (èçìåíÿòü íàïðàâëå-íèå äâèæåíèÿ) òîëüêî â ãîðîäàõ. Ìàøèíà èìååò áàê âìåñòèìîñòüþz ëèòðîâ áåíçèíà è äëÿ íåå çàäàí ðàñõîä áåíçèíà x ëèòðîâ íà îäèíêèëîìåòð.  íåêîòîðûõ ãîðîäàõ èìåþòñÿ çàïðàâî÷íûå ñòàíöèè. Äëÿêàæäîé çàïðàâî÷íîé ñòàíöèè îïðåäåëåíà ñâîÿ öåíà çà îäèí ëèòð áåí-çèíà. Ìàøèíà ñìîæåò çàïðàâèòüñÿ òîëüêî â òîì ñëó÷àå, åñëè åå áàêçàïîëíåí ìåíåå, ÷åì íà ïîëîâèíó.

Íåîáõîäèìî îïðåäåëèòü ñàìûé äåøåâûé ìàðøðóò èç ãîðîäà A âãîðîä B.

Çàäà÷à 4. Çàäàí îðãðàô G = (V, E), êàæäîé äóãå (v, w) êîòîðîãîïðèïèñàíà íåêîòîðàÿ äëèíà c(v, w). Òðåáóåòñÿ íàéòè âòîðîé ïî äëèíåïóòü èç âåðøèíû s â âåðøèíó t.

Ðàññìîòðèì êàæäóþ çàäà÷ó îòäåëüíî.  ïåðâîé çàäà÷å áóäóò ñó-ùåñòâîâàòü ñëó÷àè, êîãäà íåîáõîäèìî ïðîåçæàòü ÷åðåç íåêîòîðûé ãî-ðîä äâà ðàçà (ò. å. ìàðøðóò íå ÿâëÿåòñÿ ýëåìåíòàðíûì). Äåéñòâèòåëü-íî, åñëè ïîäúåõàòü ê ãîðîäó A ïî æåëåçíîé äîðîãå è âûåõàòü èç ïîæåëåçíîé äîðîãå, ãäå-òî äàëüøå â ãîðîäå B ìîæíî ïåðåñåñòü íà øîñ-ñåéíóþ äîðîãó è ïî øîññåéíîé äîðîãå ïðèåõàòü â ãîðîä A. Òåïåðüâûåçæàåì èç , íî óæå ïî øîññåéíîé äîðîãå. Ëåãêî ïîíÿòü, ÷òî ñóùå-ñòâóþò òàêèå ñòîèìîñòè ïðîåçäà ïî äîðîãàì, êîãäà òàêîé ìàðøðóòáóäåò èìåòü íàèìåíüøóþ ñòîèìîñòü, ïðîñòî ñòîèìîñòü ñìåíû äîðîãâ ãîðîäå ìîæåò áûòü î÷åíü âåëèêà (áîëüøå, ÷åì ïðîåçä äî ãîðîäà Bè îáðàòíî).

Çàìåòèì, ÷òî â ïåðâîé çàäà÷å â îïòèìàëüíîì ìàðøðóòå ÷åðåç

184

Page 183: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

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

Òàêèì îáðàçîì â ïåðâîé è âòîðîé çàäà÷àõ ìîæåò áûòü ðåàëè-çîâàí ïîèñê îïòèìàëüíîãî ìàðøðóòà ñ èñïîëüçîâàíèåì ñòðóêòóðûäàííûõ ïðèîðèòåòíàÿ î÷åðåäü (êó÷à). Òàê êàê çàðàíåå èçâåñòíî, ÷òîïî êàæäîé äóãå (ðåáðó) îðãðàôà ìû áóäåì ïðîõîäèòü íå áîëåå îäíîãîðàçà, òî â êà÷åñòâå ýëåìåíòà, äîáàâëÿåìîãî â êó÷ó, ìîæíî áðàòü ðåá-ðî (äóãó) ãðàôà. Òîãäà ðåáðî (äóãà) áóäåò ñ÷èòàòüñÿ ïðîñìîòðåííûìïðè åãî ïåðâîì óäàëåíèè èç êó÷è, è ìû íèêîãäà íå ïðîéäåì äâàæäûïî îäíîìó è òîìó æå ðåáðó (äóãå).

Îïòèìàëüíûå ìàðøðóòû ïåðâûõ äâóõ çàäà÷ ÿâëÿëèñü ïðîñòû-ìè. Îäíàêî ñóùåñòâóåò ìíîãî çàäà÷, â êîòîðûõ òðåáóåìûé ìàðøðóò(ïóòü) ïðîõîäèò ïî íåêîòîðûì ðåáðàì (äóãàì) ãðàôà áîëåå îäíîãîðàçà.

 òðåòüåé çàäà÷å ìîæåò îêàçàòüñÿ, ÷òî ïî íåêîòîðîé äîðîãå ïðè-äåòñÿ åçäèòü áîëåå îäíîãî ðàçà ïîòîìó, ÷òî íåêîòîðûå ìàðøðóòû íåìîãóò áûòü ðåàëèçîâàíû â ñèëó íåäîñòàòî÷íîñòè áåíçèíà. Ïîýòîìóäëÿ êàæäîãî ïóíêòà íåîáõîäèìî èìåòü èíôîðìàöèþ íå òîëüêî î äî-ðîãå, ïî êîòîðîé ìû â íåãî ïðèåõàëè, íî è î êîëè÷åñòâå áåíçèíà,êîòîðîå èìååòñÿ íà äàííûé ìîìåíò â áàêå ìàøèíû. Ïîýòîìó, èìååòñìûñë ðàññìàòðèâàòü òîëüêî òàêèå ìàðøðóòû, â êîòîðûõ ïðè ïî-âòîðíîì ïðîåçäå ïî äîðîãå ìû ïðèåçæàåì â êîíå÷íûé ïóíêò äîðîãèñ áîëüøèì êîëè÷åñòâîì áåíçèíà. Òàêèì îáðàçîì, êîëè÷åñòâî ïðîåç-äîâ ïî îäíîé äîðîãå îãðàíè÷åíî îáúåìîì áàêà ìàøèíû z. Ïîýòîìó,åñëè áûë ðåàëèçîâàí íåêîòîðûé ìàðøðóò ñ êîëè÷åñòâîì áåíçèíà xëèòðîâ â áàêå äëÿ äàííîé äîðîãè, òî íà ñëåäóþùåé èòåðàöèè ïðè èñ-ïîëüçîâàíèè êó÷è èìååò ñìûñë ðàññìàòðèâàòü òîëüêî òå âàðèàíòû,êîãäà çàïîëíåíèå áàêà áóäåò áîëüøå, ÷åì âåëè÷èíà x. Ýòî íå êàñàåò-

185

Page 184: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

 ÷åòâåðòîé çàäà÷å âòîðîé ïî äëèíå ïóòü òàêæå ìîæåò íå ÿâëÿòü-ñÿ ïðîñòûì ïóòåì. Òàê äëÿ ãðàôà, ïðèâåäåííîãî íèæå íà ðèñóíêå,

±°²¯

±°²¯

±°²¯

±°²¯

- -1

1

1

11 2

3 4

5

±°²¯

±°²¯

-1A

AAK

¾

AAAU

1

6

âòîðîé ïî äëèíå ïóòü èç âåðøèíû 1 â âåðøèíó 6 çàäàåòñÿ ñëåäóþùåéïîñëåäîâàòåëüíîñòüþ âåðøèí:

1 → 2 → 5 → 4 → 3 → 2 → 5 → 6.

Îí íå ÿâëÿåòñÿ ïðîñòûì, òàê êàê ïðîõîäèò ïî äóãå (2, 5) áîëåå îäíîãîðàçà.

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

Îáîáùàÿ, äëÿ íàõîæäåíèÿ k-îãî ïî äëèíå êðàò÷àéøåãî ìàðøðó-òà (ïóòè) â ãðàôå (îðãðàôå) áóäåì ñ÷èòàòü âåðøèíó ïðîñìîòðåííîéòîëüêî ïîñëå åå k-îãî óäàëåíèÿ èç êó÷è.

5.3.3. Êðàò÷àéøåãî ýëåìåíòàðíûé ìàðøðóò ñ íå÷åòíûì ÷è-ñëîì ðåáåð

Ïðåäïîëîæèì, ÷òî çàäàí íåîðèåíòèðîâàííûé ãðàô G = (V, E).Êàæäîìó ðåáðó ãðàôà (v, w) ∈ E ïîñòàâëåíà â ñîîòâåòñòâèè íåîòðè-öàòåëüíàÿ ñòîèìîñòü c(v, w). Íåîáõîäèìî íàéòè â ãðàôå êðàò÷àéøèé

186

Page 185: Теория алгоритмов. Котов В.М., Соболевская Е.П

ýëåìåíòàðíûé ìàðøðóò èç âåðøèíû s â âåðøèíó t ñ íå÷åòíûì ÷èñëîìðåáåð.Îïðåäåëåíèå 5.1. Ïàðîñî÷åòàíèåì â ãðàôå íàçûâàåòñÿ òàêîå ïîä-ìíîæåñòâî ðåáåð ãðàôà, ÷òî íèêàêèå äâà ðåáðà â íåì íå èìåþò îá-ùåé âåðøèíû. Ïàðîñî÷åòàíèå íàçûâàåòñÿ ñîâåðøåííûì, åñëè îíîïîêðûâàåò âñå âåðøèíû èñõîäíîãî ãðàôà.Íàðÿäó ñ èñõîäíûì ãðàôîì G áóäåì ðàññìàòðèâàòü ìîäèôèöèðîâàí-íûé ãðàô G′, êîòîðûé ïîëó÷àåòñÿ èç èñõîäíîãî ãðàôà ïî ñëåäóþùåìóïðàâèëó:

1) âåðøèíû s è t îñòàâëÿåì áåç èçìåíåíèÿ;2) âñå âåðøèíû v ∈ V, îòëè÷íûå îò s è t, ðàñùåïëÿåì íà äâå âåð-

øèíû v è v′;3) åñëè â èñõîäíîì ãðàôå ñóùåñòâóåò ðåáðî (v, w), ñîåäèíÿþùåå

ðàñùåïëÿåìûå âåðøèíû v è w, òî â ìîäèôèöèðîâàííîì ãðàôåG′ áóäóò ñóùåñòâîâàòü ðåáðà:

(v, w), (v′, w′), (v, w′), (w, v′)

ñòîèìîñòü êàæäîãî èç êîòîðûõ ðàâíà ñòîèìîñòè ðåáðà (v, w) âèñõîäíîì ãðàôå G è ðåáåð:

(v, v′), (w,w′)

ñòîèìîñòè 0 (ñì. ðèñóíîê).

±°²¯

±°²¯

±°²¯

±°²¯

´´

´´

´´

ZZ

ZZ

ZZ

Z

v w

v′ w′c(v, w)

c(v, w)

c(v, w) c(v, w)0 0

Òåîðåìà 5.1. Åñëè â èñõîäíîì ãðàôå G ñóùåñòâóåò ýëåìåíòàðíûéìàðøðóò ñ íå÷åòíûì ÷èñëîì ðåáåð ñòîèìîñòè L, òî â ìîäèôèöè-ðîâàííîì ãðàôå G′ ñóùåñòâóåò ñîâåðøåííîå ïàðîñî÷åòàíèå ñòîè-ìîñòè L. È îáðàòíî, åñëè â ìîäèôèöèðîâàííîì ãðàôå G′ ñóùåñòâó-åò ñîâåðøåííîå ïàðîñî÷åòàíèå ñòîèìîñòè L, òî â èñõîäíîì ãðàôå

187

Page 186: Теория алгоритмов. Котов В.М., Соболевская Е.П

G ñóùåñòâóåò ýëåìåíòàðíûé ìàðøðóò ñ íå÷åòíûì ÷èñëîì ðåáåðñòîèìîñòè L.

Òåîðåìà 5.2. Åñëè â èñõîäíîì ãðàôå G íå ñóùåñòâóåò ýëåìåíòàð-íîãî ìàðøðóòà ñ íå÷åòíûì ÷èñëîì ðåáåð, òî â ìîäèôèöèðîâàííîìãðàôå G′ íå ñóùåñòâóåò ñîâåðøåííîãî ïàðîñî÷åòàíèÿ. È îáðàòíî,åñëè â ìîäèôèöèðîâàííîì ãðàôå G′ íå ñóùåñòâóåò ñîâåðøåííîãî ïà-ðîñî÷åòàíèÿ, òî â èñõîäíîì ãðàôå G íå ñóùåñòâóåò ýëåìåíòàðíûéìàðøðóò ñ íå÷åòíûì ÷èñëîì ðåáåð.

Çàìåòèì, ÷òî â ãðàôå G′ êîëè÷åñòâî âåðøèí âñåãäà ÷åòíî ( âåð-øèíû s è t ïëþñ 2 ∗ (n − 2), ãäå n êîëè÷åñòâî âåðøèí èñõîäíîãîãðàôà). Ïîýòîìó äëÿ ãðàôà G′ åñòü âåðîÿòíîñòü òîãî, ÷òî â íåì ìî-æåò ñóùåñòâîâàòü ñîâåðøåííîå ïàðîñî÷åòàíèå (î÷åâèäíî, ÷òî â ãðà-ôå ñ íå÷åòíûì êîëè÷åñòâîì âåðøèí åãî íå ñóùåñòâóåò). Íàõîäèì âãðàôå G′ ñîâåðøåííîå ïàðîñî÷åòàíèå ìèíèìàëüíîé ñòîèìîñòè (ëþ-áûì èçâåñòíûì àëãîðèòìîì, ëèáî äëÿ íåáîëüøèõ çàäà÷, èñïîëüçóÿàëãîðèòì ïîëíîãî ïåðåáîðà). Åñëè ñîâåðøåííîãî ïàðîñî÷åòàíèÿ íåñóùåñòâóåò, òî â ñîîòâåòñòâèè ñ óòâåðæäåíèåì 2, â èñõîäíîì ãðàôåíå ñóùåñòâóåò ìàðøðóòîâ íå÷åòíîé äëèíû. Åñëè â ãðàôå G′ íàéäå-íî ñîâåðøåííîå ïàðîñî÷åòàíèå ìèíèìàëüíîé ñòîèìîñòè L, òî â ñèëóòåîðåìû 5.1, â èñõîäíîì ãðàôå ñóùåñòâóåò ýëåìåíòàðíûé ìàðøðóòñ íå÷åòíûì ÷èñëîì ðåáåð ñòîèìîñòè L. Äàííûé ìàðøðóò ÿâëÿåòñÿêðàò÷àéøèì ñðåäè âñåõ ýëåìåíòàðíûõ ìàðøðóòîâ ñ íå÷åòíûì ÷èñëîìðåáåð. Äëÿ âîññòàíîâëåíèÿ òðåáóåìîãî ìàðøðóòà íåîáõîäèìî ñæàòüâ ãðàôå G′ âñå ðàñùåïëåííûå âåðøèíû (èñ÷åçíóò ðåáðà íóëåâîé ñòîè-ìîñòè), è ìû ïîëó÷èì èç ñîâåðøåííîãî ïàðîñî÷åòàíèÿ ìèíèìàëüíîéñòîèìîñòè êðàò÷àéøèé ýëåìåíòàðíûé ìàðøðóò ñ íå÷åòíûì ÷èñëîìðåáåð.Ïðèìåð 5.10. Äëÿ ãðàôà G, ïðèâåäåííîãî íèæå íà ðèñóíêå,

±°²¯

±°²¯±°

²¯ ±°²¯

±°²¯

12

3

4

5s

t1

2 3

©©

ZZ

íåîáõîäèìî íàéòè êðàò÷àéøèé ýëåìåíòàðíûé ìàðøðóò ñ íå÷åòíûì ÷èñ-ëîì ðåáåð.

188

Page 187: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïîñòðîèì ìîäèôèöèðîâàííûé ãðàô G′ è íàéäåì äëÿ íåãî ñîâåð-øåííîå ïàðîñî÷åòàíèå ìèíèìàëüíîãî âåñà. Íà ðèñóíêå, ïðèâåäåííîì íè-æå, íà ðåáðà ýòîãî ïàðîñî÷åòàíèÿ óêàçûâàþò ñòðåëêè. Ñòîèìîñòü íàé-äåííîãî ïàðîñî÷åòàíèÿ ðàâíà 12.

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

´´

´´

´´

cc

cc

bb

bb

bb

bbb

##

###

12

3

4

5

±°²¯

±°²¯

±°²¯

©©©©©©©

HHHHHHHs t

1

1'

2

2'

3

3'

00

0

44

4

-

»»»: HHY

?

Ñîâåðøåííîå ïàðîñî÷åòàíèå ìèíèìàëüíîãî âåñà ñîñòîèò èç ðåáåð:

(s, 2), (2′, 3′), (1, 1′), (3, t).

Ñæèìàåì òåïåðü ðàñùåïëåííûå âåðøèíû è ïîëó÷àåì òðåáóåìûé êðàò-÷àéøèé ýëåìåíòàðíûé ìàðøðóò ñ íå÷åòíûì ÷èñëîì ðåáåð:

(s, 2), (2, 3), (3, t).

Ñòîèìîñòü ýòîãî ìàðøðóòà ðàâíà 12.

5.3.4. Ýéëåðîâ öèêë ïðåäûäóùèõ ïàðàãðàôàõ ìû ðàññìàòðèâàëè ìàðøðóòû, êîòî-

ðûå ïðîõîäèëè íå áîëåå îäíîãî ðàçà ïî êàæäîìó ðåáðó, è ìàðøðóòû,êîòîðûå ìîãëè ïðîõîäèòü ïî íåêîòîðûì ðåáðàì ãðàôà áîëåå îäíî-ãî ðàçà. Ñåé÷àñ ðàññìîòðèì çàäà÷ó íàõîæäåíèÿ ýéëåðîâà öèêëà âíåîðèåíòèðîâàííîì ãðàôå, ò. å. òàêîãî çàìêíóòîãî ìàðøðóòà, êîòî-ðûé ïðîõîäèò ïî êàæäîìó ðåáðó ãðàôà ðîâíî îäèí ðàç.

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

189

Page 188: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

,,

,,

,,

,

QQ

QQ

QQ

Q

a

b

c

d

Ìîæíî ëè, äâèãàÿñü ñ îäíîãî èç ÷åòûðåõ ó÷àñòêîâ ñóøè (íà ðèñóíêåýòèì ó÷àñòêàì ñîîòâåòñòâóþò âåðøèíû ãðàôà a, b, c, d), òîëüêî îäèíðàç ïðîéòè ïî êàæäîìó ìîñòó (ìîñòàì â ãðàôå ñîîòâåòñòâóþò ðåá-ðà) è ñíîâà âåðíóòüñÿ â òîò ó÷àñòîê ñóøè, ñ êîòîðîãî íà÷èíàëîñüäâèæåíèå.

 1976 ãîäó øâåäñêèé ìàòåìàòèê Ýéëåð ñôîðìóëèðîâàë ýòó çàäà-÷ó ñ òî÷êè çðåíèÿ òåîðèè ãðàôîâ è äîêàçàë òåîðåìó î ñóùåñòâîâàíèèâ ãðàôå çàìêíóòîãî öèêëà, ïðîõîäÿùåãî ïî êàæäîìó ðåáðó ãðàôàðîâíî îäèí ðàç.

Ñ òåõ ïîð òàêèå öèêëû ïîëó÷èëè íàçâàíèå ýéëåðîâûõ, à ãðàôû,ñîäåðæàùèå ýéëåðîâû öèêëû, ñòàëè íàçûâàòü ýéëåðîâûìè ãðàôàìè.

Çàìåòèì, ÷òî åñëè ãðàô ÿâëÿåòñÿ ýéëåðîâûì, òî äâèãàÿñü âäîëüýéëåðîâà öèêëà, ìîæíî, íå îòðûâàÿ ðóêè, íàðèñîâàòü âåñü ãðàô.Òåîðåìà 5.3 (Ýéëåð). Ñâÿçíûé ãðàô ÿâëÿåòñÿ ýéëåðîâûì òîãäà èòîëüêî òîãäà, êîãäà ñòåïåíè âñåõ åãî âåðøèí ÷åòíû.Íàïîìíèì, ÷òî ñòåïåíü âåðøèíû v ðàâíà êîëè÷åñòâó èíöèäåíòíûõåé ðåáåð.  äàëüíåéøåì ñòåïåíü âåðøèíû v áóäåì îáîçíà÷àòü ÷åðåçd(v).

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

 ñëó÷àå, êîãäà íàì íåîáõîäèìî ïîñòðîèòü Ýéëåðîâ ìàðøðóò äëÿ

190

Page 189: Теория алгоритмов. Котов В.М., Соболевская Е.П

ñâÿçíîãî íåîðèåíòèðîâàííîãî ãðàôà èç âåðøèíû v â âåðøèíó w, íåîá-õîäèìî, ÷òîáû

• ñòåïåíè âåðøèí v è w áûëè íå ÷åòíû;

• ñòåïåíè âñåõ îñòàâøèõñÿ âåðøèí ÷åòíû.Àíàëîãè÷íî, äëÿ ñèëüíî ñâÿçíîãî îðãðàôà ñóùåñòâóåò ýéëåðîâ ïóòüèç âåðøèíû v â âåðøèíó w, åñëè

• êîëè÷åñòâî äóã, âõîäÿùèõ â âåðøèíó v íà åäèíèöó ìåíüøå, ÷åìêîëè÷åñòâî âûõîäÿùèõ èç íåå äóã;

• êîëè÷åñòâî äóã, âõîäÿùèõ â âåðøèíó w íà åäèíèöó áîëüøå, ÷åìêîëè÷åñòâà âûõîäÿùèõ èç íåå äóã;

• äëÿ âñåõ îñòàâøèõñÿ âåðøèí êîëè÷åñòâî âõîäÿùèõ äóã ðàâíîêîëè÷åñòâó âûõîäÿùèõ äóã.

Àëãîðèòìïîñòðîåíèÿ ýéëåðîâà öèêëà

Àëãîðèòì ðàáîòàåò â ïðåäïîëîæåíèè, ÷òî íåîðèåíòèðîâàííûéãðàô G = (V,E) ñâÿçíûé, à ñòåïåíè âñåõ åãî âåðøèí ÷åòíû.

1. Ýéëåðîâ öèêë C = ∅.2. Ïóñòü v0 íåêîòîðàÿ ïðîèçâîëüíàÿ âåðøèíà ãðàôà. Áóäåì äâè-

ãàòüñÿ îò âåðøèíû v0 ïî íåèñïîëüçîâàííûì ðåáðàì ãðàôà äî òåõïîð, ïîêà íå âåðíåìñÿ îïÿòü â ýòó âåðøèíó (ïîñòðîèëè öèêë).Ïðåäïîëîæèì, ÷òî ïîñòðîåí öèêë C ′.

3. Åñëè âñå ðåáðà ãðàôà èñïîëüçîâàíû, òî ïîëàãàåì C = C ′ è àë-ãîðèòì çàêàí÷èâàåò ñâîþ ðàáîòó.

4. Åñëè ñóùåñòâóþò íåèñïîëüçîâàííûå ðåáðà, òî â ñèëó ñâÿçíîñòèãðàôà, äîëæíà ñóùåñòâîâàòü òàêàÿ âåðøèíà ãðàôà vi, êîòîðàÿïðèíàäëåæèò öèêëó C è ÿâëÿåòñÿ êîíöîì êàêîãî-òî åùå íåèñ-ïîëüçîâàííîãî ðåáðà.

5. Óäàëèì èç èñõîäíîãî ãðàôà G ðåáðà öèêëà C.  îñòàâøåìñÿ ãðà-ôå âñå âåðøèíû ïî-ïðåæíåìó áóäóò èìåòü ÷åòíóþ ñòåïåíü (ïðèóäàëåíèè ðåáåð öèêëà ñòåïåíè êàæäîé âåðøèíû öèêëà óìåíü-øàþòñÿ íà ÷åòíîå ÷èñëî).  ïîëó÷åííîì ãðàôå ïîñòðîèì öèêëC ′, íà÷èíàÿ äâèæåíèè îò âåðøèíû vi.

191

Page 190: Теория алгоритмов. Котов В.М., Соболевская Е.П

6. Åñëè âñå ðåáðà èñïîëüçîâàíû, òî ýéëåðîâ öèêë ïîñòðîåí. Òðå-áóåìûé ýéëåðîâ öèêë ýòî ÷àñòü öèêëà C îò âåðøèíû v0 äî âåð-øèíû vi, çàòåì öèêë C ′, à çàòåì îñòàâøàÿñÿ ÷àñòü öèêëà C îòâåðøèíû vi äî âåðøèíû v0.

7. Åñëè âñå ðåáðà íå èñïîëüçîâàíû, òî ïîëàãàåì C = C ∪ C ′ èâîçâðàùàåìñÿ ê øàãó 4 àëãîðèòìà.

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

Ðåàëèçàöèÿ àëãîðèòìàïîñòðîåíèÿ ýéëåðîâà öèêëà

1. Ïóñòü v0 ïðîèçâîëüíàÿ âåðøèíà ãðàôà G. Çàíåñåì åå â ñòåê.Î÷åðåäü ïîëàãàåì ðàâíîé ïóñòîé.

2. Ïóñòü v ïîñëåäíÿÿ çàíåñåííàÿ â ñòåê âåðøèíà. Òîãäà, ïî-êà ñòåê íå îïóñòååò, âûïîëíÿòü ñëåäóþùóþ ïîñëåäîâàòåëüíîñòüøàãîâ.

(a) Åñëè ñóùåñòâóåò ðåáðî (v, w), òî óäàëÿåì ýòî ðåáðî èç ãðà-ôà, à âåðøèíó w çàíîñèì â ñòåê.

(b) Åñëè íå ñóùåñòâóåò ðåáðà, âûõîäÿùåãî èç âåðøèíû v, òîóäàëÿåì âåðøèíó v èç ñòåêà è ïåðåíîñèì åå â î÷åðåäü.

3. Ïîñëåäîâàòåëüíîñòü âåðøèí î÷åðåäè è çàäàåò ïîðÿäîê îáõîäàâåðøèí ãðàôà â ýéëåðîâîì öèêëå.

Ïðèìåð 5.11. Äëÿ ãðàôà, ïðèâåäåííîãî íà ðèñóíêå, ïîñòðîèòü ýéëå-ðîâ öèêë.

±°²¯

±°²¯

±°²¯

±°²¯

±°²¡

¡\

\\

1

2

3

4 5

%%

%

\\\

192

Page 191: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ñíà÷àëà äåëàåì î÷åðåäü ïóñòîé, à â ñòåê çàíîñèì âåðøèíó 1.

S = 1).

O = ∅.Çàòåì, ïîñëåäîâàòåëüíî äâèãàåìñÿ ïî ðåáðàì

(1, 2), (2, 3), (3, 1),

óäàëÿåì èõ èç èñõîäíîãî ãðàôà è çàíîñèì â ñòåê âåðøèíû 2,3 è 1. Ïîñëåâûïîëíåíèÿ äàííîé ïîñëåäîâàòåëüíîñòè äåéñòâèé, ñîäåðæèìîå ñòåêà áó-äåò ðàâíî:

S = 1, 2, 3, 1.Ïîñëå ÷åãî ìû âèäèì, ÷òî íå ñóùåñòâóåò ðåáåð, âûõîäÿùèõ èç âåðøèíû1, ïîýòîìó óäàëÿåì åå èç ñòåêà è ïåðåíîñèì â î÷åðåäü. Àíàëîãè÷íîïîñòóïàåì è ñ âåðøèíîé 3.

S = 1, 2.

O = 1, 3.Çàòåì ïîñëåäîâàòåëüíî äâèãàåìñÿ ïî ðåáðàì

(2, 4), (4, 5), (5, 2),

óäàëÿåì èõ, à ñîäåðæèìîå ñòåêà áóäåì èìåòü âèä:

S = 1, 2, 4, 5, 2.

Ïîñëå ÷åãî â ãðàôå âîîáùå íåò ðåáåð, ïîýòîìó óäàëÿåì ïîñëåäîâàòåëüíîâñå ýëåìåíòû èç ñòåêà è ïåðåíîñèì èõ â î÷åðåäü:

O = 1, 3, 2, 5, 4, 2, 1.

Ïîñëåäîâàòåëüíîñòü âåðøèí î÷åðåäè è çàäàåò ïîðÿäîê îáõîäà âåðøèí âýéëåðîâîì öèêëå.

Óïðàæíåíèå 1. Ìîäèôèöèðîâàòü ïðèâåäåííûé àëãîðèòì äëÿïîñòðîåíèÿ ýéëåðîâà êîíòóðà â îðèåíòèðîâàííîãî ãðàôà.

Óïðàæíåíèå 2. Çàäàíà ïîñëåäîâàòåëüíîñòü ñëîâ. Èãðà çàêëþ-÷àåòñÿ â òîì, ÷òî èãðîêè ïî î÷åðåäè íàçûâàþò ñëîâà èç çàäàííîé

193

Page 192: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

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

Óïðàæíåíèå 3. Íà ñòîëå âûëîæåíû äîìèíîøêè. Êàæäàÿ äî-ìèíîøêà ñîñòîèò èç äâóõ ÷àñòåé, íà êàæäîé èç êîòîðûõ èçîáðàæåíîíåêîòîðîå ÷èñëî òî÷åê. Äîìèíîøêè ìîãóò âûêëàäûâàòüñÿ â ðÿä îäíàçà äðóãîé ïî ñëåäóþùåìó ïðàâèëó: êîëè÷åñòâà òî÷åê íà ïðèìûêàþ-ùèõ ÷àñòÿõ ñîñåäíèõ â ðÿäó äîìèíîøåê äîëæíû ñîâïàäàòü.

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

5.3.5. Çàäà÷à êèòàéñêîãî ïî÷òàëüîíàÑ çàäà÷åé ïîñòðîåíèÿ ýéëåðîâà öèêëà â íåîðèåíòèðîâàííîì

ãðàôå òåñíî ñâÿçàíà ñëåäóþùàÿ çàäà÷à. Çàäàí íåîðèåíòèðîâàííûéñâÿçíûé ãðàô, êàæäîìó ðåáðó êîòîðîãî ïîñòàâëåíà â ñîîòâåòñòâèèíåêîòîðàÿ íåîòðèöàòåëüíàÿ ñòîèìîñòü. Òðåáóåòñÿ íàéòè òàêîé öèêëâ ãðàôå, êîòîðûé ïðîõîäèò íå ìåíåå îäíîãî ðàçà ïî êàæäîìó ðåáðó èñòîèìîñòü êîòîðîãî ìèíèìàëüíà. Äàííóþ çàäà÷ó ÷àñòî íàçûâàþò çà-äà÷åé êèòàéñêîãî ïî÷òàëüîíà, òàê êàê çàäà÷à äîñòàâêè ïî÷òû ñ ìè-íèìèçàöèåé îáùåãî êèëîìåòðàæà ìîæåò áûòü ñôîðìóëèðîâàíà îïè-ñàííûì âûøå îáðàçîì: íóæíî äîñòàâèòü ïî÷òó íà íåêîòîðûå óëèöû(ðåáðà ãðàôà), ïðè ýòîì ðàçðåøàåòñÿ åçäèòü ïî óëèöàì ìíîãîêðàò-íî, åñëè ýòî óìåíüøàåò äëèíó ìàðøðóòà. Íåñîìíåííî, ÷òî ïîäîáíûìîáðàçîì ìîæåò áûòü ñôîðìóëèðîâàíî áîëüøîå ÷èñëî çàäà÷, âñòðå÷à-þùèõñÿ íà ïðàêòèêå.

Ðàññìîòðèì àëãîðèòì ðåøåíèÿ çàäà÷è êèòàéñêîãî ïî÷òàëüîíà.Åñëè ñòåïåíè âñåõ âåðøèí èñõîäíîãî ãðàôà ÷åòíû, òî ïî òåîðåìå Ýé-ëåðà â ñâÿçíîì ãðàôå ñóùåñòâóåò ýéëåðîâ öèêë. Äàííûé öèêë ïðî-õîäèò ïî êàæäîìó ðåáðó ðîâíî îäèí ðàç, ñëåäîâàòåëüíî, òðåáîâàíèå,ïðåäúÿâëÿåìîå ê íóæíîìó ïóòè, âûïîëíåíî è äàííûé öèêë ÿâëÿåòñÿöèêëîì ìèíèìàëüíîé ñòîèìîñòè.

194

Page 193: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðåäïîëîæèì òåïåðü, ÷òî â ãðàôå ñóùåñòâóþò âåðøèíû, ñóììàñòåïåíåé êîòîðûõ íå÷åòíà. Ïîêàæåì, ÷òî êîëè÷åñòâî òàêèõ âåðøèí÷åòíî. Äåéñòâèòåëüíî, ñóììà ñòåïåíåé âñåõ âåðøèí ëþáîãî ãðàôà ÿâ-ëÿåòñÿ ÷åòíîé, òàê êàê êàæäîå ðåáðî äîáàâëÿåò äâå åäèíèöû ÷åòíîñòèê îáùåé ñóììå. Åñëè |E| = m, òî d(V ) = 2m.

Ïóñòü X êîëè÷åñòâî âåðøèí ãðàôà, èìåþùèõ ÷åòíóþ ñòåïåíü,à Y êîëè÷åñòâî âåðøèí ãðàôà, èìåþùèõ íå÷åòíóþ ñòåïåíü. Òîãäà

vi∈X

d(vi) +∑

vi∈Y

d(vi) = 2m.

Òàê êàê âåëè÷èíà∑

vi∈X d(vi) âñåãäà ÷åòíà, òî äëÿ ÷åòíîñòè âñåéñóììû íåîáõîäèìî, ÷òîáû âåëè÷èíà

∑vi∈Y d(vi) òàêæå áûëà ÷åòíà.

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

Àëãîðèòìðåøåíèÿ çàäà÷è

êèòàéñêîãî ïî÷òàëüîíà

1. Íà ìíîæåñòâå âåðøèí èñõîäíîãî ãðàôà G, êîòîðûå èìåëè íå÷åò-íóþ ñòåïåíü, ïîñòðîèì ïîëíûé ãðàô G′ = (Y,E′). Êàæäîìó ðåá-ðó (v, w) ∈ E′ ãðàôà G′ ïîñòàâèì â ñîîòâåòñòâèè ñòîèìîñòü

c′(v, w) = p(v, w),

ãäå p(v, w) ñòîèìîñòü êðàò÷àéøåãî ýëåìåíòàðíîãî ìàðøðóòàèç âåðøèíû v â âåðøèíó w â ãðàôå G.

Îáîçíà÷èì ÷åðåç Path_min(v, w) ðåáðà ýòîãî ìàðøðóòà.

2. Òàê êàê â ïîëíîì ãðàôå G′ êîëè÷åñòâî âåðøèí ÷åòíî, òî â íåìñóùåñòâóåò ñîâåðøåííîå ïàðîñî÷åòàíèå.Íàéäåì â ãðàôå G′ ñîâåðøåííîå ïàðîñî÷åòàíèå P ìèíèìàëüíîéñòîèìîñòè.

3. Çàìåíèì êàæäîå ðåáðî (v, w) ñîâåðøåííîãî ïàðîñî÷åòàíèÿ ìè-íèìàëüíîé ñòîèìîñòè ïîñëåäîâàòåëüíîñòüþ ðåáåð èç ìíîæåñòâPath_min(v, w). Ïóñòü P ′ îáúåäèíåíèå ìíîæåñòâ ðåáåð ýòèõìàðøðóòîâ:

P ′ =⋃

(v,w)∈P

Path_min(v, w).

195

Page 194: Теория алгоритмов. Котов В.М., Соболевская Е.П

4. Ïîñòðîèì ìóëüòèãðàô

G′′ = (V, E ∪ P ′).

 òàêîì ãðàôå ìîãóò áûòü êðàòíûå ðåáðà. Çàìåòèì, ÷òî ñòå-ïåíè âñåõ âåðøèí ãðàôà G′′ ÿâëÿþòñÿ ÷åòíûìè, (ñòåïåíè âñåõâåðøèí, êîòîðûå èìåëè â ãðàôå G íå÷åòíóþ ñòåïåíü, óâåëè÷è-ëèñü íà 1, à ñòåïåíè âåðøèí, êîòîðûå èìåëè ÷åòíóþ ñòåïåíü âãðàôå G , ïî-ïðåæíåìó ÷åòíû).

5. Òàêèì îáðàçîì ìû èìååì Ýéëåðîâ ãðàô G′′, â êîòîðîì ìàðøðóòìîæåò áûòü íàéäåí ïî îïèñàííîìó â ïðåäûäóùåì ïàðàãðàôåàëãîðèòìó. Äàííûé ìàðøðóò ÿâëÿåòñÿ ðåøåíèåì çàäà÷è êèòàé-ñêîãî ïî÷òàëüîíà.

5.4. Ìàêñèìàëüíûé ïîòîê â ãðàôå è åãî ïðèëîæå-íèÿ

Ïðåäïîëîæèì, ÷òî çàäàí îðãðàô G = (V,E). Êàæäîé äóãå e ∈ Eîðãðàôà G ïðèïèñàíà íåêîòîðàÿ ïðîïóñêíàÿ ñïîñîáíîñòü c(e). Âûäå-ëåíû äâå âåðøèíû: s (â êîòîðóþ íåò âõîäÿùèõ äóã) è t (èç êîòîðîéíåò âûõîäÿùèõ äóã). Òàêèì îáðàçîì, ìû èìååì íåêîòîðóþ ñåòü.Îïðåäåëåíèå 5.2. Ïîòîêîì â ñåòè íàçûâàåòñÿ òàêàÿ ôóíêöèÿ f :E → R, êîòîðàÿ óäîâëåòâîðÿåò ñëåäóþùèì ñâîéñòâàì

1. Ïîòîê ïî äóãå íå ïðåâîñõîäèò ïðîïóñêíîé ñïîñîáíîñòè äóãè:0 ≤ f(v, w) ≤ c(v, w).

2. Êîëè÷åñòâî ïðîäóêòà, âûõîäÿùåãî èç âåðøèíû s, ðàâíî êîëè-÷åñòâó ïðîäóêòà, âõîäÿùåãî â âåðøèíó t:

f(v1, t)+f(v2, t)+ . . .+f(vq, t) = f(s, u1)+f(s, u2)+ . . .+f(s, up).

3. Äëÿ êàæäîé ïðîìåæóòî÷íîé âåðøèíû w (îòëè÷íîé îò s è t)êîëè÷åñòâî âõîäÿùåãî ïðîäóêòà ðàâíî êîëè÷åñòâó âûõîäÿùåãîïðîäóêòà:

f(v1, w)+f(v2, w)+. . .+f(vk, w) = f(w, u1)+f(w, u2)+. . .+f(w, ul).

Âåëè÷èíîé ïîòîêà íàçûâàåòñÿ êîëè÷åñòâî ïðîäóêòà, âûõîäÿùåãî èçâåðøèíû s.

196

Page 195: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðåäïîëîæèì, ÷òî çàäàíà íåêîòîðàÿ ïîñëåäîâàòåëüíîñòü âåðøèíîðãðàôà

s = v1, v2, . . . , vk = t,

òàêàÿ, ÷òî (vi, vi+1) äóãà ëèáî (vi+1, vi) äóãà. Òîãäà äóãè, íà-ïðàâëåíèå êîòîðûõ ñîâïàäàåò ñ íàïðàâëåíèåì ïóòè èç s â t, áóäåìíàçûâàòü ïðÿìûìè äóãàìè, à îñòàâøèåñÿ äóãè îáðàòíûìè (íà ðè-ñóíêå, ïðèâåäåííîì íèæå, âñå äóãè, êðîìå äóãè (v4, v3), ïðÿìûå).

n n n n n- - ¾ -

sv1 v2 v3 v4 v5

t

Íåêîòîðûé ïóòü íàçûâàåòñÿ óâåëè÷èâàþùèì, åñëè ïðÿìûå äóãèíå äîãðóæåíû f(v, w) < c(v, w), à ïîòîê ïî îáðàòíûì äóãàì áîëüøåíóëÿ.

Ïîòîê íàçûâàåòñÿ ìàêñèìàëüíûì, åñëè â ñåòè îòñóòñòâóåò óâå-ëè÷èâàþùèé ïóòü.

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

Ïîìåòêè âåðøèí

Âåðøèíå s ñòàâèòñÿ â ñîîòâåòñòâèå ìåòêà met[s], ðàâíàÿ ìàêñè-ìàëüíîìó êîëè÷åñòâó ïðîäóêòà ñðåäè äóã, êîòîðûå âûõîäÿò èç âåð-øèíû s.

Ïðåäïîëîæèì, ÷òî âåðøèíå v ïîñòàâëåíà â ñîîòâåòñòâèå ìåòêàmet[v]. Ðàññìîòðèì ñîñåäíèå ñ v íåïîìå÷åííûå âåðøèíû. Âîçìîæíàîäíà èç ñëåäóþùèõ ñèòóàöèé.

• Åñëè (v, w1) äóãà è

f(v, w1) < c(v, w1),

òî äóãà (v, w1) íåäîãðóæåíà íà âåëè÷èíó c(v, w1)− f(v, w1). Òî-ãäà âåðøèíå w1 ñòàâèòñÿ ìåòêà

met[w1] := min (|met[v]|, c(v, w1)− f(v, w1)) ,

197

Page 196: Теория алгоритмов. Котов В.М., Соболевская Е.П

ðàâíàÿ êîëè÷åñòâó ïðîäóêòà, êîòîðîå ìîæåò áûòü äîñòàâëåíî ââåðøèíó w1 (ñ ó÷åòîì òîãî, ÷òî â âåðøèíó v äîñòàâëåíî met[v]ïðîäóêòà).

• Åñëè (v, w1) äóãà è

f(v, w1) = c(v, w1),

òî âåðøèíà w1 èç âåðøèíû v íå ïîìå÷àåòñÿ.

• Åñëè (w2, v) îáðàòíàÿ äóãà è

f(w2, v) > 0,

òî âåðøèíå w2 ñòàâèòñÿ ìåòêà

met[w2] := −min (|met[v]|, f(w2, v)) .

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

Åñëè ìåòêà âåðøèíû v ïîëîæèòåëüíàÿ, òî ýòà âåðøèíà áûëà ïî-ìå÷åíà ïî ïðÿìîé äóãå, à åñëè îòðèöàòåëüíàÿ, òî ïî îáðàòíîé äóãå.Åñëè â ðåçóëüòàòå ïîìåòîê óäàåòñÿ ïîìåòèòü âåðøèíó t, òî ñóùå-ñòâóåò óâåëè÷èâàþùèé ïóòü è òåêóùèé ïîòîê ìîæíî óâåëè÷èòü íàâåëè÷èíó met[t].

Óâåëè÷åíèå ïîòîêà âäîëü óâåëè÷èâàþùåãî ïóòè îñóùåñòâëÿåòñÿòàê: ïî ïðÿìûì äóãàì óâåëè÷èâàåì ïîòîê íà met[t]; ïî îáðàòíûìäóãàì óìåíüøàåì ïîòîê íà met[t].

Òàêèì îáðàçîì, ïðèõîäèì ê ñëåäóþùåìó àëãîðèòìó ïîñòðîåíèÿìàêñèìàëüíîãî ïîòîêà.

Àëãîðèòìïîñòðîåíèÿ ìàêñèìàëüíîãî ïîòîêà

0.  êà÷åñòâå íà÷àëüíîãî ïîòîêà âçÿòü íóëåâîé ïîòîê.

1. Èñïîëüçóÿ ðàñøèðåííûé ïîèñê â ãëóáèíó, ðàññòàâèòü ìåòêè âåð-øèíàì, íà÷èíàÿ ñ âåðøèíû s, ïîêà íå áóäåò ïîìå÷åíà êîíå÷íàÿâåðøèíà t. Åñëè âåðøèíó t ïîìåòèòü íå óäàåòñÿ, òî íå ñóùåñòâó-åò óâåëè÷èâàþùåãî ïóòè, òåêóùèé ïîòîê ÿâëÿåòñÿ ìàêñèìàëü-íûì è àëãîðèòì çàêàí÷èâàåò ðàáîòó.

198

Page 197: Теория алгоритмов. Котов В.М., Соболевская Е.П

2. Âîññòàíîâèòü óâåëè÷èâàþùèé ïóòü èç s â t, èñïîëüçóÿ äåðåâîïîèñêà â øèðèíó.

3. Óâåëè÷èòü ïîòîê èç s â t íà âåëè÷èíó met[t] âäîëü óâåëè÷èâà-þùåãî ïóòè.

4. Óáðàòü âñå ìåòêè, ïðèïèñàííûå âåðøèíàì, è ïåðåéòè ê øàãó 1àëãîðèòìà.

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

typeuk_out =↑ el;

el=recordval:byte; íîìåð âåðøèíûc:integer; ïðîïóñêíàÿ ñïîñîáíîñòü äóãèf :integer; òåêóùèé ïîòîê ïî äóãånext : uk_out;

end;

uk_in =↑ el1;el1=recordval:byte;next : uk_in;

end;

varm_in:array[1..n] of uk_in;m_out:array[1..n] of uk_out;

Îòìåòèì, ÷òî â ïðèâåäåííîé äàëåå ïðîãðàììíîé ðåàëèçàöèè èñ-ïîëüçóþòñÿ äâà ìàññèâà m_in è m_out:

• m_in[i] ñîäåðæèò àäðåñ íà÷àëà ñïèñêà âåðøèí, âõîäÿùèõ â âåð-øèíó i;

• m_out[i] ñîäåðæèò àäðåñ íà÷àëà ñïèñêà âåðøèí, âûõîäÿùèõ èçâåðøèíû i.

199

Page 198: Теория алгоритмов. Котов В.М., Соболевская Е.П

pr:=false;repeatfor i:=1 to n do met[i] := 0; path[i] := 0; met[s] := ∞; in_ocher(s);while (nach 6=nil) and (met[t] = 0) do

v := out_ocher; dop_out := m_out[v];while (dop_out 6=nil) and (met[t] = 0) do

w := dop_out ↑ .val;if (met[w] = 0) and ((dop_out ↑ .c− dop_out ↑ .f) > 0) thenmet[w] := dop_out ↑ .c− dop_out ↑ .f ;if met[w] >abs(met[v]) then met[w]:=abs(met[v]);path[w] := v; in_ocher(w);

dop_out := dop_out ↑ .next;dop_in := m_in[v];while (dop_in 6=nil) and (met[t] = 0) dow := dop_in ↑ .val; dop_out := m_out[w];while dop_out ↑ .val 6= v do dop_out := dop_out ↑ .next;if (met[w] = 0) and (dop_out ↑ .f > 0) then met[w] := dop_out ↑ .f ;if met[w] >abs(met[v]) then met[w]:=abs(met[v]);met[w] := −met[w]; path[w] := v; in_ocher(w);

dop_in := dop_in ↑ .next; if met[t] = 0 then pr:=true else

d := met[t];w := t;v := path[w];while (v 6= 0) doif met[w] > 0 then dop_out := m_out[v];while dop_out ↑ .val 6= w do dop_out := dop_out ↑ .next;dop_out ↑ .f := dop_out ↑ .f + d;

else dop_out := m_out[w];while dop_out ↑ .val 6= v do dop_out := dop_out ↑ .next;dop_out ↑ .f := dop_out ↑ .f − d;

w := v; v := path[w];

free_mem_och;

until pr;

200

Page 199: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðèìåð 5.12. Îïðåäåëèì ìàêñèìàëüíûé ïîòîê â ñåòè, èçîáðàæåííîéíèæå íà ðèñóíêå.

Äëÿ êàæäîé äóãè (v, w) ñåòè óêàçàíû: ïðîïóñêíàÿ ñïîñîáíîñòü äóãèc(v, w) è òåêóùèé ïîòîê f(v, w) ïî ýòîé äóãå.

l

l

l

l

l

l½½½>

QQQs ?

-Q

QQ

QQ

QQs½

½½

½½

½½>

?- ³³³³³³1

HHHHHjv1

v2

v3

v4

v5

v6s t

l

l

l

l

l

l½½½>

QQQs ?

-Q

QQ

QQ

QQs½

½½

½½

½½>

?- ³³³³³³1

HHHHHjv1

v2

v3

v4

v5

v6s t

l l l lv1 v2 v4 v6- - -

4,0

3,0

6,03,0

5,0

6,0

1,0 1,0

1,0

2,0

(v1, 4) (v2, 3)

(v4, 3)

(v1, 6) (v2, 1)

met[t] = 3

(v1, 1)(v3, 2)

(v1, 6) (v2, 1)

(v4, 2)

4,3

3,3

5,3

6,0

1,0

3,0

6,0

1,0

1,0

2,0

l l l lv1 v3 v4 v6- - - met[t] = 2

Íà ðèñóíêàõ, ïðèâåäåííûõ âûøå, âûïîëíåíû äâå èòåðàöèè àëãîðèòìà.Íà êàæäîé èòåðàöèè âåðøèíå v ñòàâèòñÿ â ñîîòâåòñòâèå äâå âåëè÷èíû:

• íîìåð âåðøèíû, èç êîòîðîé äàííàÿ âåðøèíà áûëà ïîìå÷åíà;

• ìåòêà met[v], îïðåäåëÿåìàÿ ïî ïðàâèëó, îïèñàííîìó âûøå.

Òàê êàê òåêóùèé ïîòîê åùå íå ÿâëÿåòñÿ ìàêñèìàëüíûì, òî ïðîäîëæèìâûïîëíåíèå èòåðàöèé àëãîðèòìà íàõîæäåíèÿ ìàêñèìàëüíîãî ïîòîêà âñåòè.

201

Page 200: Теория алгоритмов. Котов В.М., Соболевская Е.П

Íà ðèñóíêàõ, ïðèâåäåííûõ äàëåå, ïðîèëëþñòðèðîâàíà 3 è 4 èòåðà-öèÿ àëãîðèòìà íàõîæäåíèÿ ìàêñèìàëüíîãî ïîòîêà.

l

l

l

l

l

l½½½>

QQQs ?

-Q

QQ

QQ

QQs½

½½

½½

½½>

?- ³³³³³³1

HHHHHjv1

v2

v3

v4

v5

v6s t

l

l

l

l

l

l½½½>

QQQs ?

-Q

QQ

QQ

QQs½

½½

½½

½½>

?- ³³³³³³1

HHHHHjv1

v2

v3

v4

v5

v6s t

l l l l- - -v1 v2 v5 v6 met[t] = 1

l l l l- - -v1 v3 v5 v6 met[t] = 3

(v1, 1)

(v1, 4) (v2, 1)

(v5, 1)

4,3

3,3

5,5

6,03,0

6,2

1,0 1,0

1,0

2,2

4,4

3,35,5

6,13,0

6,2

1,0 1,0

1,1

2,2

(v1, 4) (v3, 3)

(v5, 3)

Íà 5 èòåðàöèè ìîæíî ïîìåòèòü òîëüêî òðåòüþ âåðøèíó (ñì. ðèñóíîêíèæå); òàêèì îáðàçîì, âåðøèíà t = 6 îñòàíåòñÿ íåïîìå÷åííîé.

l

l

l

l

l

l½½½>

QQQs ?

-Q

QQ

QQ

QQs½

½½

½½

½½>

?- ³³³³³³1

HHHHHjv1

v2

v3

v4

v5

v6s t

4,4

3,3

5,5

6,43,3

1,1

1,0 1,02,2

(v1, 1)

6,5

Ñëåäîâàòåëüíî, òåêóùèé ïîòîê âåëè÷èíû 9 ÿâëÿåòñÿ ìàêñèìàëüíûì.

202

Page 201: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ìàêñèìàëüíîå êîëè÷åñòâà ïóòåé,íåïåðåñåêàþùèõñÿ ïî äóãàì

Ìíîãèå çàäà÷è íà ãðàôàõ ìîãóò áûòü ñâåäåíû ê çàäà÷å íàõîæäå-íèÿ ìàêñèìàëüíîãî ïîòîêà â ñåòè ñ ïðîïóñêíîé ñïîñîáíîñòüþ äóã,ðàâíîé 1.

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

k k k k k k

k k k

k k k

- - - - -

- -

@@

@R- -

6v1 v2 v3 v5 v6 v10

v7 v8 v9

v4 v11 v12

k k k k k k

k k k

k k k

- - - - -

- -

@@

@R- -

6v1 v2 v3 v5 v6 v10

v7 v8 v9

v4 v11 v12

k k k k k k- - - - -v1 v2 v3 v5 v6 v10

k k k k k k- - - -v1 v4 v11 v12 v5 v3k k k k- - -v7 v8 v9 v10¾ -

∞ v1, 1 v2, 1 v3, 1 v5, 1 v6, 1

v2,−1 v3,−1 v5,−1 v12, 1

v11, 1v4, 1v1, 1

v3, 1 v7, 1 v8, 1

v9, 1

k k k- -v1 v2 v3 k k k k- - -v7 v8 v9 v10-

k k k k- - - -v4 v11 v12 v5 k k-v6 v10-kv1

a)

b)

c)

6Q

QQs

6 @@@R

Ïðîïóñêíûå ñïîñîáíîñòè âñåõ äóã ðàâíû 1. Âûïîëíèì äâå èòåðàöèè

203

Page 202: Теория алгоритмов. Котов В.М., Соболевская Е.П

àëãîðèòìà íàõîæäåíèÿ ìàêñèìàëüíîãî ïîòîêà èç âåðøèíû s = v1 ââåðøèíó t = v10.

Ïîñëå ïåðâîé èòåðàöèè ïîëó÷èì óâåëè÷èâàþùèé ïóòü, ñîñòîÿ-ùèé èç ïîñëåäîâàòåëüíîñòè âåðøèí

v1, v2, v3, v5, v6, v10

(ñì. ðèñ. a)).Ïîñëå âòîðîé èòåðàöèè ïîëó÷èì óâåëè÷èâàþùèé ïóòü

v1, v4, v11, v12, v5, v3, v7, v8, v9, v10

(ñì. ðèñ. b)).Òàê êàê äóãà (v3, v5) ÿâëÿåòñÿ îáðàòíîé, òî ðåçóëüòèðóþùèé ïî-

òîê ïî íåé áóäåò ðàâåí íóëþ.Ïîñëåäîâàòåëüíîñòü äóã, ïî êîòîðûì ïîòîê ðàâåí åäèíèöå, îá-

ðàçóþò äâà ïóòè èç âåðøèíû s = v1 â âåðøèíó t = v10, êîòîðûå íåïåðåñåêàþòñÿ ïî äóãàì (ñì. ðèñ. c)).

Òàêèì îáðàçîì, â çàäà÷àõ íàõîæäåíèÿ ìàêñèìàëüíîãî êîëè÷å-ñòâà ïóòåé, íåïåðåñåêàþùèõñÿ ïî äóãàì, â ðåçóëüòàòå àëãîðèòìà íà-õîæäåíèÿ ìàêñèìàëüíîãî ïîòîêà, ìíîæåñòâî äóã äåëèòñÿ íà äâà ïîä-ìíîæåñòâà:

• äóãè, ïî êîòîðûì õîäèëè (ïîòîê ïî íèì ðàâåí 1);

• äóãè, ïî êîòîðûì íå õîäèëè (ïîòîê ïî íèì ðàâåí 0).

Ðàññìîòðèì ñåé÷àñ àëãîðèòì íàõîæäåíèÿ ìàêñèìàëüíîãî êîëè-÷åñòâà ïóòåé, íåïåðåñåêàþùèõñÿ ïî äóãàì, êîòîðûé îñíîâàí íà àëãî-ðèòìå íàõîæäåíèÿ ìàêñèìàëüíîãî ïîòîêà.

Àëãîðèòì

1. Çàíåñòè â î÷åðåäü ñòàðòîâóþ âåðøèíó s.

2. Ïîêà î÷åðåäü íå ñòàíåò ïóñòîé èëè â î÷åðåäü íå áóäåò çàíåñå-íà êîíå÷íàÿ âåðøèíà t, âûïîëíÿòü ñëåäóþùóþ ïîñëåäîâàòåëü-íîñòü øàãîâ.

2.1 Ïðåäïîëîæèì, ÷òî ïåðâîé â î÷åðåäè íàõîäèòñÿ âåðøèíà v.Äëÿ êàæäîé âåðøèíû w1 ñìåæíîé ñ v:

204

Page 203: Теория алгоритмов. Котов В.М., Соболевская Е.П

åñëè (v, w1) äóãà, êîòîðàÿ îòíîñèòñÿ ê ïîäìíîæåñòâóäóã, ïî êîòîðûì íå õîäèëè, òî âåðøèíó w1 çàíîñèì â î÷å-ðåäü; åñëè (v, w1) äóãà, êîòîðàÿ îòíîñèòñÿ ê ïîäìíîæåñòâóäóã, ïî êîòîðûì õîäèëè, òî íè÷åãî íå äåëàåì; åñëè (w1, v) äóãà, êîòîðàÿ îòíîñèòñÿ ê ïîäìíîæåñòâóäóã, ïî êîòîðûì õîäèëè, òî âåðøèíó w1 çàíîñèì â î÷åðåäü; åñëè (w1, v) äóãà, êîòîðàÿ îòíîñèòñÿ ê ïîäìíîæåñòâóäóã, ïî êîòîðûì íå õîäèëè, òî íè÷åãî íå äåëàåì.

2.2 Óäàëÿåì âåðøèíó v èç î÷åðåäè.

3. Åñëè êîíå÷íàÿ âåðøèíà t áûëà çàíåñåíà â î÷åðåäü, òî äåëàåìî÷åðåäü ïóñòîé è âîçâðàùàåìñÿ ê øàãó 1 àëãîðèòìà. Ïðè ýòîìäóãè, ðåàëèçóþùèå ïóòü èç s â t, ïåðåôîðìèðîâûâàåì ïî ñëå-äóþùåìó ïðàâèëó:

• ïðÿìûå äóãè ïóòè (ýòè äóãè ðàíåå îòíîñèëèñü ê ïîäìíî-æåñòâó äóã, ïî êîòîðûì íå õîäèëè) îòíîñèì ê ïîäìíî-æåñòâó äóã, ïî êîòîðûì õîäèëè;

• îáðàòíûå äóãè ïóòè (ýòè äóãè ðàíåå îòíîñèëèñü ê ïîäìíî-æåñòâó äóã, ïî êîòîðûì õîäèëè) îòíîñèì ê ïîäìíîæå-ñòâó äóã, ïî êîòîðûì íå õîäèëè.

4. Åñëè î÷åðåäü ïóñòà, à êîíå÷íàÿ âåðøèíà t íå áûëà çàíåñåíà âî÷åðåäü, òî äóãè ïðèíàäëåæàùèå ïîäìíîæåñòâó äóã, ïî êîòî-ðûì õîäèëè, îáðàçóþò ìàêñèìàëüíîå êîëè÷åñòâî ïóòåé, íåïåðå-ñåêàþùèõñÿ ïî äóãàì. Àëãîðèòì çàêàí÷èâàåò ñâîþ ðàáîòó.

Óïðàæíåíèå. Îáîáùèòü àëãîðèòì íàõîæäåíèÿ ìàêñèìàëüíîãîêîëè÷åñòâà ïóòåé, íåïåðåñåêàþùèõñÿ ïî ðåáðàì, äëÿ íåñêîëüêèõ èñ-òî÷íèêîâ è ñòîêîâ.

Äîïóñòèìàÿ öèðêóëÿöèÿ

Îïðåäåëåíèå 5.3. Öèðêóëÿöèåé â îðãðàôå G = (V, E) íàçûâàåòñÿòàêàÿ ôóíêöèÿ g : E → R, ÷òî äëÿ ëþáîé âåðøèíû v îðãðàôà Gâûïîëíÿåòñÿ óñëîâèå áàëàíñà:

(w,v)∈E(V,v)

g(w, v)−∑

(w,v)∈E(v,V )

g(v, w),

205

Page 204: Теория алгоритмов. Котов В.М., Соболевская Е.П

ãäå E(V, v) ìíîæåñòâî äóã, âõîäÿùèõ â âåðøèíó v, à E(v, V ) ìíîæåñòâî äóã, âûõîäÿùèõ èç âåðøèíû v.

Ïðåäïîëîæèì, ÷òî äëÿ êàæäîé äóãè îðãðàôà çàäàíà âåðõíÿÿ èíèæíÿÿ ãðàíèöû:

l(v, w) ≤ g(v, w) ≤ c(v, w), 0 ≤ l ≤ c. (5.2)

Öèðêóëÿöèÿ, êîòîðàÿ óäîâëåòâîðÿåò íåðàâåíñòâó (5.2) íàçûâàåòñÿäîïóñòèìîé.

Ìû áóäåì ðàññìàòðèâàòü çàäà÷ó ïîñòðîåíèÿ äîïóñòèìîé öèðêó-ëÿöèè â îðãðàôå.

Ðàñøèðèì èñõîäíûé îðãðàô G = (V, E) äî ñåòè G′, ïðèñîåäè-íÿÿ âåðøèíû s è t, à òàêæå ìíîæåñòâî äóã (s, v) è (v, t) äëÿ êàæäîéâåðøèíû v ∈ V.

Äëÿ ïîñòðîåííîé ñåòè ââåäåì ñëåäóþùèå ïðîïóñêíûå ñïîñîáíî-ñòè äóã:

1. c′(v, w) = c(v, w)− l(v, w), ∀(v, w) ∈ E

2. c′(s, v) =∑

(w,v)∈E(V,v) l(w, v) ýòî ìèíèìàëüíîå êîëè÷åñòâîïðîäóêòà, êîòîðîå îáÿçàòåëüíî äîëæíî áûòü ââåçåíî â âåðøèíóv.

3. c′(v, t) =∑

(v,w)∈E(v,V ) l(v, w) ýòî ìèíèìàëüíîå êîëè÷åñòâîïðîäóêòà, êîòîðîå îáÿçàòåëüíî äîëæíî áûòü âûâåçåíî èç âåð-øèíû v.

Òåïåðü ðåøèì äëÿ ñåòè G′ çàäà÷ó î ìàêñèìàëüíîì ïîòîêå. Åñëèâåëè÷èíà ìàêñèìàëüíîãî ïîòîêà f ðàâíà ñóììå ïðîïóñêíûõ ñïîñîáíî-ñòåé äóã, âûõîäÿùèõ èç s (âõîäÿùèõ â t), òî äîïóñòèìàÿ öèðêóëÿöèÿñóùåñòâóåò è îíà ìîæåò áûòü âû÷èñëåíà ïî ñëåäóþùåìó ïðàâèëó:

∀(v, w) ∈ E : g(v, w) = f(v, w) + l(v, w). (5.3)

 ïðîòèâíîì ñëó÷àå, äîïóñòèìîé öèðêóëÿöèè íå ñóùåñòâóåò.Ïðèìåð 5.13. Äëÿ îðãðàôà G, èçîáðàæåííîãî äàëåå íà ðèñóíêå, íàé-òè äîïóñòèìóþ öèðêóëÿöèþ. Âîçëå êàæäîé äóãè (v, w) óêàçàíû äâà ÷èñ-ëà l(v,w)

c(v,w) âåðõíÿÿ è íèæíÿÿ ãðàíèöû äëÿ öèðêóëÿöèè.

206

Page 205: Теория алгоритмов. Котов В.М., Соболевская Е.П

n

n

n

³³³³³1

?HHHHHHY

1

2

3

23

33

14

Ðàñøèðèì èñõîäíûé ãðàô äî ñåòè G′ è ðåøèì çàäà÷ó î ìàêñèìàëüíîìïîòîêå. Íà ðèñóíêå âîçëå êàæäîé äóãè óêàçàíû äâà ÷èñëà: ïðîïóñêíàÿñïîñîáíîñòü c′(v, w) è âåëè÷èíà ïîòîêà ïî ýòîé äóãå f(v, w).

n

n

n

n n½½

½½½>

-HHHHHHHj

ZZ

ZZ

ZZ~-

¡¡¡µ

?

SSSw B

BB

BB

BBBM

s t

1

2

3

1,1

2,2

3,3

2,2

3,3

1,10,0

1,1

3,2

Âåëè÷èíà ìàêñèìàëüíîãî ïîòîêà f = 6 ðàâíà ñóììå ïðîïóñêíûõ ñïîñîá-íîñòåé äóã, âûõîäÿùèõ èç s, ïîýòîìó äîïóñòèìàÿ öèðêóëÿöèÿ ñóùåñòâóåòè ìîæåò áûòü âû÷èñëåíà ïî ôîðìóëå (5.3).

n

n

n

³³³³³1

?HHHHHHY

1

2

3

1+2=3

0+3=3

2+1=3

5.5. Öèêëû îòðèöàòåëüíîé ñòîèìîñòè ïðè ðåøå-íèè ãðàôîâûõ çàäà÷

Áîëüøèíñòâî àëãîðèòìîâ ïîñòðîåíèÿ êðàò÷àéøèõ ïóòåé â ãðà-ôàõ ðàáîòàëè â ïðåäïîëîæåíèè, ÷òî â ãðàôå îòñóòñòâóþò öèêëû îò-

207

Page 206: Теория алгоритмов. Котов В.М., Соболевская Е.П

ðèöàòåëüíîé ñòîèìîñòè. Îäíàêî ñóùåñòâóåò öåëûé ðÿä çàäà÷, àëãî-ðèòìû ðåøåíèÿ êîòîðûõ ñâîäÿò ðåøåíèå ðàññìàòðèâàåìîé çàäà÷èê ðåøåíèþ íåêîòîðûõ ïîäçàäà÷, â êîòîðûõ íåîáõîäèìî îïðåäåëèòüöèêë îòðèöàòåëüíîé ñòîèìîñòè.

 äàííîì ðàçäåëå íàìè áóäóò ðàññìîòðåíû ñëåäóþùèå òàêèå çà-äà÷è:

1. ìàêñèìàëüíîå âçâåøåííîå ïàðîñî÷åòàíèå â äâóäîëüíîì ãðàôå;

2. ìàêñèìàëüíûé ïîòîê ìèíèìàëüíîé ñòîèìîñòè;

3. ìèíèìàëüíûé ñðåäíèé êîíòóð â îðãðàôå ñ ïîëîæèòåëüíûìèñòîèìîñòÿìè äóã.

5.5.1. Ìàêñèìàëüíîå âçâåøåííîå ïàðîñî÷åòàíèå â äâóäîëü-íîì ãðàôå

Çàäàí íåîðèåíòèðîâàííûé äâóäîëüíûé ãðàô G = (V, E), V =X ∪ Y, ãäå X,Y ìíîæåñòâà âåðøèí ïåðâîé è âòîðîé äîëè ãðàôàñîîòâåòñòâåííî. Êàæäîìó ðåáðó (v, w) ãðàôà G ïîñòàâëåíà â ñîîò-âåòñòâèè íåîòðèöàòåëüíàÿ ñòîèìîñòü c(v, w) ≥ 0.

Îïðåäåëåíèå 5.4. Çàäà÷à íàõîæäåíèÿ â ãðàôå G ïàðîñî÷åòàíèÿ,ñóììàðíàÿ ñòîèìîñòü ðåáåð êîòîðîãî ìàêñèìàëüíà, íàçûâàåòñÿ çà-äà÷åé î ìàêñèìàëüíîì âçâåøåííîì ïàðîñî÷åòàíèè â äâóäîëüíîì ãðà-ôå.Ïðèìåð 5.14. Ïóñòü íà ïëîñêîñòè ñ Åâêëèäîâîé ìåòðèêîé çàäàíî nêðàñíûõ è n ñèíèõ òî÷åê. Èìååòñÿ n îòðåçêîâ, ñîåäèíÿþùèõ ýòè òî÷êèòàêèì îáðàçîì, ÷òî êàæäûé îòðåçîê ñîåäèíÿåò òî÷êè ðàçëè÷íîãî öâåòàè êàæäàÿ òî÷êà ÿâëÿåòñÿ êîíöåâîé òî÷êîé òî÷íî îäíîãî îòðåçêà.

Íåîáõîäèìî îïðåäåëèòü, ÿâëÿåòñÿ ëè çàäàííîå ñîåäèíåíèå ìèíè-ìàëüíûì ïî äëèíå (ñóììà äëèí âñåõ îòðåçêîâ) ñðåäè âñåõ âîçìîæíûõñîåäèíåíèé, óäîâëåòâîðÿþùèõ çàäàííûì ñâîéñòâàì.

Êîíñòðóêöèþ, ïðèâåäåííóþ â ïðèìåðå, ìîæíî ïðåäñòàâèòü â âè-äå äâóäîëüíîãî ãðàôà, ãäå âåðøèíàì îäíîé äîëè ñîîòâåòñòâóþò òî÷êèîäíîãî öâåòà. Èìåþùèåñÿ îòðåçêè êàê ðàç è ñîîòâåòñòâóþò íåêîòî-ðîìó ïàðîñî÷åòàíèþ ãðàôà.

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

208

Page 207: Теория алгоритмов. Котов В.М., Соболевская Е.П

Àëãîðèòìïîñòðîåíèÿ ïàðîñî÷åòàíèÿ

â äâóäîëüíîì ãðàôå

1. Äîïîëíèì äâóäîëüíûé ãðàô äî ñåòè, äîáàâëÿÿ äâå âåðøèíû sè t, à òàêæå ìíîæåñòâî ðåáåð (s, v) äëÿ êàæäîé âåðøèíû v ∈ Xè ìíîæåñòâî ðåáåð (v, t) äëÿ êàæäîé âåðøèíû v ∈ Y.

2. Ïðîïóñêíûå ñïîñîáíîñòè âñåõ äóã ïîëàãàåì ðàâíûìè 1.

3. Â ïîñòðîåííîé ñåòè íàõîäèì ìàêñèìàëüíûé ïîòîê.

4. Ìíîæåñòâî ðåáåð èñõîäíîãî ãðàôà G, ïîòîê ïî êîòîðûì ðàâåí1, äàþò ìíîæåñòâî ðåáåð íåêîòîðîãî ïàðîñî÷åòàíèÿ â ãðàôå.

Ïóñòü P = (x1, y1), (x2, y2), . . . , (xl, yl), xi ∈ X, yi ∈ Y åñòüìíîæåñòâî ðåáåð ýòîãî ïàðîñî÷åòàíèÿ, ãäå xi ñîîòâåòñòâóþò êðàñíûìâåðøèíàì. Äàëåå ïîñòóïèì ñëåäóþùèì îáðàçîì.

• êàæäîé äóãå (yk, xk) èñõîäíîãî ãðàôà G, êîòîðîå ïðèíàäëåæèòïàðîñî÷åòàíèþ P, â ãðàôå G′ áóäåò ñîîòâåòñòâîâàòü äóãà (xk, yk)ñòîèìîñòè

c′(yk, xk) = −c(yk, xk);

• êàæäîé äóãå (x, y) èñõîäíîãî ãðàôà G, êîòîðîå íå ïðèíàäëåæèòïàðîñî÷åòàíèþ P, â ãðàôå G′ áóäåò ñîîòâåòñòâîâàòü äóãà (y, x)ñòîèìîñòè

c′(x, y) = c(x, y).

Íàõîäèì â ãðàôå G′ öèêë C îòðèöàòåëüíîé ñòîèìîñòè. Äëÿ ðå-øåíèÿ ýòîé ïîäçàäà÷è ìîæíî èñïîëüçîâàòü àëãîðèòì Ôëîéäà. Åñëè âàëãîðèòìå Ôëîéäà ïðè ïåðåñ÷åòå ìàòðèöû äëèí ïóòåé íà äèàãîíàëèïîÿâëÿåòñÿ îòðèöàòåëüíîå ÷èñëî, òî öèêë îòðèöàòåëüíîé ñòîèìîñòèC íàéäåí. À ýòî çíà÷èò, ÷òî èìåþùååñÿ ïàðîñî÷åòàíèå íå ÿâëÿåò-ñÿ ìèíèìàëüíûì. Äåéñòâèòåëüíî, åñëè ïîëó÷åí öèêë îòðèöàòåëüíîéäëèíû, òî â òàêîì ïîëîâèíà äóã áóäåò ñîîòâåòñòâîâàòü ðåáðàì ïà-ðîñî÷åòàíèÿ, à ïîëîâèíà íåò. Íåòðóäíî çàìåòèòü, ÷òî îäíî ìíîæå-ñòâî ìîæåò áûòü çàìåíåíî íà äðóãîå, è ïðè ýòîì ïîëó÷èòñÿ íîâîåïàðîñî÷åòàíèå, âåñ êîòîðîãî ñòàíåò ìåíüøå (÷àñòü ðåáåð çàìåíèëàñüäðóãèìè ðåáðàìè, ñóììàðíûé âåñ êîòîðûõ ìåíüøå, òàê êàê ðåáðà èçïàðîñî÷åòàíèÿ ó÷èòûâàëèñü ñî çíàêîì ìèíóñ).

209

Page 208: Теория алгоритмов. Котов В.М., Соболевская Е.П

Îïèñàííûé ïîäõîä ïîçâîëÿåò ðåøàòü çàäà÷ó ïîñòðîåíèÿ ïàðîñî-÷åòàíèÿ ìàêñèìàëüíîãî âåñà â ïîëíîì äâóäîëüíîì ãðàôå.

Àëãîðèòìïîñòðîåíèÿ ìàêñèìàëüíîãî ïàðîñî÷åòàíèÿ

â ïîëíîì äâóäîëüíîì ãðàôå

1. Ñòðîèì îðèåíòèðîâàííûé ãðàô G′ ïî ñëåäóþùåìó ïðàâèëó:

• êàæäîìó ðåáðó (xk, yk) èñõîäíîãî ãðàôà G, êîòîðîå ïðè-íàäëåæèò ïàðîñî÷åòàíèþ P, â ãðàôå G′ áóäåò ñîîòâåòñòâî-âàòü äóãà (xk, yk) ñòîèìîñòè c′(xk, yk) = c(xk, yk);

• êàæäîìó ðåáðó (xk, yk) èñõîäíîãî ãðàôà G, êîòîðîå íå ïðè-íàäëåæèò ïàðîñî÷åòàíèþ P, â ãðàôå G′ áóäåò ñîîòâåòñòâî-âàòü äóãà (yk, xk) ñòîèìîñòè c′(yk, xk) = −c(xk, yk).

2. Íàõîäèì â ãðàôå G′ öèêë C îòðèöàòåëüíîé ñòîèìîñòè. Äëÿ ðå-øåíèÿ ýòîé ïîäçàäà÷è ìîæíî èñïîëüçîâàòü àëãîðèòì Ôëîéäà.Åñëè â àëãîðèòìå Ôëîéäà ïðè ïåðåñ÷åòå ìàòðèöû äëèí ïóòåéíà äèàãîíàëè ïîÿâëÿåòñÿ îòðèöàòåëüíîå ÷èñëî, òî öèêë îòðè-öàòåëüíîé ñòîèìîñòè C íàéäåí. Ïðåäïîëîæèì, ÷òî ñòîèìîñòüýòîãî îòðèöàòåëüíîãî öèêëà åñòü ÷èñëî z.

3. Åñëè öèêë îòðèöàòåëüíîé ñòîèìîñòè â ãðàôå G′ ñóùåñòâóåò, òîïðåîáðàçóåì òåêóùåå ïàðîñî÷åòàíèå P ïî ñëåäóþùåìó ïðàâèëó:

• åñëè äóãà (yk, xk) öèêëà èìååò îòðèöàòåëüíóþ ñòîèìîñòü,òî äîáàâëÿåì ðåáðî (xk, yk) ê ïàðîñî÷åòàíèþ;

• åñëè äóãà (xk, yk) öèêëà èìååò ïîëîæèòåëüíóþ ñòîèìîñòü,òî óäàëÿåì ðåáðî (xk, yk) èç ïàðîñî÷åòàíèÿ.

Ñòîèìîñòü íîâîãî ïàðîñî÷åòàíèÿ P áóäåò áîëüøå ïðåäûäóùåãîïàðîñî÷åòàíèÿ íà âåëè÷èíó |z|. Âîçâðàùàåìñÿ ê øàãó 1 àëãî-ðèòìà.

4. Åñëè öèêëà îòðèöàòåëüíîé ñòîèìîñòè íå ñóùåñòâóåò, òî òåêó-ùåå ïàðîñî÷åòàíèå P ÿâëÿåòñÿ ìàêñèìàëüíûì âçâåøåííûì ïà-ðîñî÷åòàíèåì â äâóäîëüíîì ãðàôå. Àëãîðèòì çàâåðøàåò ñâîþðàáîòó.

210

Page 209: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðèìåð 5.15.  äâóäîëüíîì ãðàôå G, èçîáðàæåííîì íà ðèñóíêå, íàé-òè ìàêñèìàëüíîå âçâåøåííîå ïàðîñî÷åòàíèå.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

QQ

QQ

QQ

QQ

SS

SS

SS

SS

SSS­

­­

­­

­­

­­

­­

´´

´´

´´

´

1

2

3

4

5

6

2

310

2

4 2

3

X Y

?

6

¶¶/

 êà÷åñòâå íà÷àëüíîãî ïàðîñî÷åòàíèÿ P áåðåì ñëåäóþùèé íàáîð ðå-áåð èñõîäíîãî ãðàôà: P = (1, 4), (2, 5), (3, 6). Ñòîèìîñòü âûáðàííîãîïàðîñî÷åòàíèÿ ðàâíà 7. Íà ðèñóíêå ðåáðà ïàðîñî÷åòàíèÿ P ïîìå÷åíûñòðåëêàìè. Ñòðîèì òåïåðü ïî ïàðîñî÷åòàíèþ ãðàô G′.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

1

2

3

4

5

6

X Y

-

-

-

QQ

QQ

QQ

QQk

½½

½½

½½

½½=

¶¶

¶¶

¶¶

¶¶

¶¶

¶/S

SS

SS

SS

SS

SSSo

2

2

3

-4-2 -10

-3

211

Page 210: Теория алгоритмов. Котов В.М., Соболевская Е.П

 ãðàôå G′ ñóùåñòâóåò öèêë C îòðèöàòåëüíîé ñòîèìîñòè.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

-

¶¶

¶¶

¶¶/

-SS

SS

SSSo

1 4

3 6

2

3

-10-4

Ìíîæåñòâî äóã öèêëà åñòüC = (1, 4), (4, 3), (3, 6), (6, 1),

ñòîèìîñòü öèêëà z = −9.Ðåáðà öèêëà (1, 4) è (3, 6) ïðèíàäëåæàò òåêóùåìó ïàðîñî÷åòàíèþ P,

ïîýòîìó èñêëþ÷àåì èõ èç ïàðîñî÷åòàíèÿ è äîáàâëÿåì ê íåìó ðåáðà (1, 6)è (3, 4), êîòîðûå íå ïðèíàäëåæàëè P. Ïðåîáðàçîâàííîå ïàðîñî÷åòàíèåòåïåðü èìååò âèä:

P = (1, 6), (2, 5), (3, 4)è åãî ñòîèìîñòü ðàâíà 16.

Ïî äàííîìó ïàðîñî÷åòàíèþ ñíîâà ñòðîèì ãðàô G′.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

1

2

3

4

5

6

X Y

-

­­

­­

­­

­­

­­­ÁS

SS

SS

SS

SS

SSw

¾

½½

½½

½½

½½=

QQ

QQ

QQ

QQk

¾

-2

-3

10

2

4

-2

-3

212

Page 211: Теория алгоритмов. Котов В.М., Соболевская Е.П

 ãðàôå îòñóòñòâóþò öèêëû îòðèöàòåëüíîé ñòîèìîñòè. Ñëåäîâàòåëüíîòåêóùåå ïàðîñî÷åòàíèå P, êîòîðîå íà ðèñóíêå îòìå÷åíî ñòðåëêàìè,

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

QQ

QQ

QQ

QQ

SS

SS

SS

SS

SSS­

­­

­­

­­

­­

­­

´´

´´

´´

´

1

2

3

4

5

6

2

310

2

4 2

3

X Y

¶¶/

ZZ~

³³)

ÿâëÿåòñÿ ìàêñèìàëüíûì âçâåøåííûì ïàðîñî÷åòàíèåì.

5.5.2. Ìàêñèìàëüíûé ïîòîê ìèíèìàëüíîé ñòîèìîñòè

Ïðèìåð 5.16. Èìååòñÿ ñåòü òðóáîïðîâîäîâ ïî ïåðåêà÷êå íåôòè èç ïó-íêòà A â ïóíêò B. Ïðè ýòîì ó÷àñòêè òðóáîïðîâîäîâ èìåþò ïðîïóñêíóþñïîñîáíîñòü (òîííà/÷àñ) è ñòîèìîñòü òðàíñïîðòèðîâêè (òðàíçèòà) òîí-íû íåôòè ïî ó÷àñòêó. Òðåáóåòñÿ îðãàíèçîâàòü ïåðåêà÷êó ìàêñèìàëüíîãîêîëè÷åñòâà íåôòè ïðè ìèíèìàëüíûõ ñóììàðíûõ çàòðàòàõ íà òðàíçèò.Ðàññìîòðèì îðãðàô G = (V, E). Êàæäîé äóãå (v, w) îðãðàôà G ïî-ñòàâëåíû â ñîîòâåòñòâèå äâå âåëè÷èíû:

• ñòîèìîñòü äóãè p(v, w), êîòîðàÿ ðàâíà òîé ñòîèìîñòè, êîòîðàÿäîëæíà áûòü óïëà÷åíà çà ïðîâîç îäíîé åäèíèöû ïðîäóêòà ïîäóãå;

• ïðîïóñêíàÿ ñïîñîáíîñòü äóãè c(v, w).

Âûäåëåíû äâå âåðøèíû: s (â êîòîðóþ íåò âõîäÿùèõ äóã) è t (èç êîòî-ðîé íåò âûõîäÿùèõ äóã). Òàêèì îáðàçîì, ìû èìååì íåêîòîðóþ ñåòü.S.

213

Page 212: Теория алгоритмов. Котов В.М., Соболевская Е.П

Îïðåäåëåíèå 5.5. Ìàêñèìàëüíûì ïîòîêîì ìèíèìàëüíîé ñòîèìî-ñòè íàçûâàåòñÿ ìàêñèìàëüíûé ïîòîê, ñòîèìîñòü êîòîðîãî ìèíè-ìàëüíà.

Àëãîðèòìïîñòðîåíèÿ ìàêñèìàëüíîãî ïîòîêà

ìèíèìàëüíîé ñòîèìîñòè

1. Â ñåòè S ñòðîèì ìàêñèìàëüíûé ïîòîê f ëþáûì èçâåñòíûì àë-ãîðèòìîì.

2. Ñòðîèì íîâóþ ñåòü S′ = (V,E′) ìíîæåñòâî äóã êîòîðîé è èõñòîèìîñòè p′ çàâèñÿò îò ìàêñèìàëüíîãî ïîòîêà f. Ïîñëå ïîñòðî-åíèÿ ìàêñèìàëüíîãî ïîòîêà f âîçìîæíî ïîÿâëåíèå òðåõ òèïîâäóã:

• íàñûùåííûå äóãè (v, w) : f(v, w) = c(v, w) ýòèì äóãàì ñî-îòâåòñòâóåò â ñåòè S′ îäíà äóãà

(v, w) : p′(v, w) = −p(v, w);

• íå íàñûùåííûå äóãè, ïîòîê ïî êîòîðûì áîëüøå 0: (v, w) :0 < f(v, w) < c(v, w); ýòèì äóãàì ñîîòâåòñòâóåò â ñåòè S′

äâå äóãè:(v, w) : p′(v, w) = −p(v, w);

(w, v) : p′(w, v) = p(v, w);

• äóãè, ïîòîê ïî êîòîðûì ðàâåí 0: (v, w) : f(v, w) = 0; ýòèìäóãàì ñîîòâåòñòâóåò â ñåòè S′ îäíà äóãà

(w, v) : p′(w, v) = p(v, w);

3. Ñòðîèì â ñåòè S′ öèêë îòðèöàòåëüíîé ñòîèìîñòè, íàïðèìåð, èñ-ïîëüçóÿ àëãîðèòì Ôëîéäà.

4. Åñëè öèêë îòðèöàòåëüíîé ñòîèìîñòè åñòü, òî ñóùåñòâóåò ìàêñè-ìàëüíûé ïîòîê ìåíüøåé ñòîèìîñòè, ÷åì òåêóùèé ïîòîê f . Äåé-ñòâèòåëüíî, åñëè âåëè÷èíà öèêëà îòðèöàòåëüíîé ñòîèìîñòè åñòü÷èñëî c < 0, òî ýòî ãîâîðèò î òîì, ÷òî ïåðåðàñïðåäåëÿÿ âäîëüöèêëà îòðèöàòåëüíîé ñòîèìîñòè îäíó åäèíèöó ïîòîêà, ìîæíî

214

Page 213: Теория алгоритмов. Котов В.М., Соболевская Е.П

ïîëó÷èòü ïîòîê, ñòîèìîñòü êîòîðîãî íà |c| åäèíèö ìåíüøå, ÷åìòåêóùèé ïîòîê. Îáîçíà÷èì ÷åðåç C öèêë îòðèöàòåëüíîé ñòîè-ìîñòè:

C = (v1, v2), (v2, v3), . . . , (vk−1, vk), (vk, v1).

Òîãäà ìîäèôèöèðóåì ïîòîê f äëÿ äóã ñåòè, ïðèíàäëåæàùèõöèêëó, ïî ñëåäóþùåìó ïðàâèëó:

• åñëè äóãà (vl, vl+1) ∈ C èìååò îòðèöàòåëüíóþ ñòîèìîñòü âñåòè S′, òî âåëè÷èíà ïîòîêà ïî íåé â ãðàôå G áóäåò óìåíü-øàòüñÿ íà âåëè÷èíó d;

• åñëè äóãà (vl, vl+1) ∈ C èìååò ïîëîæèòåëüíóþ ñòîèìîñòüâ ñåòè S′, òî âåëè÷èíà ïîòîêà ïî äóãå (vl+1, vl) â ãðàôå Gáóäåò óâåëè÷èâàòüñÿ íà âåëè÷èíó d.

Äëÿ äóã ñåòè, íå ïðèíàäëåæàùèõ öèêëó, âåëè÷èíó ïîòîêà ïîíèì íå èçìåíÿåì. Âåëè÷èíà d èçìåíåíèÿ ïîòîêà îïðåäåëÿåòñÿñëåäóþùèì îáðàçîì:

d = min(v,w)∈C

f(v, w), åñëè p′(v, w) < 0;c(w, v)− f(w, v), åñëè p′(v, w) > 0.

Ïîñëå ìîäèôèêàöèè ïîòîêà f âîçâðàùàåìñÿ ê øàãó 2 àëãîðèò-ìà.

5. Åñëè öèêëà îòðèöàòåëüíîé ñòîèìîñòè â ñåòè S′ íå ñóùåñòâó-åò, òî òåêóùèé ïîòîê f ÿâëÿåòñÿ ìàêñèìàëüíûì ïîòîêîì ìèíè-ìàëüíîé ñòîèìîñòè â ñåòè S è àëãîðèòì çàâåðøàåò ñâîþ ðàáîòó.

Ïðèìåð 5.17. Îïðåäåëèòü ìàêñèìàëüíûé ïîòîê ìèíèìàëüíîé ñòîè-ìîñòè â ñåòè, èçîáðàæåííîé íèæå íà ðèñóíêå. Äëÿ êàæäîé äóãè (v, w)ñåòè óêàçàíû: ïðîïóñêíàÿ ñïîñîáíîñòü c(v, w) è ñòîèìîñòü p(v, w).

l

l

l

l

l

l½½½>

QQQs ?

-Q

QQ

QQ

QQs½

½½

½½

½½>

?- ³³³³³³1

HHHHHj1

2

3

4

5

6s t

4,2

3,1

5,3

6,13,2

1,4

1,5 1,62,3

(v1, 1)

6,3

215

Page 214: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ñòðîèì ìàêñèìàëüíûé ïîòîê f. Âåëè÷èíà ìàêñèìàëüíîãî ïîòîêà ðàâíà9, à åãî ñòîèìîñòü ðàâíà 61(âîçëå êàæäîé äóãè óêàçàíû ñòîèìîñòü èâåëè÷èíà ïîòîêà).

l

l

l

l

l

l½½½>

QQQs ?

-Q

QQ

QQ

QQs½

½½

½½

½½>

?- ³³³³³³1

HHHHHj1

2

3

4

5

6s t

4,4

3,35,5

6,43,3

1,1

1,0 1,02,2

6,5

Ñòðîèì ñåòü S′.

l

l

l

l

l

l½½½>

QQQs

-Q

QQ

QQ

QQs½

½½

½½

½½>

- ³³³³³³1

HHHHHj1

2

3

4

5

6s t

-2

-1

-3

-2

-4

5 1-3 -1

1

66

-3

3

 ñåòè ñóùåñòâóåò öèêë îòðèöàòåëüíîé ñòîèìîñòè. Ìíîæåñòâî ðåáåðýòîãî öèêëà

C = (4, 6), (6, 5), (5, 4).Ñòîèìîñòü öèêëà c = −1. Ñëåäîâàòåëüíî, ïåðåðàñïðåäåëÿÿ ïîòîê âäîëüýòîãî öèêëà, íà êàæäîé åäèíèöå ïîòîêà ìîæíî ïîëó÷èòü âûèãðûø âñòîèìîñòè, ðàâíûé 1.

Îïðåäåëèì âåëè÷èíó d, êîòîðàÿ ðàâíà òîé ìàêñèìàëüíîé âåëè÷èíåïîòîêà, êîòîðóþ ìîæíî ïåðåðàñïðåäåëèòü âäîëü íàéäåííîãî öèêëà:

d = min f(4, 6), c(5, 6)− f(5, 6), c(4, 5)− f(4, 5) = 1.

Ïîëó÷èì íîâûé ìàêñèìàëüíûé ïîòîê.

l

l

l

l

l

l½½½>

QQQs ?

-Q

QQ

QQ

QQs½

½½

½½

½½>

?- ³³³³³³1

HHHHHj1

2

3

4

5

6s t

4,4

3,35,4

6,53,3

1,1

1,0 1,12,2

6,5

216

Page 215: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ñòîèìîñòü íîâîãî ìàêñèìàëüíîãî ïîòîêà äîëæíà óìåíüøèòñÿ íà âåëè-÷èíó d∗|c| = 1. Ìàêñèìàëüíûé òåêóùèé ïîòîê èìååò ñòîèìîñòü, ðàâíóþ60.

Ñíîâà ñòðîèì ñåòü S′ ïî ïîòîêó f (ñì. ðèñóíîê íèæå). Â ñåòè S′

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

l

l

l

l

l

l½½½>

QQQs

-Q

QQ

QQ

QQs½

½½

½½

½½>

- ³³³³³³1

HHHHHj1

2

3

4

5

6s t

-2

-1

-3

-2

-4

5 -1-3 -1

1

6

-3

3

?6

3

5.5.3. Ìèíèìàëüíûé ñðåäíèé êîíòóð â îðãðàôå ñ ïîëîæè-òåëüíûìè ñòîèìîñòÿìè äóã

 äèñêðåòíîé îïòèìèçàöèè âåñüìà èíòåðåñíûé ðàçäåë ñîñòàâëÿ-þò çàäà÷è ïîèñêà ïîäìíîæåñòâà çàäàííîãî âèäà, èìåþùåãî ìèíè-ìàëüíûé óñðåäíåííûé âåñ ýëåìåíòà.Ïðèìåð 5.18. Ïðåäïðèíèìàòåëü õî÷åò îðãàíèçîâàòü íåêîòîðóþ ïîñ-ëåäîâàòåëüíîñòü äåéñòâèé ïî óìåíüøåíèþ ñâîèõ ðàñõîäîâ. Ìíîæåñòâîâîçìîæíûõ äåéñòâèé ñîîòâåòñòâóåò äóãàì îðãðàôà, à âåñ äóãè ñîîòâåò-ñòâóåò çàòðàòàì íà ñîîòâåòñòâóþùåå äåéñòâèå. Ïðåäïîëîæèì, ÷òî êàæ-äîå äåéñòâèå âûïîëíÿåòñÿ çà åäèíèöó âðåìåíè. Ïîìîãèòå ïðåäïðèíèìà-òåëþ ìèíèìèçèðîâàòü ðàñõîäû.

Ïóñòü çàäàí âçâåøåííûé îðãðàô G = (V,E), |V | = n, |E| = m ñíåîòðèöàòåëüíîé ìàòðèöåé ñòîèìîñòåé P [n×n] ( p[v, w] ñòîèìîñòüäóãè (v, w)).

Äëÿ íåêîòîðîãî îðèåíòèðîâàííîãî êîíòóðàC =

(vi1 , vi2), (vi2 , vi3), . . . , (vik−1 , vik

), (vik, vi1)

ñòîèìîñòü êîíòóðà ñ ìàòðèöåé ñòîèìîñòåé P åñòü âåëè÷èíà

P (C) =∑

(v,w)∈C

p(v, w),

à ñðåäíÿÿ ñòîèìîñòü êîíòóðà

Pa(C) =P (C)|C| .

217

Page 216: Теория алгоритмов. Котов В.М., Соболевская Е.П

Îïðåäåëåíèå 5.6. Çàäà÷à î ìèíèìàëüíîì ñðåäíåì êîíòóðå â îð-ãðàôå G çàêëþ÷àåòñÿ â íàõîæäåíèè òàêîãî êîíòóðà, ñðåäíÿÿ ñòî-èìîñòü êîòîðîãî ìèíèìàëüíà.

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

Äëÿ îðãðàôà G, íàðÿäó ñ ìàòðèöåé ñòîèìîñòåé P, áóäåì ðàññìàò-ðèâàòü ìàòðèöó ñòîèìîñòåé P x[n×n], ýëåìåíòû êîòîðîé âû÷èñëÿþòñÿïî ïðàâèëó:

px[v, w] = p[v, w]− x.

Çàìåòèì, ÷òî äëÿ ëþáîãî êîíòóðà C îðãðàôà G ñïðàâåäëèâî ñëåäó-þùåå ðàâåíñòâî:

Pa(C) = P xa (C) + x.

Îòêóäà ñëåäóåò, ÷òî çàäà÷è íàõîæäåíèÿ ìèíèìàëüíîãî ñðåäíåãî êîí-òóðà â îðãðàôå G ñ ìàòðèöàìè ñòîèìîñòåé P è P x ýêâèâàëåíòíû.

Ïóñòü m ìèíèìàëüíàÿ ñðåäíÿÿ ñòîèìîñòü êîíòóðà â îðãðàôåG ñ ìàòðèöåé ñòîèìîñòåé P, à Cm ìíîæåñòâî äóã ýòîãî êîíòóðà.Î÷åâèäíî, ÷òî L ≤ m ≤ R, ãäå

L = min(v,w)∈E

p(v, w), R = max(v,w)∈E

p(v, w). (5.4)

Ïðåäïîëîæèì, ÷òî x íåêîòîðîå ÷èñëî, òîãäà ñïðàâåäëèâû ñëå-äóþùèå óòâåðæäåíèÿ:

• äëÿ ëþáîãî çíà÷åíèÿ x < m ñòîèìîñòü ïðîèçâîëüíîãî êîíòóðàY îðãðàôà G áîëüøå íóëÿ, ò. å. P x(Y ) > 0;

• äëÿ ëþáîãî çíà÷åíèÿ x > m ñóùåñòâóåò êîíòóð Y îòðèöàòåëü-íîé ñòîèìîñòè, ò. å. P x(Y ) < 0.

Òîãäà, ïîëàãàåì x = d(L+R)/2e, ãäå çíà÷åíèÿ L è R îïðåäåëåíûïî ôîðìóëàì (5.4). Èñïîëüçóÿ äèõîòîìèþ ïî çíà÷åíèþ x íà îòðåçêå[L,R] (åñëè â ãðàôå G ñóùåñòâóåò êîíòóð îòðèöàòåëüíîé ñòîèìîñòè,òî ïîëàãàåì R = x; åñëè â îðãðàôå G íå ñóùåñòâóåò êîíòóðà îòðèöà-òåëüíîé ñòîèìîñòè, òî ïîëàãàåì L = x), îïðåäåëÿåì òàêîå çíà÷åíèåx∗, ÷òî äëÿ íåãî â îðãðàôå G ñóùåñòâóåò êîíòóð îòðèöàòåëüíîé ñòî-èìîñòè, à äëÿ âåëè÷èíû x∗ − e (ïðè e → 0) êîíòóðà îòðèöàòåëüíîéñòîèìîñòè íå ñóùåñòâóåò.

218

Page 217: Теория алгоритмов. Котов В.М., Соболевская Е.П

Çíà÷åíèå êîíòóðà ìèíèìàëüíîé ñðåäíåé ñòîèìîñòè ïðèíàäëåæèòîòðåçêó [x∗ − e, x∗].

Îòìåòèì, ÷òî åñëè çíà÷åíèå êîíòóðà ìèíèìàëüíîé ñðåäíåé ñòî-èìîñòè åñòü öåëîå ÷èñëî, òî àëãîðèòì äèõîòîìè÷åñêîãî ïîèñêà áóäåòçàâåðøåí íà îòðåçêå [x∗−1, x∗], ïðè÷åì äëÿ çíà÷åíèÿ (x∗−1) â îðãðà-ôå G íå ñóùåñòâóåò êîíòóðà îòðèöàòåëüíîé ñòîèìîñòè, íî ñóùåñòâóåòêîíòóð íóëåâîé ñòîèìîñòè. Èìåííî ýòîò êîíòóð íóëåâîé ñòîèìîñòè èÿâëÿåòñÿ ìèíèìàëüíûì ñðåäíèì êîíòóðîì â ãðàôå, à çíà÷åíèå (x∗−1) ìèíèìàëüíîå ñðåäíåå çíà÷åíèå êîíòóðà.Ïðèìåð 5.19. Äëÿ âçâåøåííîãî îðãðàôà G, êàæäîé äóãå (v, w) êîòî-ðîãî ïîñòàâëåíà â ñîîòâåòñòâèè íåêîòîðàÿ ñòîèìîñòü p(v, w), îïðåäå-ëèòü ìèíèìàëüíûé ñðåäíèé êîíòóð.

±°²¯

±°²¯

±°²¯

±°²¯´

´´

´3 QQ

QQQs

½½

½½

½½=@@

@@@I

6

1

2

3

4

3 2

4

3

7

Ïîëàãàåì ïåðâîíà÷àëüíî L = 2, R = 7, x = 5. Òîãäà ïîëó÷àåì äëÿîðãðàôà ìàòðèöó ñòîèìîñòåé P 5.

±°²¯

±°²¯

±°²¯

±°²¯´

´´

´3 QQ

QQQs

½½

½½

½½=@@

@@@I

6-2 -3

-2

-12

1

2

3

4

 äàííîì îðãðàôå ñóùåñòâóåò êîíòóð îòðèöàòåëüíîé ñòîèìîñòè:

C = (1, 2), (2, 3), (3, 4), (4, 1), P 5(C) = −4.

219

Page 218: Теория алгоритмов. Котов В.М., Соболевская Е.П

Òîãäà ïðîäîëæàåì äèõîòîìè÷åñêèé ïîèñê, ïîëàãàÿ L = 2, R = 5, x = 4.Íèæå èçîáðàæåí îðãðàô ñ ìàòðèöåé ñòîèìîñòåé P 4.

±°²¯

±°²¯

±°²¯

±°²¯´

´´

´3 QQ

QQQs

½½

½½

½½=@@

@@@I

6-2-1

-1

03

1

2

3

4

 îðãðàôå ñóùåñòâóåò êîíòóð îòðèöàòåëüíîé ñòîèìîñòè:

C = (2, 3), (3, 4), (4, 2), P 4(C) = −3.

Ïðîäîëæàåì äèõîòîìè÷åñêèé ïîèñê, ïîëàãàÿ L = 2, R = 4, x = 3. Íèæåèçîáðàæåí îðãðàô ñ ìàòðèöåé ñòîèìîñòåé P 3.

±°²¯

±°²¯

±°²¯

±°²¯´

´´

´3 QQ

QQQs

½½

½½

½½=@@

@@@I

60-1

1

0

4

1

2

3

4

 îðãðàôå íå ñóùåñòâóåò êîíòóðà îòðèöàòåëüíîé ñòîèìîñòè, íî ñóùå-ñòâóåò êîíòóð íóëåâîé ñòîèìîñòè. Ïîýòîìó êîíòóð íóëåâîé ñòîèìîñòè:

C = (2, 3), (3, 4), (4, 2), P 3(C) = 0

ÿâëÿåòñÿ ìèíèìàëüíûì ñðåäíèì êîíòóðîì â îðãðàôå è åãî ñðåäíÿÿ ñòî-èìîñòü ðàâíà 3.

Óïðàæíåíèå. Êàê îáîáùèòü çàäà÷ó î ìèíèìàëüíîì ñðåäíåìêîíòóðå â ñëó÷àå, êîãäà êàæäîé äóãå ñîîòâåòñòâóþò çàòðàòû è äëè-òåëüíîñòü äåéñòâèé?

220

Page 219: Теория алгоритмов. Котов В.М., Соболевская Е.П

5.5.4. Ìèíèìàëüíîå îñòîâíîå äåðåâî ãðàôàÏóñòü G = (V, E) ñâÿçíûé ãðàô, êàæäîìó ðåáðó e ∈ E êîòîðîãî

ïîñòàâëåíà â ñîîòâåòñòâèå ñòîèìîñòü c(e).Îïðåäåëåíèå 5.7. Îñòîâíûì äåðåâîì T ãðàôà G íàçûâàåòñÿ íåî-ðèåíòèðîâàííîå äåðåâî, êîòîðîå ñîäåðæèò âñå âåðøèíû ãðàôà.Îïðåäåëåíèå 5.8. Çàäà÷à î íàèìåíüøåì îñòîâíîì äåðåâå çàêëþ-÷àåòñÿ â ïîñòðîåíèè îñòîâíîãî äåðåâà T ãðàôà G, ñóììàðíàÿ ñòî-èìîñòü ðåáåð êîòîðîãî ìèíèìàëüíà.

Èçâåñòíî íåñêîëüêî ýôôåêòèâíûõ àëãîðèòìîâ ðåøåíèÿ çàäà÷èî íàèìåíüøåì îñòîâíîì äåðåâå, íî âñå îíè èñïîëüçóþò ñëåäóþùèéôàêò.Òåîðåìà 5.4. Ïóñòü (U1, T1), (U2, T2), . . . (Uk, Tk) îñòîâíûé ëåñíà ìíîæåñòâå V , è ïóñòü (v, u) êðàò÷àéøåå èç âñåõ ðåáåð, ó êî-òîðûõ ðîâíî îäèí êîíåö ñîäåðæèòñÿ â U1. Òîãäà ñðåäè âñåõ îñòîâ-íûõ äåðåâüåâ, ñîäåðæàùèõ âñå ðåáðà èç ìíîæåñòâà T =

⋃ki=1 Ti, ñó-

ùåñòâóåò îïòèìàëüíûé îñòîâíîå äåðåâî, ñîäåðæàùåå òàêæå ðåáðî(v, u).

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

Ðàññìîòðèì äâà àëãîðèòìà ïîñòðîåíèÿ ìèíèìàëüíîãî îñòîâíîãîäåðåâà. Êàæäûé èç ðàññìàòðèâàåìûõ àëãîðèòìîâ ïðè ñâîåé ðåàëè-çàöèè èñïîëüçóåò ìíîæåñòâà. Íàïîìíèì, ÷òî îñíîâíûìè îïåðàöèÿìèíàä ìíîæåñòâàìè ÿâëÿþòñÿ:

• ÍÀÉÒÈ(i) ôóíêöèÿ, êîòîðàÿ îïðåäåëÿåò èìÿ ìíîæåñòâà, êî-òîðîìó ïðèíàäëåæèò ýëåìåíò i;

• ÎÁÚÅÄÈÍÈÒÜ(X,Y, Z) ïðîöåäóðà îáúåäèíåíèÿ íåïåðåñåêà-þùèõñÿ ìíîæåñòâ ñ èìåíàìè X è Y â ìíîæåñòâî ñ èìåíåì Z.

Àëãîðèòì 1 (Êðóñêàëà)

1. Âñå ðåáðà e ∈ E ãðàôà G ïîìåùàåì â ñòðóêòóðó äàííûõ êó÷à,ãäå ïðèîðèòåòîì ÿâëÿåòñÿ ñòîèìîñòü ðåáðà.

221

Page 220: Теория алгоритмов. Котов В.М., Соболевская Е.П

2. Êàæäîé âåðøèíå i ∈ V ãðàôà G ñîîòâåòñòâóåò îäíîýëåìåíòíîåìíîæåñòâî. Ïóñòü k êîëè÷åñòâî ìíîæåñòâ íà íåêîòîðîì øàãåàëãîðèòìà (ïåðâîíà÷àëüíî k = n).

3. Ïîëàãàåì ìèíèìàëüíîå îñòîâíîå äåðåâî T ãðàôà G ïóñòûì (T =∅).

4. Ïîêà êîëè÷åñòâî ìíîæåñòâ k áîëüøå åäèíèöû, ïîâòîðÿòü ñëå-äóþùóþ ïîñëåäîâàòåëüíîñòü øàãîâ:

• Ïóñòü (i, j) ∈ E íåêîòîðîå ðåáðî, ïîëó÷åííîå â ðåçóëüòàòåâûïîëíåíèÿ îïåðàöèè óäàëåíèÿ ìèíèìàëüíîãî ýëåìåíòà èçêó÷è.

• Ïîëàãàåìèìÿ1:=ÍÀÉÒÈ(i);èìÿ2:=ÍÀÉÒÈ(j);(ò. å. èìÿ1 è èìÿ2 èìåíà ìíîæåñòâ, êîòîðûì ïðèíàäëå-æàò âåðøèíû i è j).

• Åñëè èìÿ1 6= èìÿ2 (ò. å. âåðøèíû i è j ïðèíàäëåæàò ðàç-íûì ìíîæåñòâàì), òî âûïîëíèòü ñëåäóþùèå äåéñòâèÿ:ÎÁÚÅÄÈÍÈÒÜ(èìÿ1, èìÿ2, èìÿ1);k := k − 1;T := T ∪ (i, j).

Ðàññìîòðèì ãðàô, ïðèâåäåííûé íà ðèñóíêå 5.3. Äëÿ äàííîãî ãðà-ôà ïðèâåäåì ïîñëåäîâàòåëüíîñòü øàãîâ àëãîðèòìà Êðóñêàëà ïîñòðî-åíèÿ ìèíèìàëüíîãî îñòîâíîãî äåðåâà.

èòåðàöèÿ ðåáðî ìíîæåñòâà0 1, 2, 3, 4, 5, 61 (1,3) 1,3, 2, 4, 5, 62 (2,5) 1,3, 2,5, 4, 63 (3,4) 1,3,4, 2,5, 64 (1,2) 1,2,3,4,5, 65 (3,6) 1,2,3,4,5,6

Äåðåâî T = (1, 3), (2, 5), (3, 4), (1, 2), (3, 6) ÿâëÿåòñÿ ìèíèìàëüíûìîñòîâíûì äåðåâîì ãðàôà G.

Îöåíèì òðóäîåìêîñòü àëãîðèòìà Êðóñêàëà. Òàê êàê òðóäîåì-êîñòü ïîñëåäîâàòåëüíîñòè èç m îïåðàöèé ÍÀÉÒÈ è ÎÁÚÅÄÈÍÈÒÜ

222

Page 221: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

¡¡

¡¡

HHHH ¡¡

¡¡

¡¡

¡¡

1

2

3

5

6

@@

@@

@@

@@

±°²¯

©©©©©©©4

2

1

6

2

1

3

4

1

Ðèñ. 5.3. Ïîñòðîåíèå ìèíèìàëüíîãî îñòðâíîãî äåðåâà

åñòü O(m log n) è òðóäîåìêîñòü óäàëåíèÿ m ýëåìåíòîâ èç êó÷è åñòüO(m log n), òî òðóäîåìêîñòü àëãîðèòìà 1 åñòü O(m log n).

Ðàññìîòðèì åùå îäèí àëãîðèòì ïîñòðîåíèÿ ìèíèìàëüíîãî îñòîâ-íîãî äåðåâà, êîòîðûé, â îòëè÷èå îò àëãîðèòìà 1, íå èñïîëüçóåò ñòðóê-òóðó äàííûõ êó÷à.

Àëãîðèòì 2

1. Êàæäîé âåðøèíå i ∈ V ãðàôà G ïîñòàâèì â ñîîòâåòñòâèå îäíî-ýëåìåíòíîå ìíîæåñòâî V Si.  äàëüíåéøåì â êà÷åñòâå èìåí ìíî-æåñòâ V Si ïðîùå âñåãî ðàññìàòðèâàòü èìåíà îò 1 äî n. Ïóñòü k êîëè÷åñòâî íåïóñòûõ ìíîæåñòâ (ïåðâîíà÷àëüíî k = n).

2. Ïîëàãàåì, ÷òî ìèíèìàëüíîå îñòîâíîå äåðåâî ãðàôà G ïóñòîå(T = ∅).

3. Ïîêà êîëè÷åñòâî íåïóñòûõ ìíîæåñòâ áîëüøå åäèíèöû (k>1),âûïîëíÿòü ñëåäóþùóþ ïîñëåäîâàòåëüíîñòü øàãîâ

• Äëÿ êàæäîãî èç ìíîæåñòâ V Si, i = 1, . . . , k îïðåäåëèòü âå-ëè÷èíó ÁËÈÆÀÉØÅÅ(V Si), êîòîðàÿ ïåðâîíà÷àëüíî äëÿêàæäîãî ìíîæåñòâà ìîæåò áûòü âçÿòà êàê ÷èñëî, áîëüøååìàêñèìàëüíîé èç ñòîèìîñòåé ðåáåð ãðàôà G.

• Îïðåäåëèòü äëÿ êàæäîãî ìíîæåñòâà V Si íåêîòîðîå ðåáðîÐÅÁÐÎ(V Si). Ïåðâîíà÷àëüíî âñå ÐÅÁÐÎ(V Si) åñòü ïóñòûåìíîæåñòâà.

223

Page 222: Теория алгоритмов. Котов В.М., Соболевская Е.П

• Äëÿ êàæäîãî ðåáðà (i, j) ∈ E âûïîëíÿòü ñëåäóþùèå äåé-ñòâèÿ:èìÿ1:=ÍÀÉÒÈ(i); èìÿ2:=ÍÀÉÒÈ(j);åñëè c(i, j) <ÁËÈÆÀÉØÅÅ(èìÿ1) òî

ÁËÈÆÀÉØÅÅ(èìÿ1):=c(i, j);ÐÅÁÐÎ(èìÿ1):=(i, j);

åñëè c(i, j) ≤ÁËÈÆÀÉØÅÅ(èìÿ2) òî ÁËÈÆÀÉØÅÅ(èìÿ2):=c(i, j);ÐÅÁÐÎ(èìÿ2):=(i, j);

• Ïîñëå òîãî, êàê ïðîñìîòðåíû âñå ðåáðà, ïîëó÷åí íàáîð ðå-áåð E′= ÐÅÁÐÎ[1], ÐÅÁÐÎ[2], . . . , ÐÅÁÐÎ[n]. Ïðîèçâî-äèì ñëèÿíèå ìíîæåñòâ V Si â ñîîòâåòñòâèè ñ ðåáðàìè èçE′ (äëÿ êàæäîãî (i, j) ∈ E′, åñëè ÍÀÉÒÈ(i) 6= ÍÀÉÒÈ(j),òî ÎÁÚÅÄÈÍÈÒÜ(ÍÀÉÒÈ(i), ÍÀÉÒÈ(j), ÍÀÉÒÈ(i)) èóìåíüøèòü êîëè÷åñòâî íåïóñòûõ ìíîæåñòâ k íà åäèíèöó).

• Ïîëîæèòü ìèíèìàëüíîå îñòîâíîå äåðåâî T = T ∪ E′.

Íèæå ïðèâîäèòñÿ ïîñëåäîâàòåëüíîñòü èòåðàöèé àëãîðèòìà 2 ïî-ñòðîåíèÿ ìèíèìàëüíîãî îñòîâíîãî äåðåâà äëÿ ãðàôà, ïðèâåäåííîãîðàíåå íà ðèñóíêå 5.3. Îòìåòèì, ÷òî íà òðåòüåì øàãå àëãîðèòìà ðåá-ðà áåðóòñÿ â ïðîèçâîëüíîì ïîðÿäêå

Èòåðàöèÿ 1.Ìíîæåñòâà: V S=(1=1, 2=2, 3=3, 4=4, 5=5, 6=6)

(ïåðåä êàæäûì ìíîæåñòâîì óêàçàíî åãî èìÿ). Ìèíèìàëüíîå îñòîâíîåäåðåâî T = ∅.

èìåíà ìíîæåñòâ 1 2 3 4 5 6ÐÅÁÐÎ ∅ ∅ ∅ ∅ ∅ ∅

ÁËÈÆÀÉØÅÅ 7 7 7 7 7 7

c(1, 2) = 2;

èìåíà ìíîæåñòâ 1 2 3 4 5 6ÐÅÁÐÎ (1,2) (1,2) ∅ ∅ ∅ ∅

ÁËÈÆÀÉØÅÅ 2 2 7 7 7 7

c(1, 4) = 3;

224

Page 223: Теория алгоритмов. Котов В.М., Соболевская Е.П

èìåíà ìíîæåñòâ 1 2 3 4 5 6ÐÅÁÐÎ (1,2) (1,2) ∅ (1,4) ∅ ∅

ÁËÈÆÀÉØÅÅ 2 2 7 3 7 7

c(1, 3) = 1;

èìåíà ìíîæåñòâ 1 2 3 4 5 6ÐÅÁÐÎ (1,3) (1,2) (1,3) (1,4) ∅ ∅

ÁËÈÆÀÉØÅÅ 1 2 1 3 7 7

c(2, 5) = 1;

èìåíà ìíîæåñòâ 1 2 3 4 5 6ÐÅÁÐÎ (1,3) (2,5) (1,3) (1,4) (2,5) ∅

ÁËÈÆÀÉØÅÅ 1 1 1 3 1 7

c(3, 5) = 4;c(3, 4) = 1;

èìåíà ìíîæåñòâ 1 2 3 4 5 6ÐÅÁÐÎ (1,3) (2,5) (1,3) (3,4) (2,5) ∅

ÁËÈÆÀÉØÅÅ 1 1 1 1 1 7

c(3, 6) = 2;

èìåíà ìíîæåñòâ 1 2 3 4 5 6ÐÅÁÐÎ (1,3) (2,5) (1,3) (3,4) (2,5) (3,6)

ÁËÈÆÀÉØÅÅ 1 1 1 1 1 2

c(5, 6) = 7;Íàáîð ðåáåð E′ = (1, 3), (2, 5), (1, 3), (3, 4), (2, 5), (3, 6).Îñòîâíîå äåðåâî T = T ∪ E′ = (1, 3), (2, 5), (3, 4), (3, 6).Ìíîæåñòâà V S = (1 = 1, 3, 4, 6, 2 = 2, 5).Êîëè÷åñòâî íåïóñòûõ ìíîæåñòâ k = 2.

Èòåðàöèÿ 2.Ïîñëå ïåðâîé èòåðàöèè ïîëó÷åíû äâà ìíîæåñòâà:

1 = 1, 3, 4, 6, 2 = 2, 5.

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

225

Page 224: Теория алгоритмов. Котов В.М., Соболевская Е.П

èìåíà ìíîæåñòâ 1 2 3 4 5 6ÐÅÁÐÎ ∅ ∅ ∅ ∅ ∅ ∅

ÁËÈÆÀÉØÅÅ 7 7 7 7 7 7

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

c(1, 2) = 2;

èìåíà ìíîæåñòâ 1 2 3 4 5 6ÐÅÁÐÎ (1,2) (1,2) ∅ ∅ ∅ ∅

ÁËÈÆÀÉØÅÅ 2 2 7 7 7 7

c(3, 5) = 4;c(6, 5) = 7;Íàáîð ðåáåð E′ = (1, 2), (1, 2), ∅, ∅, ∅, ∅. Ïðè ýòîì â íàáîðå ðåáåð

E′ ïóñòîå ìíîæåñòâî ñîîòâåòñòâóåò "ôèêòèâíîìó"ìíîæåñòâó.Îñòîâíîå äåðåâî T = T ∪ E′ = (1, 3), (2, 5), (3, 4), (3, 6), (1, 2).Ìíîæåñòâà V S = (1 = 1, 2, 3, 4, 5, 6). Êîëè÷åñòâî íåïóñòûõ ìíî-

æåñòâ k = 1 è àëãîðèòì çàêàí÷èâàåò ðàáîòó. Äåðåâî T ÿâëÿåòñÿ ìè-íèìàëüíûì îñòîâíûì äåðåâîì ãðàôà G.

Îöåíèì òðóäîåìêîñòü àëãîðèòìà 2. Ïîñëå âûïîëíåíèÿ øàãà 3àëãîðèòìà, êàæäîìó èç ìíîæåñòâ áóäåò íàéäåíî áëèæàéøåå, ïîñëå÷åãî ïðîèçîéäåò èõ ñëèÿíèå. Ñëåäîâàòåëüíî, íà êàæäîé èòåðàöèè àë-ãîðèòìà êîëè÷åñòâî ìíîæåñòâ óìåíüøàåòñÿ ïî êðàéíåé ìåðå âäâîå.Òàêèì îáðàçîì, êîëè÷åñòâî èòåðàöèé àëãîðèòìà 2 åñòü O(log n). Òàêêàê òðóäîåìêîñòü îäíîé èòåðàöèè àëãîðèòìà åñòü O(m), òî òðóäîåì-êîñòü àëãîðèòìà 2 ïîñòðîåíèÿ ìèíèìàëüíîãî îñòîâíîãî äåðåâà åñòüO(m log n).

226

Page 225: Теория алгоритмов. Котов В.М., Соболевская Е.П

à ë à â à 6

Ñòðàòåãèè ðåøåíèÿ çàäà÷6.1. Ìåòîä ðàçäåëÿé è âëàñòâóé

Ìåòîä "ðàçäåëÿé è âëàñòâóé"çàêëþ÷àåòñÿ â ñëåäóþùåì

1. Çàäà÷à ðàçáèâàåòñÿ íà íåçàâèñèìûå ïîäçàäà÷è (÷àñòè), êîòîðûåíå ïåðåñåêàþòñÿ (ïîäçàäà÷à ýòî òà æå çàäà÷à, íî ìåíüøåéðàçìåðíîñòè).

2. Êàæäàÿ ïîäçàäà÷à ðåøàåòñÿ îòäåëüíî.

3. Èç îòäåëüíûõ ðåøåíèé ïîäçàäà÷ ñòðîèòñÿ ðåøåíèå èñõîäíîé çà-äà÷è.

Çàìåòèì, ÷òî åñëè áû ïîäçàäà÷è ïåðåñåêàëèñü, ò.å. èìåëè îáùèå ïîä-ïîäçàäà÷è, òî ìåòîä "ðàçäåëÿé è âëàñòâóé"äåëàë áû ëèøíþþ ðàáîòó,ðåøàÿ íåêîòîðûå ïîäïîäçàäà÷è ïî íåñêîëüêó ðàç.

Ïðè ðàçáèåíèè çàäà÷è íà ïîäçàäà÷è ïîëåçåí ïðèíöèï áàëàíñè-ðîâêè, êîòîðûé ïðåäïîëàãàåò, ÷òî çàäà÷à ðàçáèâàåòñÿ íà ïîäçàäà÷èïðèáëèçèòåëüíî ðàâíûõ ðàçìåðíîñòåé, ò.å. èäåò ïîääåðæàíèå ðàâíî-âåñèÿ. Îáû÷íî òàêàÿ ñòðàòåãèÿ ïðèâîäèò ê ðàçäåëåíèþ èñõîäíîé çà-äà÷è ïîïîëàì è îáðàáîòêå êàæäîé èç åãî ÷àñòåé òåì æå ñïîñîáîì äîòåõ ïîð, ïîêà ÷àñòè íå ñòàíóò íàñòîëüêî ìàëûìè, ÷òî èõ ìîæíî áóäåòîáðàáàòûâàòü íåïîñðåäñòâåííî. ×àñòî òàêîé ïðîöåññ ïðèâîäèò ê ëî-ãàðèôìè÷åñêîìó ìíîæèòåëþ â ôîðìóëå, îïèñûâàþùåé òðóäîåìêîñòüàëãîðèòìà. Òàêèì îáðàçîì â îñíîâå òåõíèêè ðàññìàòðèâàåìîãî ìåòî-äà ëåæèò ïðîöåäóðà ðàçäåëåíèÿ. Åñëè ðàçäåëåíèå óäàåòñÿ ïðîèçâåñòèáåç ñëèøêîì áîëüøèõ çàòðàò, òî ìîæåò áûòü ïîñòðîåí ýôôåêòèâíûéàëãîðèòì.Ïðèìåð 6.1. Îòñîðòèðîâàòü ìàññèâ èç n ýëåìåíòîâ, èñïîëüçóþò òåõ-íèêó "ðàçäåëÿé è âëàñòâóé"(ñîðòèðîâêó ñëèÿíèåì è ñîðòèðîâêó Õîàðà).

227

Page 226: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

T (n) = 2T (n/2) + Cn, n > 1

T (1) = 1.

Ïî òåîðåìå î ðåøåíèè ðåêóððåíòíîãî óðàâíåíèÿ ïîëó÷àåì, ÷òî òðó-äîåìêîñòü àëãîðèòìà åñòü O(n log n).

Ïðèíöèï "ðàçäåëÿé è âëàñòâóé"ëåæèò â îñíîâå åùå îäíîãî ðàñ-ñìîòðåííîãî íàìè ðàíåå ýôôåêòèâíîãî àëãîðèòìà ñîðòèðîâêè ìàññè-âà : àëãîðèòìà áûñòðîé ñîðòèðîâêè Õîàðà. Ñëåäóÿ ýòîìó ïðèíöèïó,òàì ïðîèñõîäèò ðàçäåëåíèå ñîðòèðóåìîé ÷àñòè ìàññèâà íà äâà ñåã-ìåíòà. Åñëè ïðè ñîðòèðîâêå ñëèÿíèåì ïðîöåäóðà ðàçäåëåíèÿ ïðîèç-âîäèëàñü ïðîñòûì äåëåíèåì ñîðòèðóåìîé ïîñëåäîâàòåëüíîñòè íà äâàñåãìåíòà, òî â ñîðòèðîâêå Õîàðà îíà ïðîèçâîäèòñÿ òàêèì îáðàçîì,÷òî çíà÷åíèÿ ýëåìåíòîâ èç ïåðâîãî ñåãìåíòà íå áîëüøå êàæäîãî çíà-÷åíèÿ èç âòîðîãî ñåãìåíòà. Ïîñëå âûïîëíåíèÿ ïðîöåäóðû ðàçäåëåíèÿ,äëÿ óïîðÿäî÷åíèÿ èñõîäíîãî ìàññèâà îñòàåòñÿ ëèøü óïîðÿäî÷èòü ñåã-ìåíòû. Íàïîìíèì, ÷òî ðåêóððåíòíîå óðàâíåíèå ýòîãî àëãîðèòìà, âñëó÷àå, êîãäà ïðåäïîëàãàëîñü, ÷òî ñåãìåíòû èìåþò îäèíàêîâîå êîëè-÷åñòâî ýëåìåíòîâ (ïðèíöèï áàëàíñèðîâêè) èìååò ñëåäóþùèé âèä:

T (n) = Cn + 2T (n

2)

è òðóäîåìêîñòü àëãîðèòìà åñòü O(n log n).  õóäøåì ñëó÷àå, êîãäàïðîöåäóðà ðàçäåëåíèÿ ðàçáèâàåò ýëåìåíòû ìàññèâà íà ñåãìåíòû ðàç-ìåðíîñòè n è n − 1 ñîîòâåòñòâåííî (íå âûïîëíÿåòñÿ ïðèíöèï áàëàí-ñèðîâêè), ìû ïîëó÷àëè ðåêóððåíòíîå óðàâíåíèå

T (n) = Cn + T (n− 1) + T (1)

è òðóäîåìêîñòü àëãîðèòìà åñòü O(n2).Òàêèì îáðàçîì, ïðèìåð 6.1. ÿâíî èëëþñòðèðóåò ïðåèìóùåñòâà

ïðèíöèïà áàëàíñèðîâêè â òåõíèêå "ðàçäåëÿé è âëàñòâóé".

228

Page 227: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðèìåð 6.2. Íàéòè ìàêñèìàëüíûé è ìèíèìàëüíûé ýëåìåíò ìàññèâàäâóìÿ ðàçëè÷íûìè àëãîðèòìàìè: èñïîëüçóÿ òåõíèêó "ðàçäåëÿé è âëàñò-âóé"è áåç åå èñïîëüçîâàíèÿ.

Ðàññìîòðèì ñíà÷àëà àëãîðèòì ðåøåíèÿ ïîñòàâëåííîé çàäà÷è, êî-òîðûé íå îñíîâàí íà òåõíèêå "ðàçäåëÿé è âëàñòâóé". Âûáèðàåì èçïåðâûõ äâóõ ýëåìåíòîâ ìàññèâà ìàêñèìàëüíûé è ìèíèìàëüíûé ýëå-ìåíòû (1 ñðàâíåíèå), çàòåì, ïîñëåäîâàòåëüíî ïðîñìàòðèâàÿ ýëåìåí-òû ìàññèâà, ñðàâíèâàåì êàæäûé ïîñëåäóþùèé èç n − 2 ýëåìåíòîâñ ìàêñèìàëüíûì è ìèíèìàëüíûì ýëåìåíòàìè (2(n − 2) ñðàâíåíèÿ).Êîëè÷åñòâî ñðàâíåíèé, êîòîðîå âûïîëíÿåò àëãîðèòì, åñòü

T (n) = 2n− 3.

Âòîðîé àëãîðèòì ðåøåíèÿ ïîñòàâëåííîé çàäà÷è îñíîâàí íà òåõ-íèêå "ðàçäåëÿé è âëàñòâóé". Äåëèì ìàññèâ íà äâå ÷àñòè (áàëàíñèðîâ-êà). Íàõîäèì ìàêñèìàëüíûé è ìèíèìàëüíûé ýëåìåíòû äëÿ êàæäîéèç ÷àñòåé; âûáèðàåì èç ìàêñèìàëüíûõ ýëåìåíòîâ íàèáîëüøèé è èçìèíèìàëüíûõ ýëåìåíòîâ íàèìåíüøèé. Ðåêóððåíòíîå óðàâíåíèå äàí-íîãî àëãîðèòìà èìååò ñëåäóþùèé âèä:

T (n) = 2T (n/2) + 2, n > 2

T (2) = 1.

Ïîñòðîèì òî÷íîå ðåøåíèå äàííîãî óðàâíåíèÿ, èñïîëüçóÿ ìåòîä ïîä-ñòàíîâêè.

g(n) =32n− 2

32n− 2 ≥ 2

(32· n

2− 2

)+ 2 =

32n− 2.

Òàêèì îáðàçîì, ñëîæíîñòü àëãîðèòìà åñòü

T (n) =32n− 2.

Çàìåòèì, ÷òî àñèìïòîòè÷åñêèå ñëîæíîñòè â ïåðâîì è âòîðîì àë-ãîðèòìàõ ñîâïàäàþò è ðàâíû O(n), íî ïðèìåíåíèå òåõíèêè âî âòîðîìàëãîðèòìå äàåò ëó÷øóþ êîíñòàíòó.

Òåõíèêà "ðàçäåëÿé è âëàñòâóé"ÿâëÿåòñÿ ýôôåêòèâíîé, êîãäà çà-äà÷ó ìîæíî ðàçáèòü íà ïîäçàäà÷è çà ðàçóìíîå âðåìÿ, à ñóììàðíûé

229

Page 228: Теория алгоритмов. Котов В.М., Соболевская Е.П

ðàçìåð çàäà÷ íåâåëèê. Îäíàêî, êîãäà ýòî íå óäàåòñÿ (ïðèìåíåíèå òåõ-íèêè ïðèâîäèò ê ýêñïîíåíöèàëüíûì àëãîðèòìàì), òî ïðèìåíÿåòñÿïðèíöèï "äèíàìè÷åñêîãî ïðîãðàììèðîâàíèÿ".

6.2. Äèíàìè÷åñêîå ïðîãðàììèðîâàíèåÑóòü äàííîãî ìåòîäà çàêëþ÷àåòñÿ â ñëåäóþùåì.

1. Çàäà÷à ïîãðóæàåòñÿ â ñåìåéñòâî çàäà÷ òîé æå ïðèðîäû. Äðó-ãèìè ñëîâàìè, ðàçáèâàåòñÿ íà çàâèñèìûå (ìîãóò ïåðåñåêàòüñÿ)ïîäçàäà÷è.

2. Êàæäàÿ ïîäçàäà÷à ðåøàåòñÿ îòäåëüíî îäèí ðàç. Îïòèìàëüíûåçíà÷åíèÿ ðåøåíèé âñåõ ïîäçàäà÷ çàïîìèíàþòñÿ, ÷òî ïîçâîëÿåòíå ðåøàòü ñíîâà óæå âñòðå÷àâøèåñÿ ðàíåå ïîäçàäà÷è.

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

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

Ïîíÿòèå "áîëåå ïðîñòàÿ çàäà÷à"ìîæåò â ðàçíûõ ñëó÷àÿõ ïîíè-ìàòüñÿ ïî ðàçíîìó. Çàäà÷à ìîæåò áûòü ïðîùå èç-çà òîãî, ÷òî îïóùå-íû íåêîòîðûå îãðàíè÷åíèÿ. Îíà ìîæåò áûòü ïðîùå èç-çà òîãî, ÷òîíåêîòîðûå îãðàíè÷åíèÿ äîáàâëåíû. Îäíàêî, êàê áû íè áûëà èçìåíåíàçàäà÷à, åñëè ýòî èçìåíåíèå ïðèâîäèò ê ðåøåíèþ áîëåå ïðîñòîé çàäà-÷è, òî, âîçìîæíî, óäàñòñÿ, îïèðàÿñü íà ýòó áîëåå ïðîñòóþ, ðåøèòü èèñõîäíóþ çàäà÷ó.

Îñíîâíûå îòëè÷èÿ òåõíèêè äèíàìè÷åñêîãî ïðîãðàììèðîâàíèÿ îòòåõíèêè "ðàçäåëÿé è âëàñòâóé"çàêëþ÷àþòñÿ â ñëåäóþùåì:

ðàçäåëÿé è âëàñòâóé äèíàìè÷åñêîå ïðîãðàììèðîâàíèåíåçàâèñèìûå ïîäçàäà÷è çàâèñèìûå ïîäçàäà÷èðåøåíèÿ âñåõ ïîäçàäà÷ ðåøåíèÿ âñåõ ïîäçàäà÷íå çàïîìèíàþòñÿ çàïîìèíàþòñÿ

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

230

Page 229: Теория алгоритмов. Котов В.М., Соболевская Е.П

äà íàçûâàþò òàáëè÷íûì. Îäíà èç êëåòîê òàáëèöû è äàåò îïòèìàëü-íîå ðåøåíèå èñõîäíîé çàäà÷è.Ïðèìåð 6.3. Ðàññìîòðèì çàäà÷ó ïåðåñòàíîâêè ñåãìåíòîâ. Ïóñòü äà-íû ôèêñèðîâàííûå öåëûå ïåðåìåííûå m, n, p, êîòîðûå óäîâëåòâîðÿþòóñëîâèþ: m < n < p. Äàíà ÷àñòü ìàññèâà A[m : p − 1], êîòîðàÿ ðàñ-ñìàòðèâàåòñÿ êàê äâà ñåãìåíòà: b[m : n − 1] è c[n : p − 1]. Íåîáõîäèìîïîìåíÿòü ìåñòàìè äâà ñåãìåíòà ìàññèâà, èñïîëüçóÿ ëèøü ïîñòîÿííûé(íå çàâèñÿùèé îò m,n, p) îáúåì äîïîëíèòåëüíîé ïàìÿòè.

b[m : n− 1] c[n : p− 1]

b[m : n− 1]c[n : p− 1]

m n p− 1

m p− 1

Áîëåå ïðîñòîé çàäà÷åé äëÿ äàííîé çàäà÷è ÿâëÿåòñÿ çàäà÷à ïå-ðåñòàíîâêè äâóõ ñåãìåíòîâ îäèíàêîâîé äëèíû. Ñâåäåì íàøó çàäà÷óïåðåñòàíîâêè ñåãìåíòîâ íåðàâíîé äëèíû ê ðåøåíèþ ýòîé áîëåå ïðî-ñòîé çàäà÷è. Ñíà÷àëà ïðåäïîëîæèì, ÷òî ñåãìåíò b[m : n− 1] áîëüøå,÷åì c[n : p−1]. Ïðåäïîëîæèì, ÷òî ïåðâûé , áîëüøèé ñåãìåíò ñîñòîèòèç äâóõ ñåãìåíòîâ b1 è b2, ïåðâûé èç êîòîðûõ èìååò òó æå äëèíó, ÷òîè c[n : p − 1]. Òîãäà ïåðåñòàâèì ìåñòàìè äâà ñåãìåíòà b1 è c. Äàëååðåøåíèå èñõîäíîé çàäà÷è ñâîäèòñÿ ê ïåðåñòàíîâêå ñåãìåíòîâ b2 è b1.

b1 b2 c

c b2 b1

c b1 b2

-

? ?

? ?

231

Page 230: Теория алгоритмов. Котов В.М., Соболевская Е.П

Òåïåðü ïðåäïîëîæèì, ÷òî ñåãìåíò b[m : n−1] ìåíüøå, ÷åì c[n : p−1].Ïðåäïîëîæèì, ÷òî âòîðîé , áîëüøèé ñåãìåíò ñîñòîèò èç äâóõ ñåãìåí-òîâ c1 è c2, âòîðîé èç êîòîðûõ èìååò òó æå äëèíó, ÷òî è b[n : p − 1].Òîãäà ïåðåñòàâèì ìåñòàìè äâà ñåãìåíòà b è c2. Äàëåå ðåøåíèå èñõîä-íîé çàäà÷è ñâîäèòñÿ ê ïåðåñòàíîâêå ñåãìåíòîâ c2 è c1.

b c1 c2

c2 c1 b

c1 c2 b-

? ?

? ?

 äâóõ ðàññìîòðåííûõ âûøå ñèòóàöèÿõ ñåãìåíòû, êîòîðûå íåîáõîäè-ìî ïåðåñòàâèòü äëÿ ðåøåíèÿ èñõîäíîé çàäà÷è ìîãóò áûòü íåðàâíîéäëèíû, íî ïî êðàéíåé ìåðå îäèí èç íèõ ìåíüøå, ÷åì òîò, êîòîðûéáûë â èñõîäíîé çàäà÷å.Ïðèìåð 6.4. Çàäàíû äâå ñòðîêè ñèìâîëîâ A = a1, a2, . . . , am èB = b1, b2, . . . , bn. Íåîáõîäèìî îïðåäåëèòü d(A,B) ìèíèìàëüíîå÷èñëî âñòàâîê, óäàëåíèé è çàìåí ñèìâîëà, òðåáóåìîå äëÿ ïðåîáðàçîâà-íèÿ îäíîé ñòðîêè â äðóãóþ.

Ðàññìîòðèì âñåâîçìîæíûå ïîäçàäà÷è äàííîé çàäà÷è AiBj , êîòî-ðûå çàêëþ÷àþòñÿ â ïðåîáðàçîâàíèè íåêîòîðîé ñòðîêè a1, a2, . . . , aiâ ñòðîêó b1, b2, . . . , bj, è ïóñòü d[i, j] ìèíèìàëüíîå êîëè÷åñòâî îïå-ðàöèé äëÿ âûïîëíåíèÿ ýòîãî ïðåîáðàçîâàíèÿ.

 òàáëèöå, ïðèâåäåííîé íèæå, óêàçàíû âñå ïîäçàäà÷è ïðè m = 3è n = 4.

j = 0 j = 1 j = 2 j = 3 j = 4

i = 0 b1 b1b2 b1b2b3 b1b2b3b4i = 1 a1 a1b1 a1b1b2 a1b1b2b3 a1b1b2b3b4i = 2 a1a2 a1a2b1 a1a2b1b2 a1a2b1b2b3 a1a2b1b2b3b4i = 3 a1a2a3 a1a2a3b1 a1a2a3b1b2 a1a2a3b1b2b3 a1a2a3b1b2b3b4

Ïîñòðîèì ìàòðèöó D = d[i, j] ðàçìåðà (m + 1) × (n + 1), i =0, . . . , m, j = 0, . . . , n. Î÷åâèäíî, ÷òî â ìàòðèöå d[0, j] = j, j = 0, . . . , n

232

Page 231: Теория алгоритмов. Котов В.М., Соболевская Е.П

òîëüêî âñòàâêè, è êîëè÷åñòâî âñòàâîê ðàâíî äëèíå öåïî÷êè Bj ,d[i, 0] = i, i = 0, . . .m òîëüêî óäàëåíèÿ, è êîëè÷åñòâî óäàëåíèéðàâíî äëèíå öåïî÷êè Ai.

Ðàññìîòðèì ñìåæíûå çàäà÷è:a1a2 . . . ai−1 b1b2 . . . bj−1 a1a2 . . . ai−1 b1b2 . . . bj

a1a2 . . . ai b1b2 . . . bj−1 a1a2 . . . ai b1b2 . . . bj

Ïðåäïîëîæèì, ÷òî îïòèìàëüíûå ðåøåíèÿ çàäà÷Ai−1Bj , Ai−1Bj−1, AiBj−1

óæå ïîñòðîåíû. Ïîêàæåì, êàê ñâÿçàíû ðåøåíèÿ ýòèõ çàäà÷ ñ ðåøå-íèåì çàäà÷è AiBj .

• Åñëè óäàëèòü â çàäà÷å AiBj ýëåìåíò ai, òî ïðèõîäèì ê çàäà÷åAi−1Bj (d[i− 1, j] + 1).

• Ðåøèì çàäà÷ó AiBj−1, ïîñëå ÷åãî äîáàâèì ýëåìåíò bj . Ïîëó÷àåìðåøåíèå çàäà÷è AiBj (d[i, j − 1] + 1).

• Ðåøèì çàäà÷ó Ai−1Bj−1, ïîñëå ÷åãî îäíà îïåðàöèÿ çàìåíû ýëå-ìåíòà ai íà bj , êîòîðàÿ íåîáõîäèìà ëèøü â ñëó÷àå, êîãäà ýòèýëåìåíòû íå ñîâïàäàþò , ïðèâîäèò ê ðåøåíèþ çàäà÷è AiBj (d[i−1, j − 1] + d(ai, bj), ãäå

d(ai, bj) =

0, åñëè ai = bj

1, åñëè ai 6= bj.

Òàêèì îáðàçîì, ïîëó÷àåì ñëåäóþùåå âîçâðàòíîå ñîîòíîøåíèå:d[i, j] = min (d[i− 1, j] + 1; d[i, j − 1] + 1; d[i− 1, j − 1] + d(ai, bj)) .

Ïðèìåð.A : p t s l d d f

B : t s g l d d s

0 1 2 3 4 5 6 70 0 1 2 3 4 5 6 71 1 1 2 3 4 5 6 72 2 1 2 3 4 5 6 73 3 2 1 2 3 4 5 64 4 3 2 2 2 3 4 55 5 4 3 3 3 2 3 46 6 5 4 4 4 3 2 37 7 6 5 5 5 4 3 3

233

Page 232: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïîëó÷àåì, ÷òî d[7, 7] = 3 ìèíèìàëüíîå êîëè÷åñòâî òðåáóåìûõîïåðàöèé. Åñëè çàïîìèíàòü çàäà÷è, íà êîòîðûõ äîñòèãàëñÿ ìèíèìóì,òî ìîæíî âîññòàíîâèòü öåïî÷êó îïåðàöèé.

p t s l d d f → (óäàëåíèå p) t s l d d f;t s l d d f → (âñòàâêà g) t s g l d d f;t s g l d d f → (çàìåíà f) t s g l d d s;

Ïðèìåð 6.5. Çàäàíà ãðóïïà ìàòðèö A1, A2, . . . , As. Êàæäàÿ ìàòðèöàAi çàäàíà ðàçìåðàìè ni, mi, ïðè÷åì mi = ni+1. Îïðåäåëèòü, êàêîå ìè-íèìàëüíîå ÷èñëî îïåðàöèé óìíîæåíèÿ òðåáóåòñÿ äëÿ ïåðåìíîæåíèÿ sìàòðèö, ïðè÷åì ïåðåìíîæàòü ìîæíî ëþáûå äâå ðÿäîì ñòîÿùèå ìàòðè-öû.

Èçâåñòíî, ÷òî äëÿ ïåðåìíîæåíèÿ äâóõ ìàòðèö ðàçìåðîâ [n ×m]è [m× k] òðåáóåòñÿ n ·m · k îïåðàöèé óìíîæåíèÿ. Åñëè A = A1(10×20) ·A2(20×50) ·A3(50×1) ·A4(1×100), òî åñëè ïåðåìíîæàòü ìàòðèöûâ ïîðÿäêå

A1 · (A2 · (A3 ·A4)) ,

òî íåîáõîäèìî 125000 îïåðàöèé, à åñëè èõ ïåðåìíîæàòü

(A1 · (A2 ·A3)) ·A4,

òî íåîáõîäèìî 2200 îïåðàöèé.Åñëè íå èñïîëüçîâàòü ïðèíöèï äèíàìè÷åñêîãî ïðîãðàììèðîâà-

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

Çàìåòèì, ÷òî ïåðåìíîæàòü ãðóïïû ìàòðèö ñ íîìåðàìè îò i äî jìîæíî ðàçëè÷íûìè ñïîñîáàìè: äëÿ íåêîòîðîãî âûáðàííîãî k îò i äîj − 1 ñíà÷àëà ïåðåìíîæàþòñÿ íàèëó÷øèì îáðàçîì ìàòðèöû ñ íîìå-ðàìè îò i äî k (ïîëó÷àåì ìàòðèöó ðàçìåðà ni ×mk), çàòåì ìàòðèöûñ íîìåðàìè îò k + 1 äî j (ïîëó÷àåì ìàòðèöó ðàçìåðà nk+1 × mj) èçàòåì ïåðåìíîæàåì ïîëó÷åííûå íà ïðåäûäóùèõ øàãàõ ìàòðèöû (ïî-ëó÷àåì ìàòðèöó ðàçìåðà ni×mj , òðåáóåìîå êîëè÷åñòâî îïåðàöèé åñòüni · nk+1 ·mj).

Òàêèì îáðàçîì, åñëè îáîçíà÷èòü ÷åðåç F [i, j] ìèíèìàëüíîå êî-ëè÷åñòâî îïåðàöèé äëÿ ïåðåìíîæåíèÿ ìàòðèö ñ íîìåðàìè îò i äî j,

234

Page 233: Теория алгоритмов. Котов В.М., Соболевская Е.П

òî

F [i, j] = mini≤k≤j−1

(F [i, k] + F [k + 1, j] + ni · nk+1 ·mj) , F [i, i] = 0.

Ïðè äèíàìè÷åñêîì ïðîãðàììèðîâàíèè F [i, j] âû÷èñëÿþòñÿ â ïî-ðÿäêå âîçðàñòàíèÿ ðàçíîñòåé èíäåêñîâ, ò. å. íà÷èíàåì ñ âû÷èñëåíèÿF [i, i] äëÿ âñåõ i, çàòåì F [i, i + 1] äëÿ âñåõ i, çàòåì F [i, i + 2] äëÿ âñåõi è ò. ä. Ýòî íåîáõîäèìî äëÿ òîãî, ÷òîáû F [i, k] è F [k +1, j] óæå áûëèâû÷èñëåíû ê ìîìåíòó âû÷èñëåíèÿ F [i, j]. Ðåçóëüòàò ðåøåíèÿ çàäà÷èñîîòâåòñòâóåò âåëè÷èíå F [1, s].

Íèæå ïðèâîäèòñÿ àëãîðèòì ðåøåíèÿ ðàññìàòðèâàåìîé çàäà÷è, âêîòîðîì ïîä âåëè÷èíîé ∞ ïîíèìàåòñÿ ìàêñèìàëüíîå èç âîçìîæíûõîïòèìàëüíûõ ðåøåíèé.

for i := 1 to s do F [i, j] := 0;for p := 1 to s− 1 dofor i := 1 to s− p dokol := ∞;j := i + p;for k := i to j − 1 doif kol > F [i, k] + F [k + 1, j] + ni · nk+1 ·mj thenkol := F [i, k] + F [k + 1, j] + ni · nk+1 ·mj ;

F [i, j] := kol;

Ïðèìåð 6.6. Ðàññìîòðèì çàäà÷ó ðàñïîçíàâàíèÿ îáðàçîâ. Çàäàí òåêñòx, íåîáõîäèìî çàìåíèòü ñëîâî y ýòîãî òåêñòà êàêèì-ëèáî äðóãèì ñëîâîì,ò. å. íåîáõîäèìî íàéòè âõîæäåíèå ñëîâà y â ñòðîêå x (ýòà çàäà÷à ÷àñòîâîçíèêàåò ïðè ðåäàêòèðîâàíèè òåêñòîâ, ïðè êîíòåêñòíîé çàìåíå, ïðèïîèñêå âèðóñà â ïàìÿòè ÝÂÌ).

Ðàññìîòðèì íåêîòîðóþ ñòðîêó x = x1, x2, . . . , xn. Äëÿ äàííîéñòðîêè îïðåäåëèì öåëî÷èñëåííóþ ôóíêöèþ îòêàçîâ F, êîòîðàÿ äëÿíåêîòîðîãî i ≤ n åñòü íàèáîëüøåå ÷èñëî k < i, òàêîå, ÷òî ïåðâûå kñèìâîëîâ ïîäñòðîêè x1, x2, . . . , xi ñîâïàäàþò ñ ïîñëåäíèìè åå k ñèì-âîëàìè:

(x1, x2, . . . , xk) = (xi−k+1, xi−k+2, . . . , xi). (6.1)i 1 2 3 4 5 6 7 8x a b a b c a b aF [i] 0 0 1 2 0 1 2 3

235

Page 234: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ðàññìîòðèì àëãîðèòì ïîñòðîåíèÿ ôóíêöèè îòêàçîâ. Ïðåäïîëî-æèì, ÷òî ôóíêöèÿ îïðåäåëåíà äëÿ i = 1, 2, . . . , k è íåîáõîäèìî îïðå-äåëèòü F [i] äëÿ i = k + 1. Ïóñòü F [k] = k0, ò. å. k0 ïåðâàÿ ïî äëèíåöåïî÷êà, êîòîðóþ õîòåëîñü áû óâåëè÷èòü. Ïîýòîìó ñðàâíèâàåì xk0+1

c xi, è åñëè îíè ñîâïàäàþò, òî ïîëàãàåì F [i] = k0 + 1.  ïðîòèâíîìñëó÷àå íàéäåì âòîðóþ ïî äëèíå öåïî÷êó äëèíû k1 < k0, äëÿ êîòîðîéâûïîëíÿåòñÿ ñâîéñòâî (6.1).

cb dc ck

ck0k1

k0

k1

k0

k1

k1

Èç ðèñóíêà, ïðèâåäåííîãî âûøå, âèäíî, ÷òî k1 = F [k0].Îïèñàííûå äåéñòâèÿ ïîâòîðÿåì äî òåõ ïîð, ïîêà

• íàéäåòñÿ j ≥ 0, äëÿ êîòîðîãî âûïîëíÿåòñÿ ñâîéñòâî (6.1) è èâåðíî ðàâåíñòâî x(kj+1) = xi; òîãäà F [i] = kj + 1.

• kj = 0 è x1 6= xi; òîãäà F [i] = 0.

Àëãîðèòì ïîñòðîåíèÿ ôóíêöèè îòêàçîâ ìîæåò áûòü ðåàëèçîâàíñëåäóþùèì îáðàçîì.

beginF [1] = 0;for i := 2 to n dok := F [i− 1];while (xk+1 6= xi) and (k > 0) do k := F [k];if (k = 0) and (x1 6= xi) then F [i] := 0 else F [i] := k + 1;

end.

Îöåíèì òðóäîåìêîñòü îïèñàííîãî âûøå àëãîðèòìà. Äëÿ íåêîòî-ðîãî i çíà÷åíèå ôóíêöèè îòêàçîâ F [i] ëèáî óâåëè÷èâàåòñÿ ïî ñðàâíå-íèþ ñ ïðåäûäóùèì çíà÷åíèåì F [i−1] íà åäèíèöó, ëèáî óìåíüøàåòñÿ.Ïðè÷åì çíà÷åíèå ôóíêöèè F óìåíüøàåòñÿ (íå îáÿçàòåëüíî íà åäè-íèöó) ñòîëüêî ðàç, ñêîëüêî ðàç îòðàáîòàåò öèêë while. Íî ôóíêöèÿ

236

Page 235: Теория алгоритмов. Котов В.М., Соболевская Е.П

F îãðàíè÷åíà ñíèçó íóëåì, ïîýòîìó îáùåå êîëè÷åñòâî óìåíüøåíèéôóíêöèè (îíî ïðîèñõîäèò, åñëè xF [i−1]+1 6= xi, è íà÷èíàåòñÿ óìåíü-øàòüñÿ ñî çíà÷åíèÿ F [i]) íå ïðåâîñõîäèò îáùåãî êîëè÷åñòâà óâåëè-÷åíèé. Êîëè÷åñòâî óâåëè÷åíèé ôóíêöèè íå ïðåâîñõîäèò n. Ñëåäîâà-òåëüíî, êîëè÷åñòâî óìåíüøåíèé íå áóäåò ïðåâîñõîäèòü n. Òàêèì îáðà-çîì, òðóäîåìêîñòü àëãîðèòìà ðàâíà êîëè÷åñòâó óâåëè÷åíèé è óìåíü-øåíèé ôóíêöèè îòêàçîâ F , ò. å. O(n).

Îïèñàííûé âûøå àëãîðèòì ìîæåò áûòü èñïîëüçîâàí äëÿ ðåøå-íèÿ ñëåäóþùåé çàäà÷è.Ïðèìåð 6.7. Îïðåäåëèòü âõîæäåíèå íåêîòîðîãî ñëîâà y â ñòðîêó x.

Äëÿ ðåøåíèÿ ïîñòàâëåííîé çàäà÷è ñöåïëÿåì ñòðîêè y è x, âñòàâ-ëÿÿ ìåæäó íèìè íåêîòîðûé ðàçäåëèòåëü (y +′ ∗′ + x). Òîò èíäåêñ i,äëÿ êîòîðîãî F [i] = |y|, è äàåò îòâåò (j = F [i]−|y|+1 åñòü íà÷àëüíûéèíäåêñ âõîæäåíèÿ).

×àñòîòà âñòðå÷àåìîñòè äàííîãî ñëîâà â ñòðîêå ðàâíà êîëè÷åñòâóèíäåêñîâ i, äëÿ êîòîðûõ F [i] = |y|.

i 1 2 3 4 5 6 7 8 9 10 11 12 13 14y ∗ x ô ï ì * à á ñ ô ï ì à ô ï ìF [i] 0 0 0 0 0 0 0 1 2 3 0 1 2 3

Åñëè ñòàâèòñÿ çàäà÷à íàéòè â ñòðîêå x ìîùíîñòè n ïîäñòðîêó yìîùíîñòè m, òî ïðèìåíåíèå òåõíèêè äèíàìè÷åñêîãî ïðîãðàììèðîâà-íèÿ ïîçâîëÿåò ïîëó÷èòü àëãîðèòì ñëîæíîñòè O(n + m).

Óïðàæíåíèå. Ðåøèòü îïèñàííóþ âûøå çàäà÷ó, â ïðåäïîëîæå-íèè, ÷òî ñòðîêà y ìîæåò ñîäåðæàòü ñèìâîëû '*' è '?', ãäå '*' ëþáàÿïîäïîñëåäîâàòåëüíîñòü ñèìâîëîâ, à '?' íåêîòîðûé îäèíî÷íûé ñèì-âîë.

6.3. Æàäíûé àëãîðèòìÐàññìîòðåííàÿ â ãëàâå 5 çàäà÷à î ìèíèìàëüíîì îñòîâíîì äåðåâå

îáëàäàåò ôóíäàìåíòàëüíûì ñòðóêòóðíûì ñâîéñòâîì, êîòîðîå ïîçâî-ëÿåò ïîëó÷èòü äëÿ íåå áûñòðîå àëãîðèòìè÷åñêîå ðåøåíèå. Òàêèì æåñâîéñòâîì îáëàäàåò öåëûé êëàññ çàäà÷ îïòèìèçàöèè, èçâåñòíûõ êàêçàäà÷è íà ìàòðîèäàõ. Ñíà÷àëà ââåäåì íåêîòîðûå îïðåäåëåíèÿ.Îïðåäåëåíèå 6.1. Ñèñòåìîé ïîäìíîæåñòâ S = (E, J) íàçûâàåò-ñÿ êîíå÷íîå ìíîæåñòâî E âìåñòå ñ ñåìåéñòâîì J ïîäìíîæåñòâìíîæåñòâà E, êîòîðîå çàìêíóòî îòíîñèòåëüíî âêëþ÷åíèÿ (ò. å.

237

Page 236: Теория алгоритмов. Котов В.М., Соболевская Е.П

åñëè I ∈ J è I ′ ⊆ I, òî I ′ ∈ J). Ýëåìåíòû ñåìåéñòâà J íàçûâàþòñÿíåçàâèñèìûìè.Ïðèìåð 6.8. Ïóñòü çàäàíî êîíå÷íîå ìíîæåñòâî

E = 1, 2, 3, 4

è ñåìåéñòâà ïîäìíîæåñòâ ýòîãî ìíîæåñòâà:

J1 = (2, 3), 2, 3, J2 = (2, 3), (1, 2), 3.

Ñåìåéñòâî J1 ÿâëÿåòñÿ çàìêíóòûì ñåìåéñòâîì ïîäìíîæåñòâ è S =(E, J1) ñèñòåìà ïîäìíîæåñòâ. Ñåìåéñòâî J2 íå ÿâëÿåòñÿ çàìêíóòûì.Îïðåäåëåíèå 6.2. Ïóñòü äëÿ êàæäîãî ýëåìåíòà e ∈ E çàäàí âåñw(e) ≥ 0. Êîìáèíàòîðíàÿ çàäà÷à îïòèìèçàöèè äëÿ ñèñòåìû ïîä-ìíîæåñòâ (E, J) ñîñòîèò â íàõîæäåíèè íåçàâèñèìîãî ïîäìíîæå-ñòâî, êîòîðîå èìååò íàèáîëüøèé îáùèé âåñ.

Âîçíèêàåò âîïðîñ: êàê çàäàâàòü ñèñòåìó ïîäìíîæåñòâ? Ìîæíîïðåäëîæèòü âûïèñûâàòü âñå íåçàâèñèìûå ïîäìíîæåñòâà èç E, èñ-ïîëüçóÿ ïîäõîäÿùåå ïðåäñòàâëåíèå. Îäíàêî òàêîé ñïîñîá ïðåäñòàâ-ëåíèÿ ìîæåò îêàçàòüñÿ î÷åíü íåýôôåêòèâíûì, òàê êàê ñåìåéñòâîïîäìíîæåñòâ J ìîæåò ñîäåðæàòü äî 2|E| ïîäìíîæåñòâ. Ïîýòîìó âñåðàññìàòðèâàåìûå ñèñòåìû ïîäìíîæåñòâ áóäåì ïðåäñòàâëÿòü ñ ïîìî-ùüþ àëãîðèòìà, êîòîðûé ïî äàííîìó ïîäìíîæåñòâó I ìíîæåñòâà Eðåøàåò, âåðíî ëè, ÷òî I ∈ J (ÿâëÿåòñÿ íåçàâèñèìûì).

Íàøà öåëü çàêëþ÷àåòñÿ â ïîèñêå àëãîðèòìîâ ðåøåíèÿ êîìáè-íàòîðíûõ çàäà÷ îïòèìèçàöèè äëÿ íåêîòîðûõ ñèñòåì ïîäìíîæåñòâ.Ðàññìîòðèì ñåé÷àñ îáùóþ ñõåìó "æàäíîãî àëãîðèòìà".

Æàäíûé àëãîðèòì

1. I = ∅.2. Ïîêà E 6= ∅ âûïîëíÿòü ñëåäóþùóþ ïîñëåäîâàòåëüíîñòü øà-

ãîâ:

2.1 ïóñòü e ∈ E è èìååò íàèáîëüøèé âåñ w(e);

2.2 óäàëèòü e èç E, ò. å. E = E\e;2.3 åñëè I ∪ e ∈ J òî I = I ∪ e.

238

Page 237: Теория алгоритмов. Котов В.М., Соболевская Е.П

Íåêîòîðûå êîìáèíàòîðíûå çàäà÷è äëÿ ñèñòåì ïîäìíîæåñòâ ìî-ãóò áûòü ðåøåíû êîððåêòíî (òî÷íî) æàäíûì àëãîðèòìîì, à íåêîòî-ðûå íåò (ïîëó÷àåòñÿ íåêîòîðîå ïðèáëèæåííîå ðåøåíèå).Îïðåäåëåíèå 6.3. Ïóñòü M = (E, J) ñèñòåìà ïîäìíîæåñòâ.Áóäåì íàçûâàòü M ìàòðîèäîì, åñëè æàäíûé àëãîðèòì êîððåêòíîðåøàåò ëþáóþ èíäèâèäóàëüíóþ êîìáèíàòîðíóþ çàäà÷ó äëÿ ñèñòåìûïîäìíîæåñòâ M.

Ïðèâåäåì ñåé÷àñ ïðèìåðû ðàçëè÷íûõ çàäà÷, ñôîðìóëèðóåì èõêàê êîìáèíàòîðíûå çàäà÷è îïòèìèçàöèè äëÿ ñèñòåìû ïîäìíîæåñòâ,çàòåì ïðèìåíèì ê íèì æàäíûé àëãîðèòì è ïîñìîòðèì ðåøàåò ëè îíêîððåêòíî ðàññìàòðèâàåìóþ çàäà÷ó.Ïðèìåð 6.9. Ïóñòü E ìíîæåñòâî ðåáåð ãðàôà G = (V, E), êàæäîìóðåáðó ãðàôà ïðèïèñàí âåñ w(e) è X ñåìåéñòâî ïàðîñî÷åòàíèé ãðàôà.Ñåìåéñòâî X çàìêíóòî îòíîñèòåëüíî âêëþ÷åíèÿ, ò. ê. åñëè èç íåêîòîðî-ãî ïàðîñî÷åòàíèÿ óäàëèòü ðåáðî, òî îíî òàêæå îñòàíåòñÿ ïàðîñî÷åòàíè-åì. Òàêèì îáðàçîì S = (E,X) ñèñòåìà ïîäìíîæåñòâ. Êîìáèíàòîðíàÿçàäà÷à îïòèìèçàöèè äëÿ ñèñòåìû S çàêëþ÷àåòñÿ â íàõîæäåíèè ïàðîñî-÷åòàíèÿ ãðàôà ìàêñèìàëüíîãî âåñà.

Ðàññìîòðèì ñëåäóþùèé ïðèìåð.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

v1

v2 v3

v4

3

1

4

3

¢¢®

BBM

Ïðèìåíèì æàäíûé àëãîðèòì. Îí ïîñòðîèò ñëåäóþùåå ðåøåíèå I =(v1, v4), (v2, v3), êîòîðîå èìååò âåñ w(I) = 5.

Îäíàêî, ïîñòðîåííîå æàäíûì àëãîðèòìîì ðåøåíèå íå ÿâëÿåòñÿîïòèìàëüíûì, ò. ê. ñóùåñòâóåò ìíîæåñòâî I ′ = (v1, v2), (v3, v4), êî-òîðîå èìååò âåñ w(I ′) = 6. Òàê êàê w(I) < w(I ′), òî æàäíûé àëãîðèòìíå ðåøàåò êîððåêòíî çàäà÷ó î ìàêñèìàëüíîì âçâåøåííîì ïàðîñî÷å-òàíèè, à ñëåäîâàòåëüíî ðàññìîòðåííàÿ ñèñòåìà S íå ÿâëÿåòñÿ ìàòðî-èäîì.

239

Page 238: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðèìåð 6.10. Çàäàí îðãðàô G = (V, E), äëÿ êàæäîé äóãè e ∈ îïðå-äåëåí âåñ w(e) ≥ 0. Òðåáóåòñÿ íàéòè â ìíîæåñòâå E òàêîå ïîäìíîæåñòâîB íàèáîëüøåãî âåñà, ÷òî íèêàêèå äâå äóãè èç B íå èìåþò îáùåãî êîíöà.Ñôîðìóëèðóåì äàííóþ çàäà÷ó êàê êîìáèíàòîðíóþ çàäà÷ó îïòèìèçàöèèäëÿ ñèñòåìû ïîäìíîæåñòâ.

Ðàññìîòðèì ñèñòåìó ïîäìíîæåñòâ S = (E, X), òîãäà ïîäìíîæåñòâîB ìíîæåñòâà E âõîäèò â ñåìåéñòâî X òîãäà è òîëüêî òîãäà, êîãäà íèêà-êèå äâå äóãè èç B íå èìåþò îáùåãî êîíöà. Î÷åâèäíî, ÷òî X çàìêíóòî,òàê êàê åñëè èç ìíîæåñòâà äóã, íèêàêèå äâå èç êîòîðûõ íå èìåþò îáùåãîêîíöà, âûáðîñèòü íåêîòîðóþ äóãó, òî îñòàâøèåñÿ ìíîæåñòâî äóã áóäåòóäîâëåòâîðÿòü òðåáóåìîìó ñâîéñòâó (ò. å. íèêàêèå äâå äóãè íå èìåþòîáùåãî êîíöà).

Ðàññìîòðèì ñëåäóþùèé ïðèìåð.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

-

¾?

6

¡¡

¡¡

¡¡µ@@

@@

@@R?

6

v1 v2

v3 v4

10 8

2

3 45

6

- ¾¾

-

1

Ïðèìåíèì æàäíûé àëãîðèòì, êîòîðûé ñòðîèò ñëåäóþùåå ðåøåíèå:

I = (v3, v1), (v1, v3), (v1, v4), (v4, v2).

Ðàññìàòðèâàÿ îðãðàô, êîòîðûé ïðèâåäåí âûøå íà ðèñóíêå, ìîæ-íî çàìåòèòü, ÷òî ïðè âûáîðå äóãè, âõîäÿùåé â âåðøèíó v1 íå èìååòñìûñëà âûáèðàòü íèêàêóþ äðóãóþ äóãó, êðîìå äóãè, èìåþùåé íàè-áîëüøèé âåñ. Ýòî ñâÿçàíî ñ òåì, ÷òî ýòîò âûáîð ëîêàëåí â òîì ñìûñëå,÷òî îí íèêàê íå âëèÿåò íà äîïóñòèìîñòü âûáîðîâ â äðóãèõ âåðøèíàõ.Òî æå ñàìîå ñïðàâåäëèâî äëÿ âñåõ îñòàëüíûõ âåðøèí. Ïîýòîìó â äàí-íîé çàäà÷å æàäíûé àëãîðèòì áóäåò äàâàòü îïòèìàëüíîå ðåøåíèå.

Òàê êàê äàííóþ êîìáèíàòîðíóþ çàäà÷ó æàäíûé àëãîðèòì ðå-øàåò êîððåêòíî, òî ðàññìîòðåííàÿ â ïðèìåðå ñèñòåìà ïîäìíîæåñòâS = (E,X) ÿâëÿåòñÿ ìàòðîèäîì, êîòîðûé íàçûâàþò ìàòðîèäîì ðàç-áèåíèÿ.

240

Page 239: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðèìåð 6.11. Çàäàí ãðàô G = (V, E), äëÿ êàæäîãî ðåáðà e ∈ E îïðå-äåëåí âåñ w(e) ≥ 0. Ðàññìîòðèì â ãðàôå ìíîæåñòâà ðåáåð, êîòîðûå ÿâ-ëÿþòñÿ îáúåäèíåíèÿìè âåðøèííî íåïåðåñåêàþùèõñÿ ïóòåé. Ñåìåéñòâîýòèõ ìíîæåñòâ ðåáåð îáîçíà÷èì ÷åðåç J ( ìíîæåñòâî ðåáåð X ÿâëÿåò-ñÿ íåçàâèñèìûì, ò. å. ïðèíàäëåæèò J , åñëè îíî ÿâëÿåòñÿ îáúåäèíåíèåìâåðøèííî íåïåðåñåêàþùèõñÿ ïóòåé).

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

Ðàññìîòðèì ñëåäóþùèé ïðèìåð. Íà ðèñóíêå a) èçîáðàæåí èñõîä-íûé ãðàô.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

v1 v2

v3 v4 µ´¶³

µ´¶³

µ´¶³

µ´¶³

v1 v2

v3 v4

µ´¶³

µ´¶³

µ´¶³

µ´¶³

v1 v2

v3 v4

SS

SSS%

%%

%

6

6

78

3

ee

ee

%%

%%

7

8

3

JJ

JJJ

6

8

6

a)

b) c)

Ïðèìåíèì æàäíûé àëãîðèòì, ïîëó÷èì ñëåäóþùåå ðåøåíèå (ñì. ðè-ñóíîê b))

I = (v1, v4), (v4, v2), (v2, v3), w(I) = 18.

Äàííîå ðåøåíèå íå ÿâëÿåòñÿ îïòèìàëüíûì, òàê êàê îïòèìàëüíûìÿâëÿåòñÿ ñëåäóþùåå íåçàâèñèìîå ìíîæåñòâî (ñì. ðèñóíîê c)):

I ′ = (v2, v1), (v1, v4), (v4, v3), w(I ′) = 20.

241

Page 240: Теория алгоритмов. Котов В.М., Соболевская Е.П

Äàííûé êîíòðïðèìåð ãîâîðèò î òîì, ÷òî ðàññìîòðåííàÿ ñèñòåìà ïîä-ìíîæåñòâ íå ÿâëÿåòñÿ ìàòðîèäîì.Ïðèìåð 6.12. Çàäàíà (n×m) ìàòðèöà A, ïóñòü E ìíîæåñòâî ñòîëá-öîâ ýòîé ìàòðèöû e1, e2, . . . , em. Òîãäà S = (E, J) ñèñòåìà ïîä-ìíîæåñòâ, ãäå J ñåìåéñòâî ëèíåéíî íåçàâèñèìûõ ìíîæåñòâ ñòîëáöîâìàòðèöû A.

Îêàçûâàåòñÿ, ÷òî æàäíûé àëãîðèòì êîððåêòíî ðåøàåò êîìáè-íàòîðíóþ çàäà÷ó îïòèìèçàöèè, ñâÿçàííóþ ñ ýòîé ñèñòåìîé ïîäìíî-æåñòâ. Ýòîò ôàêò áóäåò ïîëó÷åí ïîçæå, êàê ïðîñòîå ñëåäñòâèå äîêà-çàííîé äàëåå òåîðåìû è ýëåìåíòàðíûõ ôàêòîðîâ èç ëèíåéíîé àëãåá-ðû. Ðàññìîòðåííóþ â äàííîì ïðèìåðå ñèñòåìó ïîäìíîæåñòâ íàçûâà-þò ìàòðè÷íûì ìàòðîèäîì.

Ðàññìîòðåííàÿ íàìè ðàíåå çàäà÷à î ìèíèìàëüíîì îñòîâíîì äåðå-âå òàêæå ðåøàëàñü æàäíûì àëãîðèòìîì. Îäíàêî ýòà çàäà÷à íå ìîæåòáûòü ñôîðìóëèðîâàíà â òåðìèíàõ ñèñòåìû ïîäìíîæåñòâ, ò. ê. åñëèîáîçíà÷èòü ÷åðåç J ñåìåéñòâî îñòîâíûõ äåðåâüåâ íåêîòîðîãî ãðàôà,òî ýòî ñåìåéñòâî íå áóäåò ÿâëÿòüñÿ çàìêíóòûì îòíîñèòåëüíî âêëþ-÷åíèÿ (ëþáîå ïîäìíîæåñòâî ðåáåð îñòîâíîãî äåðåâà óæå íå áóäåò ÿâ-ëÿòüñÿ îñòîâíûì äåðåâîì èñõîäíîãî ãðàôà).

Îäíàêî ñóùåñòâóåò äðóãàÿ çàäà÷à, êîòîðàÿ ïî ñóùåñòâó ìîæåòðàññìàòðèâàòüñÿ êàê çàäà÷à î ìèíèìàëüíîì îñòîâíîì äåðåâå, íî âòî æå âðåìÿ ìîæåò áûòü ñôîðìóëèðîâàíà êàê êîìáèíàòîðíàÿ çàäà÷àîïòèìèçàöèè äëÿ ñèñòåìû ïîäìíîæåñòâ. Ðàññìîòðèì ýòó çàäà÷ó.Ïðèìåð 6.13. Çàäàí ãðàô G = (V, E). Êàæäîìó ðåáðó ãðàôà ïîñòàâ-ëåí â ñîîòâåòñòâèå íåêîòîðûé âåñ w(e) ≥ 0. Òðåáóåòñÿ íàéòè ëåñ àöèêëè÷åñêèé ïîäãðàô ãðàôà G, èìåþùèé ìàêñèìàëüíûé îáùèé âåñ.

Ïðåäïîëîæèì, ÷òî ãðàô ÿâëÿåòñÿ ñâÿçíûì. Òàê êàê âåñà ïîëîæè-òåëüíû, òî ëþáîé îïòèìàëüíûé âåñ ìîæíî ñäåëàòü ìàêñèìàëüíûì ïîâêëþ÷åíèþ, ò. å. îñòîâíûì äåðåâîì ãðàôà G. Êðîìå òîãî, âñå îñòîâ-íûå äåðåâüÿ ãðàôà G èìåþò |V |−1 ðåáåð. Ïîýòîìó ìîæíî ïîñòðîèòüôóíêöèþ ðàññòîÿíèé äëÿ E, ïîëàãàÿ

de = W − w(e), ∀e ∈ E,

ãäåW = max

e∈Ew(e).

Ïðè ýòîì ñóììà ðàññòîÿíèé d(T ) ëþáîãî îñòîâíîãî äåðåâà T áóäåò

242

Page 241: Теория алгоритмов. Котов В.М., Соболевская Е.П

ñâÿçàíà ñ îáùèì âåñîì w(T ) äåðåâà T ñëåäóþùèì ñîîòíîøåíèåìw(T ) = (|V | − 1)×W − d(T ).

Îòñþäà ñðàçó ñëåäóåò, ÷òî ìèíèìàëüíîå îñòîâíîå äåðåâî â ãðàôå Gñ ðàññòîÿíèÿìè d ñîâïàäàåò ñ ëåñîì ìàêñèìàëüíîãî âåñà â ãðàôå G ñâåñàìè w.

Åñëè ãðàô íå ÿâëÿåòñÿ ñâÿçíûì, òî ëåñ ìàêñèìàëüíîãî âåñà âãðàôå G = (V,E) ñ âåñàìè w ÿâëÿåòñÿ îáúåäèíåíèåì ìèíèìàëüíûõîñòîâíûõ äåðåâüåâ äëÿ âñåõ ñâÿçíûõ êîìïîíåíò ãðàôà G ñ ðàññòîÿ-íèÿìè d, ãäå d îïðåäåëÿåòñÿ òàê, êàê îïèñàíî âûøå.

Òàêèì îáðàçîì, çàäà÷è î ìèíèìàëüíîì îñòîâíîì äåðåâå è çàäà÷àî ëåñå ìàêñèìàëüíîãî âåñà ìîæíî ðàññìàòðèâàòü, ïî ñóùåñòâó, êàêîäíó è òó æå çàäà÷ó. Ñëåäóþùàÿ ëåììà ÿâëÿåòñÿ àíàëîãîì îñíîâíîãîñâîéñòâà ìèíèìàëüíîãî îñòîâíîãî äåðåâà.Òåîðåìà 6.1. Ïóñòü (U1, T1), (U2, T2), . . . (Uk, Tk) - îñòîâíûé ëåñíà ìíîæåñòâå V , è ïóñòü [v, u] ðåáðî, èñõîäÿùåå èç U1 è èìåþùååíàèáîëüøèé âåñ. Òîãäà ñðåäè âñåõ ëåñîâ, ñîäåðæàùèõ T =

⋃ki=1 Ti,

ñóùåñòâóåò îïòèìàëüíûé ëåñ, ñîäåðæàùèé òàêæå [v, u].Òàêèì îáðàçîì, çàäà÷ó î ëåñå ìàêñèìàëüíîãî âåñà ìîæíî ðåøèòü,

èñïîëüçóÿ ëþáîé èç äâóõ àëãîðèòìîâ äëÿ ìèíèìàëüíîãî îñòîâíîãîäåðåâà, ðàññìîòðåííûõ â ãëàâå 5.Òåîðåìà 6.2. Æàäíûé àëãîðèòì êîððåêòíî ðåøàåò çàäà÷ó î ëåñåìàêñèìàëüíîãî âåñà.Ïðèìåð 6.14. Ðàññìîòðèì çàäà÷ó ïîñòðîåíèÿ ìèíèìàëüíîãî îñòîâíî-ãî ëåñà äëÿ ãðàôà, èçîáðàæåííîãî íà ðèñóíêå. Êàæäîìó ðåáðó ïîñòàâëåíâ ñîîòâåòñòâèè âåñ w.

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

v1 v2

v3 v4

v5

ZZZ

¿¿

¿¿¡

¡¡

¡¡¡

2

1

5

16

8

63

Äàííàÿ çàäà÷à ýêâèâàëåíòíà çàäà÷å î ìèíèìàëüíîì îñòîâíîì äåðåâåâ ãðàôå, êîòîðûé ïðèâåäåí äàëåå íà ðèñóíêå. Êàæäîìó ðåáðó ãðàôàïîñòàâëåíî â ñîîòâåòñòâèå ðàññòîÿíèå d.

243

Page 242: Теория алгоритмов. Котов В.М., Соболевская Е.П

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

v1 v2

v3 v4

v5

ZZZ

¿¿

¿¿¡

¡¡

¡¡¡

14

15

10

11

0

8

13

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

µ´¶³

µ´¶³

µ´¶³

µ´¶³

µ´¶³

v1 v2

v3 v4

v5

¿¿

¿¿¡

¡¡

¡¡¡

2

16

8

6

Ðàññìîòðåííàÿ â ïðèìåðå 6.13 ñèñòåìà ïîäìíîæåñòâ ÿâëÿåòñÿìàòðîèäîì, êîòîðûé íàçûâàþò ãðàôè÷åñêèì ìàòðîèäîì.

Äîêàæåì ñåé÷àñ îñíîâíóþ òåîðåìó îá ýêâèâàëåíòíûõ îïðåäåëå-íèÿõ ìàòðîèäà.Òåîðåìà 6.3. Ïóñòü M = (E, J) ñèñòåìà ïîäìíîæåñòâ. Òîãäàñëåäóþùèå óòâåðæäåíèÿ ýêâèâàëåíòíû.

1. M ìàòðîèä.

2. Åñëè Ip, Ip+1 ∈ J (íåçàâèñèìûå ïîäìíîæåñòâà), ãäå

|Ip| = p, |Ip+1| = p + 1,

òî ñóùåñòâóåò ýëåìåíò e ∈ Ip+1 − Ip òàêîé, ÷òî Ip

⋃e ∈ J.

3. Åñëè A ⊆ E è I, I ′ ìàêñèìàëüíûå ïî âêëþ÷åíèþ ïîäìíî-æåñòâà ìíîæåñòâà A, òî |I| = |I ′| (ò. å. ìàêñèìàëüíûå ïîâêëþ÷åíèþ íåçàâèñèìûå ïîäìíîæåñòâà ìíîæåñòâà A ÿâëÿ-þòñÿ òàêæå ìàêñèìàëüíûìè è ïî êîëè÷åñòâó ýëåìåíòîâ).

244

Page 243: Теория алгоритмов. Котов В.М., Соболевская Е.П

Äîêàçàòåëüñòâî. 1 ⇒ 2.Ïðåäïîëîæèì, ÷òî M ìàòðîèä, íî óòâåðæäåíèå (2) íå âûïîë-

íÿåòñÿ, ò. å. ñóùåñòâóþò äâà íåçàâèñèìûõ ïîäìíîæåñòâà Ip, Ip+1, ãäå|Ip| = p, |Ip+1| = p + 1, íî íè äëÿ êàêîãî ýëåìåíòà e ∈ Ip+1 − Ip

ìíîæåñòâî Ip

⋃e 6∈ J (ò. å. íå ÿâëÿåòñÿ íåçàâèñèìûì).

Ðàññìîòðèì ñëåäóþùóþ ôóíêöèþ âåñîâ w íà E, êîòîðóþ îïðå-äåëèì ïî ñëåäóþùåìó ïðàâèëó.

w(e) =

p + 2, e ∈ Ip,p + 1, e ∈ Ip+1 − Ip,

0, e 6∈ Ip

⋃Ip+1.

Îöåíèì âåñ ìíîæåñòâ Ip è Ip+1.

w(Ip+1) ≥ (p + 1) ∗ (p + 1) = p2 + 2p + 1 > p(p + 2) = w(Ip).

Òàêèì îáðàçîì ïîëó÷àåì, ÷òî

w(Ip+1) > w(Ip). (6.2)Èç íåðàâåíñòâà (6.2) ñëåäóåò, ÷òî ìíîæåñòâî Ip íå îïòèìàëüíî.

Ïðèìåíèì æàäíûé àëãîðèòì, òàê êàê M ìàòðîèä, òî îí äîëæåíïîñòðîèòü îïòèìàëüíîå ìíîæåñòâî. Äëÿ äàííîé ôóíêöèè âåñîâ îííà÷íåò ñ ýëåìåíòîâ ìíîæåñòâà Ip, ò. ê. ó íèõ ñàìûå áîëüøèå âåñà è âñåèõ âûáåðåò (ò. ê. ìíîæåñòâî Ip íåçàâèñèìî). Ïîñëå ÷åãî îí ïîïûòàåòñÿäîáàâëÿòü ýëåìåíòû èç ìíîæåñòâà Ip+1 − Ip, íî ïî ïðåäïîëîæåíèþòàêèõ ýëåìåíòîâ e íå ñóùåñòâóåò (∀e ∈ Ip+1 − Ip, Ip

⋃e 6∈ J). Çàòåì

îñòàíóòñÿ ëèøü ýëåìåíòû íóëåâîãî âåñà, êîòîðûå íå èçìåíÿò âåñàîïòèìàëüíîãî ìíîæåñòâà, ïîñòðîåííîãî æàäíûì àëãîðèòìîì.

Òàêèì îáðàçîì, æàäíûé àëãîðèòì ïîñòðîèò â êà÷åñòâå îïòèìàëü-íîãî ìíîæåñòâà ìíîæåñòâî I ′, êîòîðîå èìååò òàêîé æå âåñ, ÷òî è ìíî-æåñòâî Ip.

Íî â ñèëó (6.2) âûïîëíÿåòñÿ íåðàâåíñòâî

w(I ′) = w(Ip) < w(Ip+1),

÷òî ïðîòèâîðå÷èò îïòèìàëüíîñòè ìíîæåñòâà I ′, ïîñòðîåííîãî æàä-íûì àëãîðèòìîì. Ïðèõîäèì ê ïðîòèâîðå÷èþ, ñëåäîâàòåëüíî ïðåäïî-ëîæåíèå î òîì, ÷òî íè äëÿ êàêîãî ýëåìåíòà e ∈ Ip+1 − Ip ìíîæåñòâîIp

⋃e 6∈ J íå âåðíî.Òàêèì îáðàçîì, óòâåðæäåíèå (2) òåîðåìû âåðíî.

245

Page 244: Теория алгоритмов. Котов В.М., Соболевская Е.П

2 ⇒ 3.Ïðåäïîëîæèì, ÷òî óòâåðæäåíèå (2) âûïîëíÿåòñÿ. Ïóñòü I, I ′

äâà íåçàâèñèìûõ ìàêñèìàëüíûõ ïî âêëþ÷åíèþ ïîäìíîæåñòâà ìíî-æåñòâà A ⊆ E. Ïðåäïîëîæèì, ÷òî óòâåðæäåíèå (3) òåîðåìû íå âû-ïîëíÿåòñÿ, ò. å.

|I| < |I ′|.Òîãäà îòáðîñèì èç áîëüøåãî ìíîæåñòâà I ′ êîëè÷åñòâî ýëåìåíòîâ, ðàâ-íîå ÷èñëó (|I ′| − |I| − 1). Ïîëó÷èì òàêîå ìíîæåñòâî I ′′ ⊆ I ′ ñ êîëè÷å-ñòâîì ýëåìåíòîâ

|I ′′| = |I ′| − (|I ′| − |I| − 1) = |I|+ 1.

Çàìåòèì, ÷òî ìíîæåñòâî I ′′ ÿâëÿåòñÿ íåçàâèñèìûì ïîäìíîæåñòâîììíîæåñòâà A (ëþáîå ïîäìíîæåñòâî íåçàâèñèìîãî ìíîæåñòâà òàêæåÿâëÿåòñÿ íåçàâèñèìûì).

Òàêèì îáðàçîì èìååì äâà íåçàâèñèìûõ ïîäìíîæåñòâà I, I ′′ ìîù-íîñòè êîòîðûõ îòëè÷àþòñÿ íà 1 è òàê êàê âûïîëíÿåòñÿ óòâåðæäåíèå(2), òî ñóùåñòâóåò ýëåìåíò e ∈ I ′′ − I(e ∈ A) òàêîé, ÷òî I

⋃e ∈ J.

Çàìåòèì, ÷òî I⋃

e ∈ A è ÿâëÿåòñÿ íåçàâèñèìûì ïîäìíîæåñòâîììíîæåñòâà A, íî ïî óñëîâèþ ìíîæåñòâî I ÿâëÿëîñü ìàêñèìàëüíûìïî âêëþ÷åíèþ íåçàâèñèìûì ïîäìíîæåñòâîì ìíîæåñòâà A. Ïðèõî-äèì ê ïðîòèâîðå÷èþ. Ñëåäîâàòåëüíî ñäåëàííîå ïðåäïîëîæåíèå î òîì,÷òî ìîùíîñòü ìíîæåñòâà I ìåíüøå ìîùíîñòè ìíîæåñòâà I ′ íå âåð-íî (àíàëîãè÷íî ïðèõîäèì ê ïðîòèâîðå÷èþ ïðè ïðåäïîëîæåíèè, ÷òîìîùíîñòü ìíîæåñòâà I ′ ìåíüøå ìîùíîñòè ìíîæåñòâà I). Òàêèì îá-ðàçîì |I| = |I ′| è óòâåðæäåíèå (3) òåîðåìû âåðíî.

3 ⇒ 1.Ïðåäïîëîæèì, ÷òî óòâåðæäåíèå (3) âåðíî è ïîêàæåì, ÷òî æàä-

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

Îò ïðîòèâíîãî. Ïóñòü ñóùåñòâóåò òàêàÿ ôóíêöèÿ âåñîâ w(e),∀e ∈E, ÷òî æàäíûé àëãîðèòì ñòðîèò íåçàâèñèìîå ìíîæåñòâî I ∈ J, êîòî-ðîå ìàêñèìàëüíî ïî âêëþ÷åíèþ

I = e1, e2, . . . , ei. òî âðåìÿ, êàê ñóùåñòâóåò äðóãîå íåçàâèñèìîå ìàêñèìàëüíîå ïîâêëþ÷åíèþ ìíîæåñòâî

J = e′1, e′2, . . . , e

′j

246

Page 245: Теория алгоритмов. Котов В.М., Соболевская Е.П

òàêîå, ÷òî

w(J) > w(I). (6.3)Ò. å. ìíîæåñòâî, ïîñòðîåííîå æàäíûì àëãîðèòìîì íå ÿâëÿåòñÿ

îïòèìàëüíûì.Ïðåäïîëîæèì, ÷òî ýëåìåíòû ìíîæåñòâ I è J óïîðÿäî÷åíû òàê,

÷òîw(e1) ≥ w(e2) ≥ . . . ≥ w(ei),

w(e′1) ≥ w(e

′2) ≥ . . . ≥ w(e

′j).

Ó÷èòûâàÿ, ÷òî I, J ∈ J è ÿâëÿþòñÿ ìàêñèìàëüíûìè ïî âêëþ÷åíèþ,òî â ñèëó âûïîëíåíèÿ óòâåðæäåíèÿ (3) òåîðåìû (ïðè E = A) âûïîë-íÿåòñÿ, ÷òî |I| = |J |, ïîýòîìó i = j è ìû ìîæåì ñ÷èòàòü, ÷òî

I = e1, e2, . . . , ei,

J = e′1, e′2, . . . , e

′i.

Ïîêàæåì, ÷òî äëÿ âñåõ m = 1, 2, . . . , i âåðíî íåðàâåíñòâî

w(em) ≥ w(e′m). (6.4)

Òîãäà áóäåò âåðíî, ÷òî w(I) ≥ w(J) è ìû ïðèäåì ê ïðîòèâîðå÷èþñ íåðàâåíñòâîì (6.3).

Äîêàçàòåëüñòâî ïðîâåäåì ïî èíäóêöèè.Ïóñòü m = 1. Íåðàâåíñòâî (6.4) âåðíî, ò. ê. æàäíûé àëãîðèòì

âûáèðàåò âñåãäà ýëåìåíò ñ ñàìûì áîëüøèì âåñîì (w(e1) ≥ w(e′1)).

Ïðåäïîëîæèì, ÷òî íåðàâåíñòâî âûïîëíÿåòñÿ äëÿ m ≤ i− 1, ò. å.

w(es) ≥ w(e′s), ∀s = 1, 2, . . . , i− 1.

Íàì íàäî ïîêàçàòü, ÷òî îíî âåðíî äëÿ m = i, ò. å. ÷òî w(ei) ≥ w(e′i).

Ïóñòü ýòî íå òàê, ò. å.w(ei) < w(e

′i). (6.5)

Ðàññìîòðèì ìíîæåñòâî

A = e ∈ E : w(e) ≥ w(e′i).

Ìíîæåñòâî e1, e2, . . . , ei−1 ìàêñèìàëüíîå ïî âêëþ÷åíèþ íåçàâè-ñèìîå ïîäìíîæåñòâî ìíîæåñòâà A, òàê êàê åñëè áû ñóùåñòâîâàëî

247

Page 246: Теория алгоритмов. Котов В.М., Соболевская Е.П

ìíîæåñòâî e1, e2, . . . , ei−1, e ∈ J è â ñèëó íåðàâåíñòâà (6.5) äîëæíîáûëî áû âûïîëíÿòüñÿ íåðàâåíñòâî w(e) ≥ w(e

′i) > w(ei), òî æàäíûé

àëãîðèòì âçÿë áû íà ñâîåì î÷åðåäíîì øàãå ïðè ïîñòðîåíèè îïòè-ìàëüíîãî ìíîæåñòâà íå ýëåìåíò ei, à ýëåìåíò e. Îäíàêî ñóùåñòâóåòíåçàâèñèìîå ìíîæåñòâî e′1, e

′2, . . . , e

′m ∈ A è èìåþùåå ìîùíîñòü íà 1

áîëüøåå, ÷åì ìíîæåñòâî e1, e2, . . . , ei−1. Ïðèõîäèì ê ïðîòèâîðå÷èþñ âûïîëíåíèåì óòâåðæäåíèÿ (3) òåîðåìû. Ñëåäîâàòåëüíî, íåðàâåí-ñòâî (6.5) íå âûïîëíÿåòñÿ è èíäóêöèè ïî m äîêàçàíà.

Òàêèì îáðàçîì, w(I) ≥ w(J), ÷òî ïðîòèâîðå÷èò ïðåäïîëîæåíèþ(6.3). Ñëåäîâàòåëüíî ïðåäïîëîæåíèå î ñóùåñòâîâàíèè ìíîæåñòâà Jíå âåðíî, ïîýòîìó æàäíûé àëãîðèòì êîððåêòíî ðåøàåò ëþáóþ çàäà÷óíà M , à ñëåäîâàòåëüíî M ìàòðîèä.

Äîêàçàòåëüñòâî òåîðåìû çàâåðøåíî. 2

 ïðèìåðå 6.9 çàäà÷à î ìàêñèìàëüíîì âçâåøåííîì ïàðîñî÷åòàíèèíå ÿâëÿëàñü ìàòðîèäîì, òàê êàê äëÿ íåå íå âûïîëíÿåòñÿ óòâåðæäåíèå3 òåîðåìû: ìàêñèìàëüíûå ïî âêëþ÷åíèþ íåçàâèñèìûå ïîäìíîæåñòâàìíîæåñòâà A ÿâëÿþòñÿ òàêæå ìàêñèìàëüíûìè è ïî êîëè÷åñòâó ýëå-ìåíòîâ. Ìàêñèìàëüíîå ïî âêëþ÷åíèþ ïàðîñî÷åòàíèå íå âñåãäà áóäåòìàêñèìàëüíûì ïî êîëè÷åñòâó ýëåìåíòîâ.Îïðåäåëåíèå 6.4. Ïóñòü M = (E, J) ìàòðîèä è A ⊆ E. Ðàíãîìr(A) ìíîæåñòâà A â M íàçûâàåòñÿ ìîùíîñòü ìàêñèìàëüíûõ ïîâêëþ÷åíèþ íåçàâèñèìûõ ïîäìíîæåñòâ ìíîæåñòâà A. Ìàêñèìàëü-íûå ïî âêëþ÷åíèþ íåçàâèñèìûå ïîäìíîæåñòâ ìíîæåñòâà E íàçû-âàþòñÿ áàçèñàìè.

 ïðèìåðå 6.12 ðàññìîòðåííàÿ ñèñòåìà ÿâëÿëàñü ìàòðè÷íûì ìàò-ðîèäîì, òàê êàê äëÿ íåå âûïîëíÿåòñÿ óòâåðæäåíèå (3) òåîðåìû. Ýòîñëåäóåò èç õîðîøî èçâåñòíîãî ôàêòà ëèíåéíîé àëãåáðû: âñå ìàêñè-ìàëüíûå ëèíåéíî íåçàâèñèìûå ïîäìíîæåñòâà ìíîæåñòâà âåêòîðîâ Eèìåþò îäèíàêîâóþ ìîùíîñòü. Ýòà ìîùíîñòü â ëèíåéíîé àëãåáðå íà-çûâàåòñÿ ðàíãîì ïîäìàòðèöû A, îïðåäåëÿåìîé ìíîæåñòâîì ñòîëáöîâE.

Ìàòðè÷íûå ìàòðîèäû îáðàçóþò áîëåå øèðîêèé êëàññ, ÷åì ãðà-ôè÷åñêèå ìàòðîèäû è ìàòðîèäû ðàçáèåíèÿ. Ìîæíî ïîêàçàòü, ÷òî ëþ-áîé ãðàôè÷åñêèé ìàòðîèä èëè ìàòðîèä ðàçáèåíèÿ ïðåäñòàâèì ìàò-ðè÷íûì ìàòðîèäîì, åñëè ïîäîáðàòü ñîîòâåòñòâóþùóþ ìàòðèöó A íàäíåêîòîðûì ïîëåì K. Îäíàêî ýòî âåðíî íå äëÿ âñåõ ìàòðîèäîâ, ïîýòî-ìó òåîðèÿ ìàòðîèäîâ ÿâëÿåòñÿ ñóùåñòâåííûì îáîáùåíèåì ëèíåéíîéàëãåáðû.

248

Page 247: Теория алгоритмов. Котов В.М., Соболевская Е.П

Îïðåäåëåíèå 6.5. Ïîäìíîæåñòâî D ìíîæåñòâà E, íå âõîäÿùååâ J, íàçûâàåòñÿ çàâèñèìûì. Ìèíèìàëüíîå ïî âêëþ÷åíèþ çàâèñèìîåïîäìíîæåñòâî C â E íàçûâàåòñÿ öèêëîì.Òåîðåìà 6.4. Ïóñòü I ∈ J è e ∈ E. Òîãäà ëèáî I + e ∈ J, ëèáî I + eñîäåðæèò åäèíñòâåííûé öèêë.

Åñëè ìû ðàññìàòðèâàåì ãðàôè÷åñêèé ìàòðîèä, òî öèêëû ìàòðî-èäà ýòî òåîðåòèêî-ãðàôîâûå öèêëû ãðàôà G. Ðàíã ïîäìíîæåñòâà E′

èç E ðàâåí |V | − c(E′), ãäå c(E′) ÷èñëî ñâÿçíûõ êîìïîíåíò ãðàôàG′ = (V, E′).

6.4. Îðãàíèçàöèÿ ïåðåáîðà òîì ñëó÷àå, êîãäà äëÿ ðåøåíèÿ çàäà÷è íå óäàåòñÿ ïðèìåíèòü íè

îäíó èç ðàññìîòðåííûõ ðàíåå ñòðàòåãèé, èñïîëüçóþò àëãîðèòì ïîë-íîãî ïåðåáîðà.

6.4.1. Ïîñòðîåíèå äåðåâà ðåøåíèéÎñíîâíîé ïðèíöèï, íà êîòîðîì áàçèðóþòñÿ ìåòîäû ïîèñêà ñ äå-

ðåâîì ðåøåíèé, ñîñòîèò â ðàçáèåíèè íà÷àëüíîé çàäà÷è P0 íà íåêî-òîðîå ÷èñëî ïîäçàäà÷ P1, P2, . . . , Pk (â öåëîì ïðåäñòàâëÿþùèõ âñþçàäà÷ó P0) ñ ïîñëåäóþùåé ïîïûòêîé ðàçðåøèòü êàæäóþ èç ýòèõ ïîä-çàäà÷. Ýòî ðàçáèåíèå îïèñûâàåòñÿ äåðåâîì íà ðèñóíêå, ïðèâåäåííîìíèæå, ïðè÷åì âåðøèíû èçîáðàæàþò ïîäçàäà÷è.

±°²¯

±°²¯

±°²¯

±°²¯

a a a

%%

%%

%%

¯¯

¯¯

¯

\\

\\

\\

P0

P1 P2 Pk

Âûðàæåíèå "ðàçðåøèòü ïîäçàäà÷ó"ìû ïîíèìàåì òàê: ëèáî íàé-òè îïòèìàëüíîå ðåøåíèå, ëèáî ïîêàçàòü, ÷òî çíà÷åíèå îïòèìàëüíîãîðåøåíèÿ õóæå, ÷åì äëÿ ïîëó÷åííîãî äî ýòîãî íàèëó÷øåãî ðåøåíèÿ,ëèáî ïîêàçàòü, ÷òî ïîäçàäà÷à íå ÿâëÿåòñÿ äîïóñòèìîé.

249

Page 248: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ñìûñë ðàçáèåíèÿ çàäà÷è P0 íà íåêîòîðîå ÷èñëî ïîäçàäà÷ ñîñòî-èò â òîì, ÷òî èëè ýòè ïîäçàäà÷è ïðîùå ðàçðåøèòü, èëè îíè èìåþòìåíüøèé ðàçìåð, èëè îáëàäàþò ñòðóêòóðîé, íå ïðèñóùåé ïåðâîíà-÷àëüíîé çàäà÷å P0. Íî, âîîáùå ãîâîðÿ, âñå åùå ìîæåò îêàçàòüñÿ, ÷òîïîäçàäà÷ó Pi íåëüçÿ ðàçðåøèòü, è ýòà ïîäçàäà÷à ñàìà ðàçáèâàåòñÿ íàíîâûå ïîäçàäà÷è Pi1 , Pi2 , . . . , Pir

, êàê ýòî ïîêàçàíî íà ðèñóíêå. Ýòîðàçáèåíèå (íàçûâàåìîå òàêæå âåòâëåíèåì), ïîâòîðÿåòñÿ äëÿ êàæäîéïîäçàäà÷è, êîòîðàÿ íå ìîæåò áûòü ðàçðåøåíà.

±°²¯

±°²¯

±°²¯

a

%%

%%

%%

\\

\\

\\

P0

P1 Pk±°²¯

a aa a a Pi

±°²¯

±°²¯

±°²¯a a a

¡¡

¡¡

¡

££

££

££

JJ

JJJ

Pi1 Pi2 Pir

Íà ëþáîì ýòàïå ïîëíîå ìíîæåñòâî ïîäçàäà÷, òðåáóþùèõ ðàçðåøåíèÿ,ïðåäñòàâëÿåòñÿ ìíîæåñòâîì êîíöåâûõ âåðøèí (ò. å. âåðøèí ñòåïåíè1) âñåõ öåïåé, èñõîäÿùèõ èç êîðíÿ äåðåâà ðåøåíèé. Êîðåíü ýòîãîäåðåâà èçîáðàæàåò íà÷àëüíóþ çàäà÷ó P0. Ýòè âåðøèíû íàçûâàþòñÿâèñÿ÷èìè âåðøèíàìè, è íà ðèñóíêå, ïðèâåäåííîì ðàíåå ýòî

P1, . . . , Pi−1, Pi1 , Pi2 , . . . , Pir , Pi+1, . . . , Pk.

Åñëè ïîèñê èñ÷åðïàí, òî î÷åâèäíî, ÷òî ìíîæåñòâî ïîäçàäà÷, íàêîòîðûå ðàçáèòà çàäà÷à, äîëæíî ïðåäñòàâëÿòü âñþ çàäà÷ó. Òàêèì îá-ðàçîì, åñëè çàäà÷à Pi ðàçáèòà íà r ïîäçàäà÷ Pi1 , Pi2 , . . . , Pir , òî

Pi1⋃Pi2

⋃. . .

⋃Pir = Pi, (6.6)

ãäå P îáîçíà÷àåò ìíîæåñòâî âñåõ äîïóñòèìûõ ðåøåíèé çàäà÷è P.

250

Page 249: Теория алгоритмов. Котов В.М., Соболевская Е.П

Òàê êàê ñîîòíîøåíèå (6.6) äîëæíî áûòü ïðèìåíåíî ê êàæäîìóðàçáèåíèþ, òî

P0 =⋃Pj,

ãäå Pj âèñÿ÷àÿ âåðøèíà äåðåâà. ñëó÷àÿõ êîãäà òðåáóåòñÿ ïåðåáðàòü âñå ðåøåíèÿ çàäà÷è P0 (à

íå òîëüêî íàéòè îïòèìàëüíîå ðåøåíèå), æåëàòåëüíî óìåòü ïåðåáè-ðàòü ðåøåíèÿ ñ ïîìîùüþ âûøåïðèâåäåííîãî ðàçáèåíèÿ çàäà÷è íàïîäçàäà÷è è ïåðåáèðàòü ðåøåíèÿ êàæäîé èç ýòèõ ïîäçàäà÷.  ýòîìñëó÷àå íóæíî èçáåæàòü äóáëèðîâàíèÿ ïîñòðîåííûõ ðåøåíèé, ò. å.íóæíî ðàçáèâàòü çàäà÷ó Pi íà ïîäçàäà÷è Pi1 , Pi2 , . . . , Pir òàê, ÷òîáû

Pis

⋂Piq

= ∅ (6.7)

äëÿ ëþáûõ äâóõ ïîäçàäà÷ Pisè Piq

, äëÿ êîòîðûõ s 6= q.Ñîîòíîøåíèå (6.7) îïðåäåëÿåò ñîáñòâåííîå ðàçáèåíèå çàäà÷è Pi.

Õîòÿ óñëîâèå (6.7) íå ÿâëÿåòñÿ íåîáõîäèìûì äëÿ ïîëíîöåííîãî ïî-èñêà ñ äåðåâîì ðåøåíèé, îíî òåì íå ìåíåå èìååò áîëüøèå âûãîäû ñâû÷èñëèòåëüíîé òî÷êè çðåíèÿ, òàê êàê

• äëÿ çàäà÷è îïòèìèçàöèè P0 îïòèìàëüíîå ðåøåíèå ÿâëÿåòñÿ ðå-øåíèåì îäíîé è òîëüêî îäíîé ïîäçàäà÷è, ïðåäñòàâëÿåìîé âèñÿ-÷åé âåðøèíîé;

• äëÿ çàäà÷è ïîëíîãî ïåðåáîðà îáúåäèíåíèå ìíîæåñòâ ðåøåíèéïîäçàäà÷, ïðåäñòàâëÿåìûõ âèñÿ÷èìè âåðøèíàìè, äàåò ìíîæå-ñòâî âñåõ ðåøåíèé çàäà÷è P0 áåç äóáëèðîâàíèÿ.

Ñïîñîáû âåòâëåíèÿ

Ðàññìîòðèì çàäà÷ó Pi ñ n ïåðåìåííûìè, â êîòîðîé íåêîòîðàÿïåðåìåííàÿ q ìîæåò ïðèíèìàòü òîëüêî ÷åòûðå âîçìîæíûõ çíà÷åíèÿ,ñêàæåì, a, b, c è d.

Ïîêîìïîíåíòíîå âåòâëåíèå.

Âîçìîæíî ðàçáèåíèå Pi íà ÷åòûðå ïîäçàäà÷è Pi1 , Pi2 , Pi3 , Pi4 ïðè÷åìäëÿ ïîäçàäà÷è Pi1 ìû ïîëàãàåì q = a, äëÿ Pi2 , ïîëàãàåì q = b, äëÿäëÿ Pi3 , ïîëàãàåì q = c è äëÿ äëÿ Pi4 ïîëàãàåì q = d. Êàæäàÿ èç ïîä-çàäà÷ Pi1 , Pi2 , Pi3 , Pi4 ñîäåðæèò n − 1 ïåðåìåííûõ è, ñëåäîâàòåëüíî,äîïóñêàåò áîëåå ïðîñòîå ðåøåíèå, ÷åì çàäà÷à Pi.

251

Page 250: Теория алгоритмов. Котов В.М., Соболевская Е.П

±°²¯

±°²¯

±°²¯

±°²¯

±°²¯

¿¿

¿¿

¿

¤¤¤¤¤

DDDDD

SS

SS

SS

Pi

Pi1 Pi2 Pi3 Pi4

q = a q = b q = c q = d

Ðàçáèåíèå ïî íåêîòîðîìó ïðèçíàêó.

Âîçìîæíî äðóãîå ðàçáèåíèå Pi íà äâå ïîäçàäà÷è Pi1 , Pi2 , ãäå äëÿ Pi1

ìû ïîëàãàåì q = a, à äëÿ Pi2 ïîëàãàåì q 6= a, ò. å. q ðàâíî b, c èëè d.

±°²¯

±°²¯

±°²¯

@@

@@

¿¿

¿¿¿

Pi

Pi1Pi2

q = a q 6= a

Åùå îäíî âîçìîæíîå ðàçáèåíèå Pi íà äâå ïîäçàäà÷è Pi1 , Pi2 , ãäåäëÿ Pi1 ìû ïîëàãàåì q = a èëè b , à äëÿ Pi2 ïîëàãàåì q = c èëè d.

±°²¯

±°²¯

±°²¯

@@

@@

¿¿

¿¿¿

Pi

Pi1Pi2

q ∈ (a, b) q ∈ (c, d)

Âñå âåòâëåíèÿ ÿâëÿþòñÿ äîïóñòèìûìè è óäîâëåòâîðÿþò óñëîâèþ(6.7). Êàêîìó èç íèõ îòäàòü ïðåäïî÷òåíèå - çàâèñèò îò ïðèðîäû ðåøà-åìîé çàäà÷è, ïðè÷åì âîçìîæíîñòè ïåðâûõ äâóõ òèïîâ èñïîëüçóþòñÿ÷àùå îñòàëüíûõ.

6.4.2. Ñïîñîáû îáõîäà äåðåâà ðåøåíèéÈç âûøåñêàçàííîãî âèäíî, ÷òî ëþáàÿ ïîäçàäà÷à, ïðåäñòàâëÿåìàÿâèñÿ÷åé âåðøèíîé è íå ïîääàþùàÿñÿ ðàçðåøåíèþ, ìîæåò áûòü â ëþ-áîé ìîìåíò ðàçáèòà íà ìåíüøèå ïîäçàäà÷è. Íî ñóùåñòâóåò òîëüêî

252

Page 251: Теория алгоритмов. Котов В.М., Соболевская Е.П

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

Ïîèñê ïî øèðèíå(ôðîíòàëüíîå âåòâëåíèå)

Ïðè ïîèñêå ïî øèðèíå âåòâëåíèå ïðîèñõîäèò îò óðîâíÿ ê óðîâíþ, òàê÷òî åñëè íà óðîâíå 1 íà÷àëüíàÿ çàäà÷à P0 ðàçáèâàåòñÿ íà ïîäçàäà÷èP1, P2, . . . , Pk, òî êàæäàÿ èç ýòèõ ïîäçàäà÷ èññëåäóåòñÿ ðàíüøå, ÷åìçàäà÷è óðîâíÿ 2. Çàäà÷è óðîâíÿ 1, êîòîðûå íå ìîãóò áûòü ðàçðåøåíû,ðàçáèâàþòñÿ íà ïîäçàäà÷è óðîâíÿ 2, è îïÿòü âñå îíè èññëåäóþòñÿ äîèññëåäîâàíèÿ êàêîé-ëèáî ïîäçàäà÷è, êîòîðàÿ ìîæåò âîçíèêíóòü íàóðîâíå 3, è ò. ä. Âèä äåðåâà ðåøåíèé ïðè ýòîì òèïå ïîèñêà ïîêàçàííà ðèñóíêå.

c c c c c c c c c c

c c c cs s s s

c c c

c

­­­

\\\

£££

AAA

···

SSS

£££

AAA

¯¯¯

LLL

%%

%

JJJ

%%

%@

@@

!!!!!!

PPPPPPPP¶

¶¶/

Çàäà÷à ðåøåíà

Ïîèñê ïî ãëóáèíå(îäíîñòîðîííåå âåòâëåíèå)

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

253

Page 252: Теория алгоритмов. Котов В.М., Соболевская Е.П

e

e

ee

e

e

ue

e

ee

eee

eTT

TTT

AA

TT

TTT

AAA

­­­

¢¢¢

,,,

¢¢

¥¥

¡¡¡

··

12

3

45

6

78

9

Çàäà÷à ðåøåíàÑëåäóþùåå âåòâëåíèåSSo

¤¤

¡¡µ

6.4.3. Ïðèìåíåíèå ãðàíèöÅñëè çàäà÷à P0 ïîäëåæèò ðåøåíèþ êàê çàäà÷à îïòèìèçàöèè, òî

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

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

Äëÿ âû÷èñëåíèÿ îöåíêè, êàê ïðàâèëî, ðåøàåòñÿ íåêîòîðàÿ îï-òèìèçàöèîííàÿ çàäà÷à ïðîñòîé ñòðóêòóðû, ÿâëÿþùàÿñÿ îöåíî÷íîéäëÿ èñõîäíîé çàäà÷è. Ïðåäïîëîæèì äëÿ ïðîñòîòû, ÷òî èñõîäíàÿ îï-òèìèçàöèîííàÿ çàäà÷à èìååò íåêîòîðóþ öåëåâóþ ôóíêöèþ F (x) èÿâëÿåòñÿ çàäà÷åé íà ìèíèìóì. Îáû÷íî îò îöåíî÷íîé çàäà÷è òðåáóþòâûïîëíåíèÿ ñëåäóþùèõ óñëîâèé:

• åñëè îöåíî÷íàÿ çàäà÷à íå èìååò äîïóñòèìûõ ðåøåíèé, òî è èñ-õîäíàÿ çàäà÷à èõ íå èìååò;

254

Page 253: Теория алгоритмов. Котов В.М., Соболевская Е.П

• îïòèìàëüíîå çíà÷åíèå öåëåâîé ôóíêöèè â èñõîäíîé çàäà÷å íåìåíüøå îïòèìàëüíîãî çíà÷åíèÿ öåëåâîé ôóíêöèè â îöåíî÷íîéçàäà÷å.

Îöåíî÷íàÿ çàäà÷à ìîæåò áûòü ïîëó÷åíà èñêëþ÷åíèåì íåêîòî-ðûõ óñëîâèé, çàäàþùèõ äîïóñòèìóþ îáëàñòü èñõîäíîé çàäà÷è, íà-ïðèìåð óñëîâèé öåëî÷èñëåííîñòè ïåðåìåííûõ, èëè çàìåíîé "ïëîõîéöåëåâîé"ôóíêöèè F (x) ìèíîðàíòîé G(x) ≤ F (X).

Ïðè âûáîðå ñïîñîáà âû÷èñëåíèÿ îöåíêè æåëàòåëüíî, ñ îäíîé ñòî-ðîíû, ÷òîáû îí áûë ïðîñò, à ñ äðóãîé ñòîðîíû, ÷òîáû îöåíêà áûëàêàê ìîæíî áëèæå ê îïòèìàëüíîìó ðåøåíèþ. Ê ñîæàëåíèþ, â áîëü-øèíñòâå ñëó÷àåâ ýòè æåëàíèÿ àíòàãîíèñòè÷íû.

Ââåäåì ïîíÿòèå ðåêîðäà. Äëÿ çàäà÷è ìèíèìèçàöèè ýòî ôóíêöèÿ,êîòîðàÿ íå ìåíüøå îïòèìàëüíîãî çíà÷åíèÿ öåëåâîé ôóíêöèè èñõîä-íîé çàäà÷è è íå áîëüøå çíà÷åíèÿ öåëåâîé ôóíêöèè íà íàèëó÷øåì äî-ïóñòèìîì ðåøåíèè, ñîîòâåòñòâóþùåì âèñÿ÷åé âåðøèíå äåðåâà âåòâ-ëåíèÿ äëÿ äàííîé çàäà÷è. Äîïóñòèìîå ðåøåíèå äëÿ êîòîðîãî çíà÷å-íèå öåëåâîé ôóíêöèè ñîâïàäàåò ñ ðåêîðäîì, íàçûâàåòñÿ ðåêîðäíûì.Ðåêîðä õàðàêòåðèçóåò ïðèáëèæåíèå ê îïòèìàëüíîìó ðåøåíèþ. Ïî-ýòîìó âàæíî óäà÷íî âûáðàòü íà÷àëüíîå ðåêîðäíîå ðåøåíèå. Åãî íà-õîäÿò îáû÷íî ñ ïîìîùüþ ïðèáëèæåííûõ ìåòîäîâ ðåøåíèÿ èñõîäíîéçàäà÷è. Åñëè íå èçâåñòíî íè îäíîãî äîïóñòèìîãî ðåøåíèÿ èñõîäíîéçàäà÷è, òî íå îñòàåòñÿ íè÷åãî äðóãîãî, êàê ïîëîæèòü åãî ðàâíûì áåñ-êîíå÷íîñòè.

Ïðè âû÷èñëåíèè îöåíêè äëÿ íåêîòîðîé ïîäçàäà÷è Pi ìîãóò ñòàòüèçâåñòíûìè äîïóñòèìûå ðåøåíèÿ èñõîäíîé çàäà÷è, ïîýòîìó â ýòîéñèòóàöèè íåîáõîäèìî ñêîððåêòèðîâàòü ñâåäåíèÿ î ðåêîðäå.

Òàêèì îáðàçîì ïîèñê, èñïîëüçóþùèé äåðåâî âåòâëåíèÿ (ìåòîäâåòâåé è ãðàíèö), â ïðîöåññå ïîñëåäîâàòåëüíîãî âåòâëåíèÿ èñõîäíîéçàäà÷è P0 èñêëþ÷àåò òå èç ïîëó÷àåìûõ ïîäçàäà÷ Pi, î êîòîðûõ ñòàëîèçâåñòíî, ÷òî îíè íå ñîäåðæàò äîïóñòèìûõ ðåøåíèé , ëó÷øå ðåêîðä-íîãî. Òàêèì îáðàçîì (äëÿ çàäà÷è ìèíèìèçàöèè), åñëè îêàæåòñÿ, ÷òîíèæíÿÿ ãðàíèöà äëÿ âåðøèíû, ñîîòâåòñòâóþùåé çàäà÷å Pi áîëüøåëèáî ðàâíà, ÷åì âåëè÷èíà íàèëó÷øåãî îòâåòà (ðåêîðäà), ïîëó÷åííîãîðàíåå ïðè ïîèñêå, òî â Pi íåò íåîáõîäèìîñòè ïðîèçâîäèòü äàëüíåé-øåå âåòâëåíèå, òàê êàê â Pi íåò ðåøåíèÿ, ëó÷øåãî, ÷åì òåêóùèéðåêîðä.  ñîîòâåòñòâèè ñ òîëêîâàíèåì òåðìèíà "ðàçðåøåíèå çàäà-÷è"ïîäçàäà÷à Pi îêàæåòñÿ àâòîìàòè÷åñêè ðàçðåøåííîé.

255

Page 254: Теория алгоритмов. Котов В.М., Соболевская Е.П

6.4.4. Ôóíêöèè âåòâëåíèÿÊàê ïðè ïîèñêå ïî ãëóáèíå, òàê è ïðè ïîèñêå ïî øèðèíå âûáîð

î÷åðåäíîé âåðøèíû äëÿ âåòâëåíèÿ íå áûë ïîëíîñòüþ îïðåäåëåí.Ïðè ïîèñêå ïî ãëóáèíå, êîãäà ïîñëå âåòâëåíèÿ çàäà÷à Pi ðàçáè-

âàåòñÿ íà ïîäçàäà÷è Pi1 , Pi2 , . . . , Pir, î÷åðåäíîå âåòâëåíèå, êàê óæå

ãîâîðèëîñü, ïðîèçâîäèòñÿ â îäíîé èç ýòèõ òîëüêî ÷òî ïîðîæäåííûõïîäçàäà÷. Íî ìû íå óêàçàëè, â êàêîé èìåííî, è ëþáàÿ èç íèõ ìîæåòðàññìàòðèâàòüñÿ êàê "ïîñëåäíÿÿ ïîðîæäåííàÿ". Ïðè ïîèñêå ïî øè-ðèíå, êàê óæå áûëî ñêàçàíî, âñå ïîäçàäà÷è äàííîãî óðîâíÿ äîëæíûèññëåäîâàòüñÿ äî èññëåäîâàíèÿ çàäà÷ ñëåäóþùåãî óðîâíÿ, íî íå áûëóêàçàí ïîðÿäîê èõ èññëåäîâàíèÿ.

Ôóíêöèÿ âåòâëåíèÿ ýòî ôóíêöèÿ, êîòîðàÿ ïîçâîëÿåò "âû÷èñ-ëèòü", êàêàÿ èç äîïóñòèìûõ âåðøèí äîëæíà èñïîëüçîâàòüñÿ ïðè ñëå-äóþùåì âåòâëåíèè. Äëÿ âåðøèíû, ñîîòâåòñòâóþùåé ïîäçàäà÷å Pj ,ýòà ôóíêöèÿ ÿâëÿåòñÿ íåêîòîðîé ìåðîé âåðîÿòíîñòè òîãî, ÷òî îïòè-ìàëüíîå ðåøåíèå âñåé çàäà÷è P0 ÿâëÿåòñÿ ðåøåíèåì äëÿ Pj . Ñîâåð-øåííî î÷åâèäíî, ÷òî âåðøèíà, ñîîòâåòñòâóþùàÿ ïîäçàäà÷å ñ áîëüøè-ìè øàíñàìè íà îïòèìàëüíîå ðåøåíèå, äîëæíà ïîëüçîâàòüñÿ ïðàâîìïðåèìóùåñòâåííîãî âûáîðà ïðè î÷åðåäíîì âåòâëåíèè. Ìîæíî óêà-çàòü íåñêîëüêî ýâðèñòè÷åñêèõ ìåð ýòîé âåðîÿòíîñòè, ïðè÷åì îäíà èçïîëåçíûõ ìåð ñâÿçàíà ïðîñòî ñ âû÷èñëåíèåì äëÿ âåðøèí íèæíèõ èëèâåðõíèõ ãðàíèö. Äëÿ òàêîé ìåðû âåðøèíà ñ áîëåå íèçêîé íèæíåé ãðà-íèöåé (äëÿ ñëó÷àÿ ìèíèìèçàöèè) ñ÷èòàåòñÿ èìåþùåé áîëüøóþ âåðî-ÿòíîñòü. Ïîñëå ââåäåíèÿ ïîíÿòèÿ ôóíêöèè âåòâëåíèÿ ñðàçó æå âîç-íèêàåò ìûñëü î äðóãîì òèïå ïîèñêà ñ äåðåâîì ðåøåíèé (â äîïîëíåíèåê îïèñàííûì ðàíåå ïîèñêàì ïî ãëóáèíå è øèðèíå). Ìîæíî èñïîëü-çîâàòü ôóíêöèþ âåòâëåíèÿ è òàê, ÷òîáû îíà ïîëíîñòüþ îïðåäåëÿëàâûáîð ñëåäóþùåé äëÿ âåòâëåíèÿ âåðøèíû. Íàïðèìåð, åñëè çíà÷åíè-ÿìè ôóíêöèè âåòâëåíèÿ ÿâëÿþòñÿ ãðàíèöû âåðøèí (íèæíèå è âåðõ-íèå), êàê óïîìèíàëîñü âûøå, òî âñåãäà ìîæíî ïðîèçâîäèòü âåòâëåíèåâ òîé âèñÿ÷åé âåðøèíå, íèæíÿÿ ãðàíèöà êîòîðîé íàèìåíüøàÿ. Ýòîòòèï ïîèñêà ÿâëÿåòñÿ, âîîáùå ãîâîðÿ, ãèáðèäîì ïîèñêîâ ïî ãëóáèíå èøèðèíå, õîòÿ â ëèòåðàòóðå îí ÷àñòî íàçûâàåòñÿ ïîèñêîì ïî øèðèíå.

256

Page 255: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ëèòåðàòóðà1. Àõî À.Â., Õîïêðîôò Ä.Ý., Óëüìàí Ä.Ä. Ñòðóêòóðû äàííûõ è

àëãîðèòìû: Ó÷åá.ïîñîáèå/ Ïåð. ñ àíãë. Ì.: Èçä. äîì "Âèëüÿìñ",2000. 384 c.

2. Àõî À.Â., Õîïêðîôò Ä.Ý., Óëüìàí Ä.Ä. Ïîñòðîåíèå è àíàëèçâû÷èñëèòåëüíûõ àëãîðèòìîâ. Ì.: Ìèð, 1979. 536 c.

3. Åìåëè÷åâ Â. À., Ìåëüíèêîâ Î. È., Ñàðâàíîâ Â. È., Òûøêåâè÷Ð. È. Ëåêöèè ïî òåîðèè ãðàôîâ. Ì.: Íàóêà, 1990. 383 ñ.

4. Êîâàëåâ Ì. Ì. Äèñêðåòíàÿ îïòèìèçàöèÿ. Ìí.: Èçä. ÁÃÓ, 1977.191 ñ.

5. Êîðìåí Ò., Ëåéçåðñîí ×., Ðèâåñò Ð. Àëãîðèòìû: ïîñòðîåíèå èàíàëèç. Ì.: ÌÖÍÌÎ, 1999. 960 ñ.

6. Êîòîâ Â. Ì., Âîëêîâ È. À., Ëàïî À. È. Ìåòîäû àëãîðèòìèçà-öèè: Ó÷åá. ïîñîáèå äëÿ 9 êëàññà. Ìí.: Íàð. àñâåòà, 1997.

7. Êîòîâ Â. Ì., Ìåëüíèêîâ Î. È. Èíôîðìàòèêà. Ìåòîäû àëãîðèò-ìèçàöèè: Ó÷åá. ïîñîáèå äëÿ 10 11 êëàññà. Ìí.: Íàð. àñâåòà,2000.

8. Êðèñòîôèäåñ Í. Òåîðèÿ ãðàôîâ. Ì.: Ìèð, 1978. 432 ñ.

9. Ëèïñêèé Â. Êîìáèíàòîðèêà äëÿ ïðîãðàììèñòîâ. Ì.: Ìèð, 1988.214 ñ.

10. Ïàïàäèìèòðèó Õ., Ñòàéãëèö Ê. Êîìáèíàòîðíàÿ îïòèìèçàöèÿ:Àëãîðèòìû è ñëîæíîñòü. Ì.: Ìèð, 1971.

11. Weiss M. A.Data structures and algorithm analysis. Benjamin/Cum-mings Publishing Company, 1992. 455 p.

Page 256: Теория алгоритмов. Котов В.М., Соболевская Е.П

Ïðåäìåòíûé óêàçàòåëüÂíåøíÿÿ ñîðòèðîâêà 36

áåçäåéñòâèå êîìïüþòåðà 36ìíîãîêàíàëüíîå ñëèÿíèå 43ñåðèè 37ñëèÿíèå 36õâîñò 37

Ãðàô 59âçâåøåííûé 60ãàìèëüòîíîâ öèêë 59äâóäîëüíîñòü 169äâóäîëüíûé 60, 167êîíòóð 218êðàò÷àéøàÿ öåïü 60, 171ìàêñèìàëüíûé ïîòîê 214ìàòðèöà èíöèäåíòíîñòè 62ìàòðèöà ñìåæíîñòè 61ïàðîñî÷åòàíèå 187, 208ïîäãðàô 60ïîòîê 197ïðîñòàÿ öåïü 59ðåáðî 59ñâÿçíûé 60, 165, 169ñïèñêè ïàð 62ñïèñêè ñìåæíîñòè 63ñòåïåíü âåðøèíû, 59öåïü 59öèðêóëÿöèÿ 206÷àñòè÷íûé 60ýéëåðîâ öèêë 60, 191ýëåìåíòàðíàÿ öåïü 59ýëåìåíòàðíûé öèêë 59

Äåðåâî 642-3 äåðåâî 136ÀÂË 67, 121áèíàðíîå 65áèíàðíîå ïîèñêîâîå 66, 116

èäåàëüíî ñáàëàíñèðîâàííîå 67êîðíåâîå 64êðàñíî-÷åðíîå 145îñòîâíîå 221ïîëíîå áèíàðíîå 66ðàíã âåðøèíû 88, 98ñïîñîáû îáõîäà 67óïîðÿäî÷åííîå 64

Äèíàìè÷åñêîå ïðîãðàììèðîâàíèå230

âîçâðàòíîå ñîîòíîøåíèå 230çàâèñèìûå ïîäçàäà÷è 230

Èíôîðìàöèÿ 3åäèíèöà èçìåðåíèÿ 3ìåðà èíôîðìàöèè 3

Êðàò÷àéøèé ïóòü 171c íå÷åòíûì ÷èñëîì ðåáåð 187àëãîðèòì Äåéêñòðû 174, 177àëãîðèòì Ôëîéäà 181àëãîðèòì Ôîðäà-Áýëìàíà 172

Ìàêñèìàëüíûé ïîòîê 197ìèíèìàëüíîé ñòîèìîñòè 214îáðàòíàÿ äóãà 197ïîìåòêè âåðøèí 197ïðÿìàÿ äóãà 197óâåëè÷èâàþùèé ïóòü 197

Ìàòðîèä 237ãðàôè÷åñêèé 244æàäíûé àëãîðèòì 238ìàòðè÷íûé 242ðàçáèåíèÿ 240ðàíã 248ñèñòåìà ïîäìíîæåñòâ 238öèêë 249

Ìåòîä ðàçäåëÿé è âëàñòâóé 227

258

Page 257: Теория алгоритмов. Котов В.М., Соболевская Е.П

íåçàâèñèìûå ïîäçàäà÷è 227ïðèíöèï áàëàíñèðîâêè 227

Îðãàíèçàöèÿ ïåðåáîðà 249äåðåâî ðåøåíèé 249ïðèìåíåíèå ãðàíèö 254ðåêîðä 255ñïîñîáû âåòâëåíèÿ 251

ïî ïðèçíàêó 252ïîêîìïîíåíòíîå 251

ñïîñîáû îáõîäà 252, 253ôóíêöèÿ âåòâëåíèÿ 256

Îðãðàô 59âçâåøåííûé 60ãàìèëüòîíîâ êîíòóð 59äâóäîëüíûé 60äóãà 59êðàò÷àéøèé ïóòü 60ïîëóñòåïåíü âåðøèíû 59ïðîñòîé ïóòü 59ïóòü 59ñèëüíî ñâÿçíûé 60ýéëåðîâ êîíòóð 60ýëåìåíòàðíûé êîíòóð 59, 218ýëåìåíòàðíûé ïóòü 59

Ïîèñê â ãëóáèíó â ãðàôå 163äâóäîëüíîñòü 167ñâÿçíûå êîìïîíåíòû 165

Ïîèñê â øèðèíó 168îïðåäåëåíèå äâóäîëüíîñòè 169ñâÿçíûå êîìïîíåíòû 169

Ïîëèíîìèàëüíûé àëãîðèòì 6

Ðàçìåðíîñòü çàäà÷è 4Ðåêóððåíòíîå óðàâíåíèå 10

ïîäçàäà÷à 10ïîëíîå 10ïðàâèëüíîå 10

Ðåøåíèå ðåêóððåíòíûõ óðàâíåíèéìåòîä èòåðàöèé 15ìåòîä ðåêóðñèâíûõ äåðåâüåâ

17

ìåòîäû ïîäñòàíîâîê 11îñíîâíàÿ òåîðåìà 19

Ñîðòèðîâêàâíåøíÿÿ 24, 36âíóòðåííÿÿ 24, 25âûáîðîì 27ëåêñèêîãðàôè÷åñêàÿ 56ñ ïîìîùüþ âêëþ÷åíèÿ 26ñ ïîìîùüþ îáìåíîâ 28, 30ñ ïîìîùüþ ðàçäåëåíèÿ 33ñëèÿíèåì 31, 36óñòîé÷èâàÿ 25

Ñòðóêòóðû äàííûõ 45ìàññèâ 45ìíîæåñòâà 68î÷åðåäü 54ïðèîðèòåòíûå î÷åðåäè 78

áèíàðíûå êó÷è 81áèíîìèàëüíûå êó÷è 88êó÷è Ôèáîíà÷÷è 98

ñïèñîê 47ñòåê 53õåø-òàáëèöà 156

Òðóäîåìêîñòüàñèìïòîòè÷åñêàÿ 5â õóäøåì ñëó÷àå 5âðåìåííàÿ 5åìêîñòíàÿ 5ñðåäíÿÿ 5óñðåäíåííàÿ 105

Õåøèðîâàíèå 156çàêðûòîå 159êëàñòåðû 160êîëëèçèÿ 156îòêðûòîå 156ðàâíîìåðíîå 157ñåãìåíò 156õåø-çíà÷åíèå 156õåø-ôóíêöèÿ 156,158

259

Page 258: Теория алгоритмов. Котов В.М., Соболевская Е.П

äåëåíèå ñ îñòàòêîì 158óìíîæåíèå 158

Ýêñïîíåíöèàëüíûé àëãîðèòì 6

260

Page 259: Теория алгоритмов. Котов В.М., Соболевская Е.П

Îãëàâëåíèå

Ãëàâà 1. Ïðîåêòèðîâàíèå è àíàëèç . . . . . . . . . . . . . 31.1. Òðóäîåìêîñòü àëãîðèòìà . . . . . . . . . . . . . . . . . . . . 31.2. Ïîíÿòèå ðåêóððåíòíîãî óðàâíåíèÿ . . . . . . . . . . . . . . . 101.3. Ðåøåíèå ðåêóððåíòíûõ óðàâíåíèé . . . . . . . . . . . . . . . 111.4. Ïðèìåðû ðåêóððåíòíûõ óðàâíåíèé . . . . . . . . . . . . . . 21

Ãëàâà 2. Ñîðòèðîâêà . . . . . . . . . . . . . . . . . . . . . . . . 242.1. Âíóòðåííÿÿ ñîðòèðîâêà . . . . . . . . . . . . . . . . . . . . . 24

2.1.1. Ñîðòèðîâêà ñ ïîìîùüþ âêëþ÷åíèÿ . . . . . . . . . . 262.1.2. Ñîðòèðîâêà âûáîðîì . . . . . . . . . . . . . . . . . . 272.1.3. Ñîðòèðîâêè ñ ïîìîùüþ îáìåíîâ . . . . . . . . . . . . 282.1.4. Ñîðòèðîâêà ñëèÿíèåì . . . . . . . . . . . . . . . . . . 312.1.5. Ñîðòèðîâêà ñ ïîìîùüþ ðàçäåëåíèÿ . . . . . . . . . . 33

2.2. Âíåøíÿÿ ñîðòèðîâêà . . . . . . . . . . . . . . . . . . . . . . 352.2.1. Àëãîðèòì ñîðòèðîâêè ñëèÿíèåì . . . . . . . . . . . . 362.2.2. Ìèíèìèçàöèÿ ïîëíîãî âðåìåíè âûïîëíåíèÿ ñîðòè-

ðîâêè ñëèÿíèåì . . . . . . . . . . . . . . . . . . . . . 42Ãëàâà 3. Ñòðóêòóðû äàííûõ . . . . . . . . . . . . . . . . . . 45

3.1. Ýëåìåíòàðíûå ñòðóêòóðû äàííûõ . . . . . . . . . . . . . . . 453.1.1. Ìàññèâû . . . . . . . . . . . . . . . . . . . . . . . . . . 453.1.2. Ëèíåéíûå ñïèñêè . . . . . . . . . . . . . . . . . . . . 473.1.3. Ñòåêè . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.1.4. Î÷åðåäè . . . . . . . . . . . . . . . . . . . . . . . . . 54

3.2. Ãðàôû. Îñíîâíûå îïðåäåëåíèÿ . . . . . . . . . . . . . . . . 593.3. Äåðåâüÿ. Îñíîâíûå îïðåäåëåíèÿ . . . . . . . . . . . . . . . . 633.4. Ìíîæåñòâà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

3.4.1. Ïðåäñòàâëåíèå ìíîæåñòâ ñ ïîìîùüþ ñïèñêîâ . . . . 693.4.2. Ïðåäñòàâëåíèå ìíîæåñòâ ñ ïîìîùüþ äåðåâüåâ . . . 73

3.5. Ïðèîðèòåòíûå î÷åðåäè . . . . . . . . . . . . . . . . . . . . . . 783.5.1. Áèíàðíûå êó÷è . . . . . . . . . . . . . . . . . . . . . . 783.5.2. Áèíîìèàëüíûå êó÷è . . . . . . . . . . . . . . . . . . . 873.5.3. Êó÷è Ôèáîíà÷÷è . . . . . . . . . . . . . . . . . . . . . 963.5.4. Ïðèìåíåíèå ïðèîðèòåòíûõ î÷åðåäåé . . . . . . . . . 111

Ãëàâà 4. Îðãàíèçàöèÿ ïîèñêà . . . . . . . . . . . . . . . . . 1164.1. Áèíàðíûå ïîèñêîâûå äåðåâüÿ . . . . . . . . . . . . . . . . . . 1164.2. Ñáàëàíñèðîâàííûå äåðåâüÿ . . . . . . . . . . . . . . . . . . . 121

4.2.1. ÀÂË-äåðåâüÿ . . . . . . . . . . . . . . . . . . . . . . . 1214.2.2. 2-3 äåðåâüÿ . . . . . . . . . . . . . . . . . . . . . . . . 1364.2.3. Êðàñíî-÷åðíûå äåðåâüÿ . . . . . . . . . . . . . . . . . 144

261

Page 260: Теория алгоритмов. Котов В.М., Соболевская Е.П

4.3. Õåø-òàáëèöû . . . . . . . . . . . . . . . . . . . . . . . . . . . 1564.3.1. Îòêðûòîå õåøèðîâàíèå . . . . . . . . . . . . . . . . . 1564.3.2. Çàêðûòîå õåøèðîâàíèå . . . . . . . . . . . . . . . . . 159

Ãëàâà 5. Îñíîâíûå àëãîðèòìû íà ãðàôàõ . . . . . . . . 1635.1. Ïîèñê â ãëóáèíó â ãðàôå . . . . . . . . . . . . . . . . . . . . 1635.2. Ïîèñê â øèðèíó â ãðàôå . . . . . . . . . . . . . . . . . . . . . 1685.3. Ïóòè â ãðàôàõ . . . . . . . . . . . . . . . . . . . . . . . . . . 171

5.3.1. Êðàò÷àéøèé ýëåìåíòàðíûé ïóòü . . . . . . . . . . . 1715.3.2. Êðàò÷àéøèå ïóòè (ìàðøðóòû) . . . . . . . . . . . . . 1835.3.3. Êðàò÷àéøåãî ýëåìåíòàðíûé ìàðøðóò ñ íå÷åòíûì

÷èñëîì ðåáåð . . . . . . . . . . . . . . . . . . . . . . . 1865.3.4. Ýéëåðîâ öèêë . . . . . . . . . . . . . . . . . . . . . . . 1895.3.5. Çàäà÷à êèòàéñêîãî ïî÷òàëüîíà . . . . . . . . . . . . . 194

5.4. Ìàêñèìàëüíûé ïîòîê â ãðàôå è åãî ïðèëîæåíèÿ . . . . . . 1965.5. Öèêëû îòðèöàòåëüíîé ñòîèìîñòè ïðè ðåøåíèè ãðàôîâûõ çà-

äà÷ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2075.5.1. Ìàêñèìàëüíîå âçâåøåííîå ïàðîñî÷åòàíèå â äâóäîëü-

íîì ãðàôå . . . . . . . . . . . . . . . . . . . . . . . . . 2085.5.2. Ìàêñèìàëüíûé ïîòîê ìèíèìàëüíîé ñòîèìîñòè . . . 2135.5.3. Ìèíèìàëüíûé ñðåäíèé êîíòóð â îðãðàôå ñ ïîëîæè-

òåëüíûìè ñòîèìîñòÿìè äóã . . . . . . . . . . . . . . . 2175.5.4. Ìèíèìàëüíîå îñòîâíîå äåðåâî ãðàôà . . . . . . . . . 221

Ãëàâà 6. Ñòðàòåãèè ðåøåíèÿ çàäà÷ . . . . . . . . . . . . . 2276.1. Ìåòîä ðàçäåëÿé è âëàñòâóé . . . . . . . . . . . . . . . . . . . 2276.2. Äèíàìè÷åñêîå ïðîãðàììèðîâàíèå . . . . . . . . . . . . . 2306.3. Æàäíûé àëãîðèòì . . . . . . . . . . . . . . . . . . . . . . . . 2376.4. Îðãàíèçàöèÿ ïåðåáîðà . . . . . . . . . . . . . . . . . . . . . . 249

6.4.1. Ïîñòðîåíèå äåðåâà ðåøåíèé . . . . . . . . . . . . . . 2496.4.2. Ñïîñîáû îáõîäà äåðåâà ðåøåíèé . . . . . . . . . . . . 2526.4.3. Ïðèìåíåíèå ãðàíèö . . . . . . . . . . . . . . . . . . . 2546.4.4. Ôóíêöèè âåòâëåíèÿ . . . . . . . . . . . . . . . . . . . 256

Ëèòåðàòóðà . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Ïðåäìåòíûé óêàçàòåëü . . . . . . . . . . . . . . . . . . . . . . 258

262