Гомори-Ху ағашы - Gomory–Hu tree

Жылы комбинаторлық оңтайландыру, Гомори-Ху ағашы[1] сыйымдылығы бар бағытталмаған графиктің салмағы бар ағаш бұл минималды білдіреді с-т барлығына арналған қысқартулар с-т графикадағы жұптар. Gomory-Ху ағашын | -де салуға боладыV | − 1 максималды ағын есептеулер.

Анықтама

Келіңіздер G = ((VG, EG), c) көмегімен бағытталмаған граф болуы керек c(сен,v) жиектің сыйымдылығы (сен,v) сәйкесінше.

Минималды сыйымдылығын белгілеңіз с-т кесу λст әрқайсысы үшін с, тVG.
Келіңіздер Т = (VG, EТ) ағаш болыңыз, оның жиектерінің жиілігін белгілеңіз с-т жол Pст әрқайсысы үшін с, тVG.

Содан кейін Т деп аталады Гомори-Ху ағашы туралы G, егер әрқайсысы үшін болса с, тVG

λст = минe∈Pст c(Se, Тe),

қайда

  1. Se, ТeVG екі байланысты компонент болып табылады Т∖{e}, және осылайша (Se, Тe) қалыптастыру с-т кесу G.
  2. c(Se, Тe) - бұл кесудің сыйымдылығы G.

Алгоритм

Гомори-Ху алгоритмі

Кіріс: Бағытталмаған өлшенген график G = ((VG, EG), c)
Шығу: Гомори-ху ағашы Т = (VТ, EТ).
1. Орнатыңыз VТ = {VG} және EТ = ∅.
2. Бірнешеуін таңдаңыз XVТ бірге | X | If 2 болса X бар. Әйтпесе, 6-қадамға өтіңіз.
3. Әрбір қосылған компонент үшін C = (VC, EC) ТX. Келіңіздер SC = ∪vТ∈VC vТ. Келіңіздер S = { SC | C ішіндегі жалғанған компонент болып табылады ТX}.
Құрау үшін компоненттермен келісімшарт жасаңыз G' = ((VG ', EG '), c'), қайда
VG ' = XS.
EG ' = EG|X × X ∪ {(сен, SC) ∈ X×S | (сен,v)∈EG кейбіреулер үшін vSC} ∪ {(SC1, SC2) × S ×S | (сен,v)∈EG U∈ үшінSC1 және vSC2}.
c' : VG '×VG 'R+ ретінде анықталған сыйымдылық функциясы
  1. егер (сен,SC)∈EG|X × S, c'(сен,SC) = Σv∈SC: (u, v) ∈EGc(сен,v),
  2. егер (SC1,SC2)∈EG|S × S, c'(SC1,SC2) = Σ(u, v) ∈EG: u∈SC1∧v∈SC2 c(сен,v),
  3. c'(сен,v) = c(сен,v) басқаша.
4. Екі шыңды таңдаңыз с, тX және минимумды табыңыз с-т кесу (A',B') in G'.
Орнатыңыз A = (∪SCA'∩S SC) ∪ (A' ∩ X) және B = (∪SCB'∩S SC) ∪ (B' ∩ X).
5. Орнатыңыз VТ = (VТX) ∪ {AX, BX}.
Әрқайсысы үшін e = (X, Y) ∈ EТ істеу
Егер YA, орнатылған e' = (AX, Y), басқасы орнатылды e' = (BX, Y).
Орнатыңыз EТ = (EТ∖{e}) ∪ {e'} және w(e') = w(e).
Орнатыңыз EТ = EТ ∪ {(AX, BX)}.
Орнатыңыз w((AX, BX)) = c'(A', B').
2-қадамға өтіңіз.
6. Әрқайсысын ауыстырыңыз {v} ∈ VТ арқылы v және әрқайсысы ({сен},{v}) ∈ EТ арқылы (сен,v). Шығу Т.

Талдау

Пайдалану модульдік сыйымдылық функциясының қасиеті c, біреуінде бар

c(X) + c(Y) ≥ c(XY) + c(XY).

