Հապքրոֆթ-Կարպ ալգորիթմ | |
---|---|
Տեսակ | ալգորիթմ և գրաֆների ալգորիթմ |
Տվյալների կառուցվածք | |
Վատագույն դեպքում կատարումը | |
Օգտագործում է | գրաֆ |
Հայտնաբերող | John Edward Hopcroft?, Ռիչարդ Կարպ և Alexander V. Karzanov? |
Անվանված է | John Edward Hopcroft? և Ռիչարդ Կարպ |
Հապքրոֆթ-Կարպ ալգորիթմ (անգլ.՝ Hopcroft–Karp algorithm), Համակարգչային գիտության մեջ ալգորիթմ, որը որպես մուտք վերցնում է երկչափանի գրաֆը և արտադրում որպես թողարկման առավելագույն համապատասխան հզորությունը – ամենաշատ հնարավոր եզրերի սահմանումը այն հատկությամբ, որ ոչ մի երկու եզր չեն կիսում վերջնակետը։ Այն վատագույն դեպքում աշխատում է O(m√n) ժամանակում, որտեղ "O" վերաբերում է մեծ O նշումին, m-ը գրաֆում եզրերի թիվն է, և n-ը գրաֆի գագաթների թիվն է։ Խիտ գրաֆիդեպքում ժամանակային սահմանը դառնում է O(n5/2), և պատահական գրաֆի համար այն աշխատում է մոտավորապես գծային ժամանակում։
Ալգորիթմը հայտնաբերվել է Ջոն Հապքրոֆթի և Ռիչարդ Կարպի կողմից 1973 թվականին։ Ինչպես և նախորդ համապատասխանեցնող մեթոդներում, ինչպիսին Հունգարական ալգորիթմը և Էդմոնդսի (1965) աշխատանքն է, Հապքրոֆթ-Կարպ ալգորիթմը բազմակի անգամ շատացնում է մասնակի համապատասխանեցումների չափը մեծացման ճանապարհ գտնելու միջոցով։ Ինչևէ, յուրաքանչյուր բազմակրկնություն մեծացման ճանապարհ գտնելու փոխարեն, ալգորիթմը գտնում են մի շարք առավելագույն սեղմ մեծացման ճանապարհներ։ Որպես արդյունք միայն O(√n) բազմակրկնություններ են անհրաժեշտ։ Նույն սկզբունքն է օգտագործվել ավելի բարդ ալգորիթմեր զարգացնելու նպատակով ոչ երկչափ համապատասխանությունների համար նույն ասիմտոտիկ աշխատաժամանակով ինչպիսին Հապսրոֆտ-Կառպ ալգորիթմն է։
Գագաթը, որը չի հանդիսանում սահմանի վերջնակետ որոշ մասնակի համապատասխանող M-երի համար, անվանվում է ազատ գագաթ։ Հիմնական գաղափարը, որի վրա հիմնվա է ալգորիթմը այն է, որ մեծացման ուղինեը, ուղին, որը սկսվում է ազատ գագաթից, վերջանում է ազատ գագաթում, և միմյանց են հաջորդում չգերազանցված և համապատասխան ճանապարհի եզրերը։ Եթե M-ը n-ի համապատասխան չափն է, և P-ն հանդիսանում է մեծացման չափը M-ի համար, ապա սիմետրիկ տարբերությունըերկու եզրերի միջ, M ⊕ P, կստեղծեն համապատասխան n + 1 չափ։ Ուստի, մեծացման ուղիները փնտրելով, ալգորիթմը կարող է մեծացնել համապատասխանությունների չափը։
Եվ ընդհակառակը, ենթադրենք, որ համապատասխան M-ը օպտիմալ չէ, և թող P-ն լինի M ⊕ M*սիմետրիկ տարբերությունը, որտեղ M*-ը օպտիմալ համապատասխանուրյունն է։Այսպիսով P-ն պետք է ձևավորի հավաքածու առանձնացված մեծացման ուղիներից և շրջաններից կամ ուղիներից, որտեղ համապատասխան ու անհամապատասխան եզրերը հավասար թվով են. չափերի տարբերությունը M և M*-ի միջև P-ում ուղիների ավելացումների թիվն և։ Ուստր, եթե ոչ մի մեծացման ճանապարհ չի գտնվում, ապա ալգորիթմը ապահով դադարեցվում է, քանի որ այս դեպքում Mպետք է լինի օպտիմալ։
Համապատասխանող խնդրի մեծացման ճանապարհը սերտորեն կապված է մեծացմանճանապարհների հետ, որը բխում է առավելագույն հոսքի խնդիրից, ճանապարհներ, որոնց երկայնքով կարելի է ավելացնել հոսքի գումարը հոսքի տերմինալների միջև։ Հնարավոր է փոխակերպել երկչափ համապատասխան խնդիրը առավելագույն հոսքի առանձին դեպքի, այնպես որ համապատասխանման խնդրի միմյանց հաջորդող ուղիները դառնում են հոսքերի խնդրի մեծացման ճանապարհ[1]։ Ի դեպ, տեխնիկայի ընդհանրացումը, որը օգտագործվում է Հապսրոֆտ-Կառպ ալգորիթմում կամայական հոսքի ցանցերի համար հայտնի է որպես Դենիսի ալգորիթմ։
Ենթադրենք U-ն և V-ն երկու մասի բաժանված G-ի երկու հավաքածուներ են, և U-ի համապատասխանությունը V-ի հետ ցանկացած ժամանակ ներկայացված է որպես M-ի սահմանում։
Ալգորիթմը կատարվում է փուլերով։ Յուրաքանչյուր փուլ բաղկացած է հետևյալ քայլներց.
Ալգորիթմը դադարում է, երբ էլ ոչ մի մեծացման ճանապարհներ չեն գտնվում առաջինը ըստ խորության որոնուման ժամանակ առաջին փուլում։
Ամեն փուլը բաղկացած է պարզ առաջինը ամենալայնի և առաջինը ամենախորի որոնումից։ Այսպիսով մեկ փուլը կարող է իրականացվել գծային ժամանակահատվածի ընթացքում։
Այս եղանակով, առաջին √n փուլը, գրաֆում n բարձրությունների և m եզրերի հետ, պահանջում է O(m √n) ժամանակահատված։
Կարելի է ցույց տալ, որ յուրաքանչյուր փուլը, մեծացնում է ամենակարճ արգումենտի ճանապարհի երկարությունը առնվազն մեկով։ Փուլը գտնում է տվյալ երկարությամբ արգումենտի ճանապարհի մաքսիմալ շարքը, այնպես որ մնացած ճանապարհները պետք է լինեն ավելի երկար։ Այդ պատճառով էլ ալգորիթմի √n սկզբնական փուլը ամբողջական է, հետևաբար մնացած ամենակարճ ճանապարհը պետք է լինի √n–ի եզրերը։ Այնուամենայնիվ սիմետրիկ տարբերություն հնարավոր օպտիմալ համաձայնության և գտնված M-ի սիմետրիկությունը, սկզբնական էտապում ձևավորում է բարձրությունների շարքը և ալտերնատիվ ցիկլերը։ Եթե այս շարքի յուրաքանչյուր ճանապարհի երկարությունը առնվազն √n է, ապա հավաքածուի մեջ կարող է լինել √m և օպտիմալ համաձայնության չաթը կարող է տարբերվել M-ի չափերից ոչ ավել √n –ի եզրերից։ Ալգորիթմի յուրաքանչյուր էտապից հետո մեծանում է համապատասխանությունների թիվը։ Քանի որ ալգորիթմը ընդհանուր առմամբ կատարում է 2√n փուլը, այն պահանջում է O(m √n) ընդհանուր ժամանակահատված վատագույն դեպքում։ Օրինակ միջին դեպքում նոսր երկկողմանի պատահական գրաֆները (բարելավելով իր նախորդ արդյունքները Motwani 1994 թ.) ցույց տվեցին, որ ամենայն հավանականությամբ բոլոր ոչ-օպտիմալ համապատասխանեցումները եղել են լոգարիթմական երկարությունների ավելանալու ճանապարհին։ Որպես հետևանք, այս գրաֆներում, Հապսրոֆտ-Կառպի ալգորիթմը պահանջում է O(log n) փուլեր և O(m log n) ընդհանուր ժամանակահատված։
Նոսր գրաֆների համար, Հապսրոֆտ-Կառպ ալգորիթմը շարունակում է ունենալ ամենահայտնի 'վատագույն դեպքի' կատարումը, բայց խիտ գրաֆների համար օգտագործում է ավելի ժամանակակից ալգորիթմ Alt et al. (1991)-ի կողմից հասնելով փոքր - ինչ ավելի լավ ժամանակի սահմանապակում O(n1.5(m/log n)0.5)։ Նրանց ալգորիթմը հիմնված է հրման-վերապիտակավորման առավելագույն հոսքի ալգորիթմի օգտագործման վրա և հետո, երբ այս ալգորիթմի ստեղծած համապատասղանեցումը մոտենում է օպտիմալ սահմանին, անցում է կատարվում Հապսրոֆտ-Կառպի եղանակին։
Մի շարք հեղինակներ հանդես են եկել երկչափ համապատասխանեցված ալգորիթմների փորձարարական համեմատություններով։ Դրանց արդյունքները ընդհանուր առմամբ հակված են ցույց տալու, որ Հապսրոֆտ-Կառպի եղանակը գործնականում այնքան լավը չէ, ինչքան տեսականորեն. այն գերազանցված է ինչպես պարզ առաջինը ամենալայնի և առաջինը ամենախորի ռազմավարություններով արգումենտի ճանապարհներ գտնելու հարցում, և հրման-վերապիտակավորման տեխնիկայով[2]։
Ամենակարճ արգումենտի ուղիների առավելագույն շարքը գտնելու նույն գաղափարը աշխատում է նաև ոչ երկչափ գրաֆներում առավելագույն արտադրողական համապատասխանությունների փնտրման ժամանակ, և նույն պատճառներով էլ ալգորիթմը, որը հիմնված է այս մտքի վրա վերցնում է O(√n) փուլերը։ Ինչևէ, ոչ երկչափ գրաֆների համար, յուրաքանչյուր փուլում արգումենտի ճանապարհ գտնելու խնդիրը ավելի դժվար է։ Հիմնվելով մի քանի դանդաղ նախորդների աշխատանքի վրա, Micali & Vazirani (1980) ցույց տվեց, թե ինչպես պետք է իրականացնել փուլերը գծային ժամանակում, որի արդյունքում կառուցվում է ոչ երկչափ համապատասխանեցված ալգորիթմը, նույն սահմանված ժամանակուն ինչպես որ Հապսրոֆտ-Կառպի ալգորիթմը երկչափ գրաֆների համար։ Micali–Vazirani-ի տեխնիկան բարդ է, և նրա հեղինակները չեն ապահովում իրենց արդյունքների լրիվ ապացույցներ. այս խնդրի այլընտրանքային մեթոդը ավելի ուշ բացատրվել է այլ հեղինակների կողմից[3]։
/*
G = G1 G2 {NIL}
where G1 and G2 are partition of graph and NIL is a special null vertex
*/
function BFS () for v in G1 if Pair_G1[v] == NIL Dist[v] = 0 Enqueue(Q,v) else Dist[v] = ∞ Dist[NIL] = ∞ while Empty(Q) == false v = Dequeue(Q) for each u in Adj[v] if Dist[ Pair_G2[u] ] == ∞ Dist[ Pair_G2[u] ] = Dist[v] + 1 Enqueue(Q,Pair_G2[u]) return Dist[NIL] != ∞
function DFS (v) if v != NIL for each u in Adj[v] if Dist[ Pair_G2[u] ] == Dist[v] + 1 if DFS(Pair_G2[u]) == true Pair_G2[u] = v Pair_G1[v] = u return true Dist[v] = ∞ return false return true
function Hopcroft-Karp for each v in G Pair_G1[v] = NIL Pair_G2[v] = NIL matching = 0 while BFS() == true for each v in G1 if Pair_G1[v] == NIL if DFS(v) == true matching = matching + 1 return matching