Кіріспе
Тағайындау мәселесі үшін полиномиалдық уақыт алгоритмі
Мажар әдісі – полиномиалдық уақытта тапсырма мәселесін шешетін және кейінгі бастапқы-қос әдістерге жол ашқан комбинаторлық оптимизация алгоритмі. Ол 1955 жылы Харольд Кун жасап, жариялаған, оған «Мажар әдісі» деген ат берген, себебі алгоритм негізінен екі мажар математигі – Денес Кениг және Йенё Егерваридің бұрынғы еңбектеріне негізделген. Дегенмен, 2006 жылы Карл Густав Якобидің 19 ғасырда тапсырма мәселесін шешкені анықталды, ал шешімі 1890 жылы латын тілінде жарияланды. Джеймс Мункрес 1957 жылы алгоритмді қарап шығып, оның (күшті) полиномиалды екенін байқады. Осыдан бері алгоритм Кун-Мункрес алгоритмі немесе Мункрестің тапсырма алгоритмі деп те аталады. Алғашқы алгоритмнің уақыт күрделілігі O(n^3) болса, алайда Эдмондс пен Карп, сондай-ақ тәуелсіз Томизава оны O(n^2) жұмыс уақытына дейін жетілдіруге болатынын көрсетті. Ең танымал нұсқаларының бірі – Джонкер-Волгенант алгоритмі. Форд пен Фулкерсон осы әдісті Форд-Фулкерсон алгоритмі түрінде жалпы максималды ағын мәселелеріне кеңейтті.
The Hungarian method is a combinatorial optimization algorithm that solves the assignment problem in polynomial time and which anticipated later primal–dual methods. It was developed and published in 1955 by Harold Kuhn, who gave it the name "Hungarian method" because the algorithm was largely based on the earlier works of two Hungarian mathematicians, Dénes Kőnig and Jenő Egerváry. However, in 2006 it was discovered that Carl Gustav Jacobi had solved the assignment problem in the 19th century, and the solution had been published posthumously in 1890 in Latin. James Munkres reviewed the algorithm in 1957 and observed that it is (strongly) polynomial. Since then the algorithm has been known also as the Kuhn–Munkres algorithm or Munkres assignment algorithm. The time complexity of the original algorithm was , however Edmonds and Karp, and independently Tomizawa, noticed that it can be modified to achieve an running time. One of the most popular variants is the Jonker–Volgenant algorithm. Ford and Fulkerson extended the method to general maximum flow problems in form of the Ford–Fulkerson algorithm.
Екі жақты графиктің құрастырылуы
Алгоритмді екі жақты графты қолданып мәселені формулировкалау арқылы да сипаттауға болады. Бізде n жұмысшы төбесі (S) және n жұмыс төбесі (T) бар толық екі жақты граф бар, және қабырғаларының (E) әрқайсысының оң немесе нөлдік құны бар. Біз ең төменгі жалпы құны бар толық сәйкестікті табуды қалаймыз.
Алгоритмнің алға басуының дәлелі
Біз сәйкестіктің мүмкін болатын ең үлкен мөлшері болмаған кезде алгоритм әрқашан алға жылжуға қабілетті екенін көрсетуіміз керек, яғни сәйкестірілген қабырғалардың санын арттыру немесе кем дегенде бір қабырғаны кернеулі ету. Әрбір қадамда төмендегілердің кем дегенде біреуі орындалатынын көрсету жеткілікті: M – мүмкін болатын ең үлкен мөлшерде. Аузы кеңейтілген жолды қамтиды. G құрамында бос құйрықты жол бар: белгілі бір төбеден басқа төбеге дейінгі жол, ол кез келген (мүмкін нөл) кернеулі қабырғалардан және содан кейін бір бос қабырғадан тұрады. Осылайша, бос құйрықты жолдың соңғы бос қабырғасы , Δ дұрыс анықталғанын қамтамасыз етеді. Егер M мүмкін болатын ең үлкен мөлшерде болса, біз аяқтадық. Әйтпесе, Берж леммасы бойынша, негізгі граф G-де M-ге қатысты P аузы кеңейтілген жолы болуы керек. Дегенмен, бұл жол бола алмауы мүмкін: P-дегі әрбір жұп нөмірлі қабырға M анықтамасы бойынша кернеулі болса да, тақ нөмірлі қабырғалар бос болуы мүмкін және осылайша P-нің бір ұшы , екіншісі ; w. l. o. g., егер ол басталатын болса, егер P-дегі әрбір қабырға кернеулі болса, онда ол кеңейтілген жол болып қалады және біз аяқтадық. Әйтпесе, P-дегі бірінші бос қабырға болсын. Егер онда біз бос құйрықты жол таптық және аяқтадық. Әйтпесе, v басқа жолмен, Q кернеулі қабырғалардың жолынан жете алады, белгілі бір төбеден бастап v төбесіне дейін. P-нің v төбесінен басталып, соңына дейін жалғасатын кіші жолы болсын, ал Q бойымен Q-ға дейін саяхаттау арқылы және содан кейін соңына дейін жалғасатын жол болсын. P-ге қарағанда кем дегенде бір бос қабырғасы бар G-де кеңейтілген жол екенін байқаңыз. P-ні және бұл ойлау процесін қайталауға болады (формальды түрде, бос қабырғалар саны бойынша индукцияны қолдана отырып) G-де кеңейтілген жол немесе бос құйрықты жол табылғанға дейін.
M is of maximum possible size. contains an augmenting path. G contains a loose tailed path: a path from some vertex in to a vertex in that consists of any number (possibly zero) of tight edges followed by a single loose edge. The trailing loose edge of a loose tailed path is thus from , guaranteeing that Δ is well defined. If M is of maximum possible size, we are of course finished. Otherwise, by Berge's lemma, there must exist an augmenting path P with respect to M in the underlying graph G. However, this path may not exist in : Although every even numbered edge in P is tight by the definition of M, odd numbered edges may be loose and thus absent from One endpoint of P is in , the other in ; w. l. o. g., suppose it begins in If every edge on P is tight, then it remains an augmenting path in and we are done. Otherwise, let be the first loose edge on P. If then we have found a loose tailed path and we are done. Otherwise, v is reachable from some other path Q of tight edges from a vertex in Let be the subpath of P beginning at v and continuing to the end, and let be the path formed by traveling along Q until a vertex on is reached, and then continuing to the end of Observe that is an augmenting path in G with at least one fewer loose edge than P. P can be replaced with and this reasoning process iterated (formally, using induction on the number of loose edges) until either an augmenting path in or a loose tailed path in G is found.
Y потенциалын түзету M өзгермейтінін дәлелдеу
M жиегінің y-ді түзетуден кейін де сақталуын көрсету үшін, M-дегі кез келген жиектің екі ұшы да, немесе екеуі де Z жиымында екенін көрсету жеткілікті. Осы мақсатта, M жиегінен T нүктесінен S нүктесіне дейінгі жиек алсын. Егер v Z жиымында болса, онда u да сол жиымда болуы керек, себебі M жиегіндегі әрбір жиек тығыз. Енді, қарама-қайшылыққа алып келетіндей болжам жасайық, бірақ u өзі Z жиымында бола алмайды, өйткені ол жұптасқан жиектің соңғы нүктесі болып табылады, сондықтан Z жиымынан u нүктесіне дейін тығыз жиектерден тұратын бағытталған жол болуы керек. Бұл жол v нүктесінен өтуі керек емес, себебі ол Z жиымында емес деп болжанған, сондықтан осы жолдағы u нүктесіне тікелей жақын нүкте T-ден S-ке дейінгі тығыз жиек болып табылады және осылайша M жиымында болады. Бірақ сонда M жиымында u нүктесін ортақ нүкте ретінде бөлісетін екі жиек болады, бұл M жиымының жұптасқан жиектер жиыны екендігіне қайшы келеді. Осылайша, M жиымындағы әрбір жиектің екі ұшы да, немесе екеуі де Z жиымында орналасқан.
Мүмкіндіктер бар дәлел
y-нің түзетуден кейін де потенциал болып қалатынын көрсету үшін, ешбір қабырғаның жалпы потенциалы оның бағасынан артық көтерілмейтінін көрсету жеткілікті. Бұл M жиектері үшін алдыңғы абзацта жауапталған, сондықтан S-тен T-ге кездейсоқ uv қабырғасын қарастырайық. Егер оның потенциалы Δ-ға артса, онда , бұл жағдайда Δ-ға кемиді, қабырғаның жалпы потенциалы өзгермейді, немесе , бұл жағдайда Δ-ның анықтамасы осылай кепілдік береді. Осылайша y потенциал болып қала береді.
Алгоритм O ((n3) уақыт ішінде
Жұмыс орындары мен жұмысшылар бар делік. Біз әр жұмыс орналарының алдыңғы бөлігі үшін әрбір жұмысты ерекше жұмысшыларға тағайындаудың ең төменгі жалпы құнын қалай есептеу керектігін сипаттаймыз. Атап айтқанда, біз -шы жұмысты қосып, жалпы құнды уақыт ішінде жаңартамыз, нәтижесінде жалпы уақыт күрделігіне жетеміз. Жұмыстардың саны жұмысшылар санына қарағанда аз болған жағдайда бұл жақсырақ екенін ескеріңіз.
J-ші жұмысты 0 (jW) уақыт ішінде қосу
Біз алдыңғы бөлімдегідей белгілеулерді қолданамыз, бірақ қажет болған жағдайда олардың анықтамаларын өзгертеміз. Алғашқы жұмыстар жиынын деп, ал барлық жұмысшылар жиынын деп белгілейміз. Алгоритмнің қадамынан бұрын, бізде жұмыстардың барлығына сәйкес келетін және келесі шартты қанағаттандыратын сәйкестік бар деп есептейміз: сәйкестік потенциалдарға қатысты тығыз, барлық сәйкес келмеген жұмысшылардың потенциалы нөлге тең, ал барлық сәйкес келген жұмысшылардың потенциалы теріс емес. Мұндай потенциалдар сәйкестіктің оңтайлылығын куәландырады. қадамында біз жұмысты жиынына қосып, жасаймыз және бастамалаймыз. Кез келген уақытта, жиынындағы кез келген төбе жұмыстан қол жетімді болады. Егер жиынында жұмысқа бекітілмеген жұмысшы болмаса, және деп минимумға жеткен кез келген белгілейміз. Потенциалдарды алдыңғы бөлімде сипатталғандай реттегеннен кейін, енді төбесінен төбесіне тығыз қабырға бар. Егер сәйкес келмесе, онда жұмыстан басталатын тығыз қабырғалардың субграфигінде бізде кеңейту жолы бар. Осы жол бойынша сәйкестікті ауыстырғаннан кейін, біз енді алғашқы жұмысты сәйкестендірдік және бұл процедура аяқталады. Әйтпесе, біз жұмысын және оған сәйкес келген жұмысты жиынына қосамыз. Потенциалды реттеуге уақыт кетеді. Потенциалды өзгерткеннен және және қайта есептегеннен кейін, бұл да уақытта орындалуы мүмкін. 1-ші жағдай 2-ші жағдай орын алғанша ең көп рет пайда болуы мүмкін, содан кейін процедура аяқталады, нәтижесінде жалпы уақыт күрделілігі болады.
and denote any at which the minimum is attained. After adjusting the potentials in the way described in the previous section, there is now a tight edge from to
If is unmatched, then we have an augmenting path in the subgraph of tight edges from to After toggling the matching along this path, we have now matched the first jobs, and this procedure terminates. Otherwise, we add and the job matched with it to
Adjusting potentials takes time. Recomputing and after changing the potentials and also can be done in time. Case 1 can occur at most times before case 2 occurs and the procedure terminates, yielding the overall time complexity of .
Матрицалық түсіндіру
Алгоритмнің бұл нұсқасы Флад ұсынған түсіндірмеге сәйкес келеді, ал кейіннен Мункрес оны одан да нақтырақ сипаттап, оның уақыт ішінде орындалатынын дәлелдеді. Ең аз сызықтар саны (ең аз нүктелік жабу) n-ге (максималды сәйкестіктің мөлшеріне) тең болады. Осылайша, n сызық қажет болған жағдайда, ең төменгі құнмен тапсыру матрицадағы тек нөлдерді қарастыру арқылы табылады.