Сонда оны минималды деп көрсетуге болады с-т кесу G'сонымен қатар минимум с-т кесу G кез келген үшін с, тX.

Мұны бәріне көрсету үшін (P, Q) ∈ EТ, w(P,Q) = λpq кейбіреулер үшін бP, qQ алгоритм барысында келесі Лемманы қолданады,

Кез келген үшін мен, j, к жылы VG, λик ≥ мин (λ.)иж, λjk).

Лемманы шығуын көрсету үшін бірнеше рет қолдануға болады Т Gomory-Hu ағашының қасиеттерін қанағаттандырады.

Мысал

Төменде Gomory-Ху алгоритмін модельдеу келтірілген, мұндағы

  1. жасыл шеңберлер - бұл шыңдар Т.
  2. қызыл және көк шеңберлер - бұл шыңдар G'.
  3. сұр шыңдар таңдалған с және т.
  4. қызыл және көк бояу с-т кесу.
  5. үзік-үзік шеттері с-т кесілген жиынтық.
  6. A - шеңбердің шыңдарының жиынтығы қызыл және B - шеңбердің шыңдарының жиынтығы көк.
G'Т
Гомори-Ху Г.свгГомори-Ху Т.свг
1. Орнатыңыз VТ = {VG} = {{0, 1, 2, 3, 4, 5}} және EТ = ∅.
2. бастап VТ тек бір шыңы бар, таңдаңыз X = VG = {0, 1, 2, 3, 4, 5}. Назар аударыңыз | X | = 6 ≥ 2.
1.Gomory – Hu Gp1.svgGomory – Hu T1.svg
3. бастап ТX = ∅, онда ешқандай қысылу болмайды, сондықтан G' = G.
4. таңдаңыз с = 1 және т = 5. Минимум с-т кесу (A', B') - ({0, 1, 2, 4}, {3, 5}) -мен c'(A', B') = 6.
Орнатыңыз A = {0, 1, 2, 4} және B = {3, 5}.
5. Орнатыңыз VТ = (VТX) ∪ {AX, BX} = { {0, 1, 2, 4}, {3, 5} }.
Орнатыңыз EТ = { ({0, 1, 2, 4}, {3, 5}) }.
Орнатыңыз w( ({0, 1, 2, 4}, {3, 5}) ) = c'(A', B') = 6.
2-қадамға өтіңіз.
2. таңдаңыз X = {3, 5}. Назар аударыңыз | X | = 2 ≥ 2.
2.Gomory – Hu Gp2.svgGomory – Hu T2.svg
3. {0, 1, 2, 4} - қосылған компонент ТX және осылайша S = { {0, 1, 2, 4} }.
{0, 1, 2, 4} келісімшарт жасасуға G', қайда
c'( (3, {0, 1, 2 ,4}) ) = c( (3, 1) ) + c( (3, 4) ) = 4.
c'( (5, {0, 1, 2, 4}) ) = c( (5, 4) ) = 2.
c'( (3, 5)) = c( (3, 5) ) = 6.
4. таңдаңыз с = 3, т = 5. Минимум с-т кесу (A', B') in G'({{0, 1, 2, 4}, 3}, {5}) мәнімен бірге c'(A', B') = 8.
Орнатыңыз A = {0, 1, 2, 3, 4} және B = {5}.
5. Орнатыңыз VТ = (VТX) ∪ {AX, BX} = { {0, 1, 2, 4}, {3}, {5} }.
Бастап (X, {0, 1, 2, 4}) ∈ EТ және {0, 1, 2, 4} ⊂ A, оны (AX, Y) = ({3}, {0, 1, 2 ,4}).
Орнатыңыз EТ = {({3}, {0, 1, 2, 4}), ({3}, {5})} бірге
w(({3}, {0, 1, 2 ,4})) = w((X, {0, 1, 2, 4})) = 6.
w(({3}, {5})) = c'(A', B') = 8.
2-қадамға өтіңіз.
2. таңдаңыз X = {0, 1, 2, 4}. Назар аударыңыз | X | = 4 ≥ 2.
3.Gomory – Hu Gp3.svgGomory – Hu T3.svg
3. {{3}, {5}} - қосылған компонент ТX және осылайша S = { {3, 5} }.
Келісімшарт {3, 5} G', қайда
c'( (1, {3, 5}) ) = c( (1, 3) ) = 3.
c'( (4, {3, 5}) ) = c( (4, 3) ) + c( (4, 5) ) = 3.
c'(сен,v) = c(сен,v) барлығына сен,vX.
4. таңдаңыз с = 1, т = 2. Минимум с-т кесу (A', B') in G'({1, {3, 5}, 4}, {0, 2}) -мен c'(A', B') = 6.
Орнатыңыз A = {1, 3, 4, 5} және B = {0, 2}.
5. Орнатыңыз VТ = (VТX) ∪ {AX, BX} = { {3}, {5}, {1, 4}, {0, 2} }.
Бастап (X, {3}) ∈ EТ және {3} ⊂ A, оны (AX, Y) = ({1, 4}, {3}).
Орнатыңыз EТ = {({1, 4}, {3}), ({3}, {5}), ({0, 2}, {1, 4})} бірге
w(({1, 4}, {3})) = w((X, {3})) = 6.
w(({0, 2}, {1, 4})) = c'(A', B') = 6.
2-қадамға өтіңіз.
2. таңдаңыз X = {1, 4}. Назар аударыңыз | X | = 2 ≥ 2.
4.Gomory – Hu Gp4.svgGomory – Hu T4.svg
3. {{3}, {5}}, {{0, 2}} - қосылған компоненттер ТX және осылайша S = { {0, 2}, {3, 5} }
Келісімшарт жасасу үшін {0, 2} және {3, 5} G', қайда
c'( (1, {3, 5}) ) = c( (1, 3) ) = 3.
c'( (4, {3, 5}) ) = c( (4, 3) ) + c( (4, 5) ) = 3.
c'( (1, {0, 2}) ) = c( (1, 0) ) + c( (1, 2) ) = 2.
c'( (4, {0, 2}) ) = c( (4, 2) ) = 4.
c'(сен,v) = c(сен,v) барлығына сен,vX.
4. таңдаңыз с = 1, т = 4. Минимум с-т кесу (A', B') in G'({1, {3, 5}}, {{0, 2}, 4}) с c'(A', B') = 7.
Орнатыңыз A = {1, 3, 5} және B = {0, 2, 4}.
5. Орнатыңыз VТ = (VТX) ∪ {AX, BX} = { {3}, {5}, {0, 2}, {1}, {4} }.
Бастап (X, {3}) ∈ EТ және {3} ⊂ A, оны (AX, Y) = ({1}, {3}).
Бастап (X, {0, 2}) ∈ EТ және {0, 2} ⊂ B, оны (BX, Y) = ({4}, {0, 2}).
Орнатыңыз EТ = {({1}, {3}), ({3}, {5}), ({4}, {0, 2}), ({1}, {4})}
w(({1}, {3})) = w((X, {3})) = 6.
w(({4}, {0, 2})) = w((X, {0, 2})) = 6.
w(({1}, {4})) = c'(A', B') = 7.
2-қадамға өтіңіз.
2. таңдаңыз X = {0, 2}. Назар аударыңыз | X | = 2 ≥ 2.
5.Gomory – Hu Gp5.svgGomory – Hu T5.svg
3. {{1}, {3}, {4}, {5}} - қосылған компонент ТX және осылайша S = { {1, 3, 4, 5} }.
Келісімшарт {1, 3, 4, 5} G', қайда
c'( (0, {1, 3, 4, 5}) ) = c( (0, 1) ) = 1.
c'( (2, {1, 3, 4, 5}) ) = c( (2, 1) ) + c( (2, 4) ) = 5.
c'( (0, 2) ) = c( (0, 2) ) = 7.
4. таңдаңыз с = 0, т = 2. Минимум с-т кесу (A', B') in G'({0}, {2, {1, 3, 4, 5}}) - мен c'(A', B') = 8.
Орнатыңыз A = {0} және B = {1, 2, 3 ,4 ,5}.
5. Орнатыңыз VТ = (VТX) ∪ {AX, BX} = { {3}, {5}, {1}, {4}, {0}, {2} }.
Бастап (X, {4}) ∈ EТ және {4} ⊂ B, оны (BX, Y) = ({2}, {4}).
Орнатыңыз EТ = {({1}, {3}), ({3}, {5}), ({2}, {4}), ({1}, {4}), ({0}, {2}) ) бірге
w(({2}, {4})) = w((X, {4})) = 6.
w(({0}, {2})) = c'(A', B') = 8.
2-қадамға өтіңіз.
2. Ол жоқ XVТ бірге | X | ≥ 2. Демек, 6-қадамға өтіңіз.
6.

