Қос байланысқан компонент - Biconnected component

Қосарланған компоненттері бар графиктің мысалы
Әр түс қос байланысқан компонентке сәйкес келеді. Көп түсті шыңдар кесілген шыңдар болып табылады, осылайша бірнеше қосарланған компоненттерге жатады.

Жылы графтар теориясы, а қосарланған компонент (кейде а деп аталады 2 жалғанған компонент) максималды болып табылады қосарланған подограф. Кез келген байланысты граф екіге қосылған компоненттер ағашына ыдырайды кесілген ағаш график. Блоктар бір-біріне бекітілген кезде бекітіледі төбелер деп аталады шыңдарды кесу немесе артикуляциялық нүктелер. Нақтырақ айтқанда, а кесілген шың дегеніміз оның санын көбейтетін кез келген шың қосылған компоненттер.

Алгоритмдер

Алдымен сызықтық уақыт тереңдігі

Классикалық дәйекті алгоритм қосылыста қос байланысқан компоненттерді есептеу үшін бағытталмаған графикке байланысты Джон Хопкрофт және Роберт Таржан (1973).[1] Ол жүгіреді сызықтық уақыт, және негізделген бірінші тереңдік. Бұл алгоритм 22-2 есеп ретінде көрсетілген Алгоритмдерге кіріспе (2-ші және 3-ші басылымдар).

Идея мына ақпаратты сақтай отырып, тереңнен іздеу жүргізу:

  1. бірінші іздеу ағашындағы әрбір шыңның тереңдігі (ол барғаннан кейін) және
  2. әр төбе үшін v, барлық ұрпақтарының көршілерінің ең төменгі тереңдігі v (оның ішінде v өзі) тереңдік-бірінші іздеу ағашында, деп аталады төменгі нүкте.

Тереңдікті алғашқы іздеу кезінде сақтау үшін стандартты болып табылады. Төменгі нүктесі v барлық ұрпақтарына барғаннан кейін есептеуге болады v (яғни, дәл бұрын v бірінші іздеу тереңдігінен шығады стек ) тереңдігінің минимумы ретінде v, барлық көршілерінің тереңдігі v (ата-анасынан басқа v барлық балалардағы ең төменгі нүкте) v бірінші-іздеу ағашында.

