מבני נתונים ואלגוריתמים - מחברת קורס/גרפים/אלגוריתם Union-Find/תרגילים/הוכחת נכונות Connected-Components/תשובה
נוכיח שאם ו באותו רכיב קשירות, אז Find-Set(u) == Find-Set(v)
.
הוכחה: ההוכחה היא באינדוקציה על מרחק המסלול הקצר ביותר בין שני הצמתים.
(בסיס האינדוקציה) אם המרחק הוא 0, אז מדובר באותו צומת. ברור שיתקיים Find-Set(u) == Find-Set(u)
.
(מעבר האינדוקציה) נניח שהטענה נכונה עבור שני צמתים שמרחקם הוא לכל היותר (לא כולל) , ונתבונן בשני צמתים, ו שמרחקם בדיוק . נניח ששכנו של במסלול הוא . מהנחת האינדוקציה, בסיום הריצה,
Find-Set(v) == Find-Set(w)
. מצד שני, היות שיש קשת בין ו, האלגוריתם יאחד אותם (ע"י קריאה לUnion
). לכן בהכרח בסיום הריצה, Find-Set(u) == Find-Set(w)
. משתי הנקודות הללו נובע כי Find-Set(u) == Find-Set(v)
.
נוכיח שאם Find-Set(u) == Find-Set(v)
, אז ו באותו רכיב קשירות.
הוכחה: ההוכחה כמעט זהה להוכחה הקודמת. האינדוקציה תהיה על מספר פעולת הUnion
הראשונה שלאחריה התקיים Find-Set(u) == Find-Set(v)
לראשונה.