Ëåêöèÿ 16.

Äîêàçàòåëüñòâî ïðàâèëüíîñòè àëãîðèòìà Äåéêñòðû



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

a) Äëÿ êàæäîãî ïîñåùåííîãî óçëà v dist[v] ÿâëÿåòñÿ íàèìåíüøåé äëèíîé ïóòè îò èñõîäíîé âåðøèíû source äî óçëà v.

b) Äëÿ êàæäîãî íåïîñåùåííîãî óçëà u dist[u] ÿâëÿåòñÿ íàèìåíüøåé äëèíîé ïóòè îò source äî u.


Äîêàçàòåëüñòâî ïî èíäóêöèè ïî ÷èñëó ïîñåùåííûõ óçëîâ.

1) Áàçà: åñëè ïîñåùåí òîëüêî îäèí óçåë (source), dist äëÿ âñåõ íåïîñåùåííûõ óçëîâ ðàâíà äëèíå ðåáðà, èäóùåãî â íèõ èç source, åñëè òàêîå ðåáðî ñóùåñòâóåò, è áåñêîíå÷íîñòè, åñëè òàêîãî ðåáðà íåò.  ýòîì ñëó÷àå

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

2) Äîïóñòèì, ïðåäïîëîæåíèå âåðíî äëÿ n-1 óçëîâ. Ïî àëãîðèòìó Äåéêñòðû n-ûì ïîñåùåííûì óçëîì áóäåò óçåë u, òàêîé, ÷òî çíà÷åíèå dist[u] – íàèìåíüøåå èç âñåõ íåïîñåùåííûõ óçëîâ. Äîêàæåì, ÷òî dist[u] – äëèíà êðàò÷àéøåãî ïóòè îò source äî u.

Áóäåì äîêàçûâàòü îò îáðàòíîãî.

Ïóñòü ñóùåñòâóåò áîëåå êîðîòêèé ïóòü Q îò source äî u: len(Q) < dist[u]. (1)

Ïóñòü y – ïåðâàÿ íåïîñåùåííàÿ âåðøèíà íà ýòîì ïóòè (âîçìîæíî, ýòî u) è x – âåðøèíà íåïîñðåäñòâåííî ïåðåä y íà ýòîì ïóòè.






Òîãäà len(Qx) + len(x,y) <= len(Q) (2), ãäå Qx÷àñòü ïóòè Q îò source äî x, à len(x,y) – äëèíà ðåáðà ìåæäó x è y.

Òàê êàê ïî ïðåäïîëîæåíèþ èíäóêöèè dist[x] – äëèíà êðàò÷àéøåãî ïóòè îò source äî x, òî dist[x] <= len(Qx) (3).

Òàê êàê y – ñìåæíàÿ ñ x (ò.å. ñîåäèíåíà ðåáðîì), òî çíà÷åíèå dist[y] äîëæåí áûòü íàñòðîåíî àëãîðèòìîì: dist[y] <= dist[x] + len(x,y) (4).

Òàê êàê èç âñåõ íåïîñåùåííûõ âåðøèí àëãîðèòì âûáðàë u (âåðøèíà ñ íàèìåíüøèì çíà÷åíèåì dist èç íåïîñåùåííûõ), òî dist[u] <= dist[y] (5).


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


(3) (2) (1) (5) (4)

dist[x] + len(x,y) <= len(Qx) + len(x,y) <= len(Q) < dist[u] <= dist[y] <= dist[x] + len(x,y)


èç êîòîðîé ñëåäóåò, ÷òî:


dist[x] < dist[x],


÷òî îçíà÷àåò, ÷òî ìû ïðèøëè ê ïðîòèâîðå÷èþ.


Áèíàðíûå äåðåâüÿ ïîèñêà



Çàäà÷à. Ïðåâðàòèòü áèíàðíîå áåðåâî ïîèñêà â óïîðÿäî÷åííûé L1-ñïèñîê (ïðîéòè ïî áèíàðíîìó äåðåâó ïîèñêà â ïîðÿäêå âîçðàñòàíèÿ çíà÷åíèé)

ÑÏ L1-ñïèñêà

5. Ïîñòàâèòü óêàçàòåëü â íà÷àëî ñïèñêà === óêàçàòåëü := Íàéòè ìèíèìàëüíûé ýëåìåíò â ïîääåðåâå

6. Ïåðåäâèíóòü óêàçàòåëü âïåðåä === óêàçàòåëü := Ñëåäóþùèé óçåë <âõ: óêàçàòåëü>

7. Ýëåìåíò çà óêàçàòåëåì === óêàçàòåëü.Çíà÷åíèå ýëåìåíòà