Негізгі факт - бұл тамыр емес шың v егер бұл бала болса ғана, екі байланыстырылған екі компонентті бөлетін кесілген шың (немесе артикуляциялық нүкте) ж туралы v төмен нүкте (ж≥ тереңдік (v). Бұл қасиетті әр баладан терең іздеу қайтарылғаннан кейін тексеруге болады v (яғни, дәл бұрын v бірінші іздеу тереңдігінен шығады), ал егер рас болса, v графикті әртүрлі қосарланған компоненттерге бөледі. Мұны әрқайсысының бір қосылғыш компонентін есептеу арқылы ұсынуға болады ж (құрамдас бөлігі бар ж тармағынан тұрады ж, плюс v), содан кейін тармағын өшіріңіз ж ағаштан.

Түбір шыңы бөлек өңделуі керек: егер ол кем дегенде екі баласы болса, кесілген шың болып табылады. Осылайша, тамырдың әр баласынан (оның ішінде түбірден) бір компонент құру жеткілікті.

Псевдокод

GetArticulationPoints (i, d) кірген [i]: = шындық тереңдігі [i]: = d төмен [i]: = d childCount: = 0 isArticulation: = жалған әрқайсысы үшін ни жылы adj [i] істеу        егер келмеген [ни] содан кейін            ата-ана [ni]: = i GetArticulationPoints (ni, d + 1) childCount: = childCount + 1 егер төмен [ni] ≥ тереңдік [i] содан кейін                isArticulation: = шынайы төмен [i]: = Min (төмен [i], төмен [ni]) басқаша болса ата-ана [мен] содан кейін            төмен [i]: = Мин (төмен [i], тереңдік [ni]) егер (ата-ана [i] ≠ нөл және isArticulation) немесе (parent [i] = нөл және childCount> 1) содан кейін        Артикуляция нүктесі ретінде i шығысы

Бала мен ата-ана терминдері бастапқы графикке емес, DFS ағашындағы қатынастарды белгілейтініне назар аударыңыз.

Таржанның кесілген шыңдарын табу алгоритмінің демо-нұсқасы. Д. тереңдікті және L төменгі нүктені білдіреді.


Басқа алгоритмдер

Жоғарыда келтірілген алгоритмге қарапайым балама қолданылады тізбекті ыдырау, байланысты құлақтың арнайы ыдырауы DFS - ағаштар.[2] Тізбекті ыдырауды сызықтық уақытта есептеуге болады жүру ережесі. Келіңіздер C тізбегінің ыдырауы G. Содан кейін G егер ол болса, тек 2 шыңға байланысты G минимумға ие дәрежесі 2 және C1 жалғыз цикл жылы C. Бұл дереу сызықтық уақыттағы 2-байланыстың сынағын береді және барлық кесілген шыңдарды тізімдеу үшін кеңейтілуі мүмкін G сызықтық уақытта келесі тұжырымды қолдана отырып: Шың v қосылған графикте G (ең төменгі 2 дәрежесімен) - егер бұл болса, тек қана кесілген шың v а оқиғасы көпір немесе v - циклінің бірінші шыңы C - C1. Құру үшін кесілген шыңдар тізімін пайдалануға болады кесілген ағаш туралы G сызықтық уақытта.

Ішінде желіде мәселенің нұсқасы, шыңдар мен шеттер динамикалық түрде қосылады (бірақ жойылмайды), ал деректер құрылымы қосарланған компоненттерді қолдауы керек. Джеффери Уэстбрук және Роберт Таржан (1992) [3] негізінде осы проблема үшін тиімді деректер құрылымын жасады дисконтталған мәліметтер құрылымы. Нақтырақ айтқанда, ол өңделеді n шыңға үстеулер және м шеткі қосындылар O (м α(мn)) жалпы уақыт, мұндағы α - кері Ackermann функциясы. Бұл уақыттың оңтайлы екендігі дәлелденді.

Узи Вишкин және Роберт Таржан (1985) [4] жобаланған параллель алгоритм CRCW-де PRAM O жүйесінде жұмыс істейді (журналn) уақыт n + м процессорлар. Гуджинг Конг және Дэвид А.Бадер (2005) [5] 12 процессоры бар 5 жылдамдығын арттыратын алгоритм құрды SMPs. Тарджан-Вишкиннің бастапқы алгоритмі негізінде 30-дан асқан жылдамдықтар туралы Джеймс А. Эдвардс және Узи Вишкин (2012).[6]

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

Эквиваленттік қатынас

А анықтауға болады екілік қатынас ерікті бағытталмаған графтың шеттерінде, оған сәйкес екі жиек e және f байланысты және тек егер ол болса e = f немесе графикте a бар қарапайым цикл екеуі арқылы e және f. Әрбір шеті өзіне байланысты, ал шеті e басқа жиегімен байланысты f егер және егер болса f дәл осылай байланысты e. Анық емес, бұл а өтпелі қатынас: егер шеттері бар қарапайым цикл болса e және f, және шеттері бар тағы бір қарапайым цикл f және ж, содан кейін қарапайым екі циклды табу үшін осы екі циклды біріктіруге болады e және ж. Сондықтан, бұл эквиваленттік қатынас, және оны эквиваленттік кластарға бөлу үшін қолдануға болады, егер олар екі эквиваленттілік класына жататын болса ғана, бір-бірімен байланысқан қасиеттері бар жиектердің ішкі жиындары. Әрбір эквиваленттілік класында шеттермен құрылған ішкі графиктер берілген графиканың екі байланысқан компоненттері болып табылады. Осылайша, қос байланысқан компоненттер графиктің шеттерін бөледі; дегенмен, олар шыңдарды бір-бірімен бөлісе алады.[7]

Блок-график

The блок-график берілген графиктің G болып табылады қиылысу графигі оның блоктарының. Осылайша, оның әрбір блогы үшін бір шыңы бар GТиісті екі блок шыңды бөліскен сайын және екі төбенің арасындағы жиек. график H басқа графиктің блок-графы болып табылады G барлық блоктар дәл болған кезде H толық ішкі графиктер болып табылады. Графиктер H осы қасиетімен блок-графиктер.[8]

Блокталған ағаш

A кесу нүктесі, кесілген шың, немесе артикуляциялық нүкте график G - бұл екі немесе одан да көп блоктармен бөлінетін шың. Байланыстырылған графиктің блоктары мен кесу нүктелерінің құрылымын а арқылы сипаттауға болады ағаш деп аталады кесілген ағаш немесе BC ағаш. Бұл ағашта әр блок үшін және берілген графиктің әр артикуляция нүктесі үшін шың бар. Блоктың әр жұбы үшін кесілген ағашта жиек және сол блокқа жататын артикуляциялық нүкте бар.[9]

График және оның ағаш кесіндісі.
Блоктар: б1= [1,2], б2= [2,3,4], б3= [2,5,6,7], б4= [7,8,9,10,11], б5= [8,12,13,14,15], б6= [10,16] және б7=[10,17,18];
кесу нүктелері: с1= 2, с2= 7, с3= 8 және с4=10.

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

Ескертулер

  1. ^ Хопкрофт, Дж .; Таржан, Р. (1973). «447 алгоритмі: графикалық манипуляцияның тиімді алгоритмдері». ACM байланысы. 16 (6): 372–378. дои:10.1145/362248.362272.
  2. ^ Шмидт, Дженс М. (2013 ж.), «Қарапайым тест 2-шыңды және 2-шекті-байланыстыру», Ақпаратты өңдеу хаттары, 113 (7): 241–244, arXiv:1209.0700, дои:10.1016 / j.ipl.2013.01.016.
  3. ^ Вестбрук, Дж .; Таржан, Р.Э. (1992). «Он-лайн режимінде көпірге қосылатын және қосарланған компоненттерді ұстау». Алгоритмика. 7 (1–6): 433–464. дои:10.1007 / BF01758773.
  4. ^ Тарджан, Р .; Вишкин, У. (1985). «Қосарланған қосылыстың тиімді алгоритмі». SIAM J. Comput. 14 (4): 862–874. CiteSeerX  10.1.1.465.8898. дои:10.1137/0214061.CS1 maint: ref = harv (сілтеме)
  5. ^ Гуоджинг Конг және Дэвид А.Бадер (2005). «Симметриялық мультипроцессорлардағы (СМП) параллель қосарланған компоненттер алгоритмдерін эксперименттік зерттеу». Параллельді және үлестірілген өңдеуге арналған 19 Халықаралық IEEE конференциясының материалдары. 45б бет. дои:10.1109 / IPDPS.2005.100.
  6. ^ Эдвардс, Дж. А .; Вишкин, У. (2012). «Графикалық қосылуға және қос байланысқа қарапайым параллель бағдарламалауды қолданып жылдамдықты жақсарту». Бағдарламалау модельдері мен қосымшалары бойынша бағдарламаның 2012 жылғы Халықаралық семинардың материалдары және көпфункционалды бағдарламалар - PMAM '12. б. 103. дои:10.1145/2141702.2141714. ISBN  9781450312110.
  7. ^ Таржан және Вишкин (1985) осы эквиваленттік қатынастың анықтамасын несиелендіреді Харари (1969); дегенмен, Харари оны нақты сөздермен сипаттамайтын сияқты.
  8. ^ Харари, Фрэнк (1969), Графикалық теория, Аддисон-Уэсли, б. 29.
  9. ^ Харари (1969), б. 36.

Әдебиеттер тізімі

Сыртқы сілтемелер