Gomory – Hu output.svg

6. Ауыстыру VТ = {{3}, {5}, {1}, {4}, {0}, {2}} - {3, 5, 1, 4, 0, 2}.
Ауыстыру EТ = {({1}, {3}), ({3}, {5}), ({2}, {4}), ({1}, {4}), ({0}, {2}) )} бойынша {(1, 3), (3, 5), (2, 4), (1, 4), (0, 2)}.
Шығу Т. Дәл осы | екенін ескеріңізV | - 1 = 6 - 1 = 5 рет минималды есептеулер орындалады.

Іске асыру: дәйекті және параллель

Гусфилд алгоритмімен Gomory-Ху ағашын бірдей уақыттық күрделілікте кез-келген шыңы жиырылусыз табуға болады, бұл Gomory-Hu ағашын салуды жеңілдетеді.[2]

Эндрю В.Голдберг және К.Циутсиуликлис Гомори-Ху алгоритмі мен Гусфилд алгоритмін іске асырды және эксперименталды бағалау мен салыстыруды жүзеге асырды.[3]

Коэн және басқалар. сәйкесінше Гусфилд алгоритмінің OpenMP және MPI қолдана отырып екі параллельді іске асыруы туралы есеп.[4]

Байланысты ұғымдар

Жылы жазықтық графиктер, Гомори-Ху ағашы ең төменгі салмаққа қосарланған цикл негізі, Гомори-Ху ағашының кесінділері циклдар жиынтығына қосарланған деген мағынада қос сызба минималды салмақ циклінің негізін құрайтын.[5]