8. Âñòàâèòü ýëåìåíò çà óêàçàòåëåì === ??? äëÿ óïîðÿäî÷åííîãî L1-ñïèñêà — íå èìååò ñìûñëà

9. Óäàëèòü ýëåìåíò çà óêàçàòåëåì === ???



Áèíàðíîå äåðåâî ïîèñêà — òàêîå áèíàðíîå äåðåâî, â êîòîðîì çíà÷åíèå â óçëå áîëüøå, ÷åì çíà÷åíèÿ â åãî ëåâîì ïîääåðåâå è ìåíüøå, ÷åì çíà÷åíèå â åãî ïðàâîì ïîääåðåâå.

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

Ïîèñê.

Ïðîöåäóðà Íàéòè çíà÷åíèå<âõ: V>

òåêóùèé óçåë := äåðåâî.êîðåíü

öèêë ïîêà òåêóùèé óçåë íå âûðîæäåí

åñëè òåêóùèé óçåë.çíà÷åíèå == V òî

îòâåò := òåêóùèé óçåë

íàéäåíî := äà

âûéòè èç ïðîöåäóðû

èíà÷å

åñëè òåêóùèé óçåë.çíà÷åíèå > V òî

òåêóùèé óçåë := òåêóùèé óçåë.ëåâûé äî÷åðíèé óçåë

èíà÷å

òåêóùèé óçåë := òåêóùèé óçåë.ïðàâûé äî÷åðíèé óçåë

êîíåö åñëè

êîíåö åñëè

êîíåö öèêëà

îòâåò := òåêóùèé óçåë.ðîäèòåëüñêèé óçåë.çíà÷åíèå

íàéäåíî := íåò

Êîíåö ïðîöåäóðû


Äîáàâëåíèå.

Ïðîöåäóðà Äîáàâèòü ýëåìåíò ê äåðåâó <âõ: V: ýëåìåíò, U: óçåë>

! Äîáàâëÿåì ýëåìåíò V êàê äî÷åðíèé óçåë óçëà U

äåðåâî.ñîçäàòü íîâûé óçåë<âûõ: íîâûé óçåë>

íîâûé óçåë.ëåâûé äî÷åðíèé óçåë := 0

íîâûé óçåë.ïðàâûé äî÷åðíèé óçåë := 0

åñëè U.çíà÷åíèå > V òî

U.ëåâûé äî÷åðíèé óçåë := íîâûé óçåë

èíà÷å

U.ïðàâûé äî÷åðíèé óçåë := íîâûé óçåë

êîíåö åñëè

Êîíåö ïðîöåäóðû


Ïîèñê ìèíèìàëüíîãî

Ïðîöåäóðà Íàéòè ìèíèìàëüíûé ýëåìåíò â ïîääåðåâå <âõ: U: óçåë>

! Íàõîäèì ìèíèìàëüíûé ýëåìåíò ïîääåðåâà ñ êîðíåì â U

òåêóùèé óçåë = U

öèêë ïîêà (òåêóùèé óçåë != 0) è (òåêóùèé óçåë.ëåâûé äî÷åðíèé óçåë != 0)

òåêóùèé óçåë := òåêóùèé óçåë.ëåâûé äî÷åðíèé óçåë

êîíåö öèêëà

îòâåò := òåêóùèé óçåë

Êîíåö ïðîöåäóðû


Ïîèñê ìàêñèìàëüíîãî — àíàëîãè÷íî


Ïðîõîä ïî äåðåâó â ïîðÿäêå âîçðàñòàíèÿ çíà÷åíèé

Ïðîöåäóðà Ñëåäóþùèé óçåë<âõ: óçåë>

åñëè óçåë.ïðàâûé äî÷åðíèé óçåë != 0 òî

îòâåò := íàéòè ìèíèìàëüíûé ýëåìåíò<âõ: óçåë> (1)

èíà÷å

åñëè óçåë == óçåë.ðîäèòåëüñêèé óçåë.ëåâûé äî÷åðíèé óçåë òî

îòâåò := óçåë.ðîäèòåëüñêèé óçåë (2)

èíà÷å

öèêë ïîêà óçåë == óçåë.ðîäèòåëüñêèé óçåë.ïðàâûé äî÷åðíèé óçåë âûïîëíÿòü

óçåë := óçåë.ðîäèòåëüñêèé óçåë

êîíåö öèêëà

óòâåðæäåíèå: óçåë — ëåâûé äî÷åðíèé óçåë ñâîåãî ðîäèòåëüñêîãî óçëà

îòâåò := óçåë.ðîäèòåëüñêèé óçåë (3)

êîíåö åñëè

êîíåö åñëè

Êîíåö ïðîöåäóðû


(2) (1) (2) (3) (1) (2) (1)

-2 → 3 → 4 → 6 → 10 → 12 → 17 → 18