Сондай-ақ қараңыз

Пайдаланылған әдебиеттер

  1. ^ Гомори, Р.Э.; Ху, Т.С (1961). «Көп терминалды желі ағындары». Өнеркәсіптік және қолданбалы математика қоғамының журналы. 9 (4): 551–570. дои:10.1137/0109047.
  2. ^ Гусфилд, Дэн (1990). «Барлық жұптардың желілік ағындарын талдаудың өте қарапайым әдістері». SIAM J. Comput. 19 (1): 143–155. дои:10.1137/0219009.
  3. ^ Голдберг, А.В .; Tsioutsiouliklis, K. (2001). «Ағаш алгоритмдерін кесу: эксперименттік зерттеу». Алгоритмдер журналы. 38 (1): 51–83. дои:10.1006 / jagm.2000.1136.
  4. ^ Коэн Дж .; L. A. Rodriges; Ф. Сильва; Р. Кармо; A. Guedes; Е.П. Дуарте кіші (2011). «Гусфилдтің кесілген ағаш алгоритмінің параллельді орындалуы». Информатикадағы дәрістер (LNCS). 7016. Шпрингер. 7016 (Параллельді өңдеуге арналған 11-ші халықаралық конференция алгоритмдері мен сәулеттері (ICA3PP)): 258–269. дои:10.1007/978-3-642-24650-0_22. ISBN  978-3-642-24649-4. ISSN  0302-9743.
  5. ^ Хартвигсен, Д .; Мардон, Р. (1994). «Пландық графиктердегі мин-кесу есебі және минималды цикл есебі». SIAM J. Дискретті математика. 7 (3): 403–418. дои:10.1137 / S0895480190177042..