Hoshen – Kopelman algoritmi - Hoshen–Kopelman algorithm

The Hoshen-Kopelman algoritmi oddiy va samarali algoritm yorliqlash uchun klasterlar panjara doimiy bo'lgan panjara ustida tarmoq hujayralar egallab olingan yoki band bo'lmagan holda. Ushbu algoritm taniqli odamga asoslangan kasaba uyushmasini topish algoritmi.[1] Dastlab algoritmni Jozef Xoshen va Raul Kopelman 1976 yilda chop etilgan "Perkolatsiya va klasterni taqsimlash. I. Klasterda bir nechta yorliqlash usuli va kritik kontsentratsiya algoritmi".[2]

Perkolyatsiya nazariyasi

Perkolyatsiya nazariyasi xulq-atvori va statistika ning klasterlar kuni panjaralar. Bizda har bir katakni egallashi mumkin bo'lgan katta kvadrat panjaramiz bor deylik ehtimollik p va ehtimollik bilan bo'sh bo'lishi mumkin 1 – p. Qo'shni egallab olingan hujayralarning har bir guruhi klaster hosil qiladi. Qo'shnilar umumiy tomonga ega bo'lgan hujayralar deb ta'riflanadi, lekin faqat burchakka ega bo'lganlar emas, ya'ni biz buni ko'rib chiqamiz 4 ta ulangan mahalla bu yuqori, pastki, chap va o'ng. Har bir egallab olingan hujayra o'z mahallasi maqomidan mustaqil. Klasterlar soni, har bir klasterning kattaligi va ularning tarqalishi perkolatsiya nazariyasining muhim mavzularidir.

Ko'rib chiqing 5x5 (a) va (b) -rasmdagi kataklar.
Shakl (a) da, band bo'lish ehtimoli quyidagicha p = 6/25 = 0,24.
Shakl (b) da, band bo'lish ehtimoli quyidagicha p = 16/25 = 0.64.

Klasterlarni topish uchun Hoshen-Kopelman algoritmi

Ushbu algoritmda biz katakchalarni qidiramiz va ularni klaster yorliqlari bilan belgilaymiz. Skanerlash jarayoni deb nomlanadi Raster skanerlash. Algoritm katakchani katakchalarni skanerlash va katakning bandligini yoki yo'qligini tekshirishdan boshlanadi. Agar katak egallab olingan bo'lsa, unda u klaster yorlig'i bilan belgilanishi kerak. Ushbu klaster yorlig'i ushbu hujayraning qo'shnilariga qarab belgilanadi. (Buning uchun biz foydalanamiz Union-Find algoritmi bu keyingi bobda tushuntirilgan.) Agar katakda biron bir qo'shni qo'shnisi bo'lmasa, katakka yangi yorliq beriladi.[3]

Ittifoqni topish algoritmi

Ushbu algoritm hisoblash uchun oddiy usul ekvivalentlik darslari. Funktsiyani chaqirish birlashma (x, y) shuni belgilaydi, buyumlar x va y bir xil ekvivalentlik sinfining a'zolari. Chunki ekvivalentlik munosabatlari o'tish davri; ga teng bo'lgan barcha narsalar x ga teng bo'lgan barcha narsalarga tengdir y. Shunday qilib har qanday buyum uchun x, barchasi teng bo'lgan narsalar to'plami mavjud x . Ushbu to'plam uning ekvivalentligi sinfidir x a'zo. Ikkinchi funktsiya topish (x) ekvivalentlik sinfining vakil vakilini qaytaradi x tegishli.

Psevdokod

Davomida raster skanerlash Gridning ishg'ol qilingan katakchasiga duch kelganda, qo'shni hujayralar skanerdan o'tkazilib, ularning birortasi allaqachon tekshirilganligini tekshiradi. Agar biz allaqachon skanerlangan qo'shnilarni topsak, the birlashma Ushbu qo'shni hujayralar aslida bir xil ekvivalentlik sinfining a'zolari ekanligini aniqlash uchun operatsiya amalga oshiriladi. Keyintopmoq amaldagi katakcha belgilanadigan ekvivalentlik sinfining vakilini topish uchun operatsiya amalga oshiriladi.

Boshqa tomondan, agar hozirgi katakchaning qo'shnilari bo'lmasa, unga yangi, ilgari ishlatilmagan yorliq beriladi. Butun panjara shu tarzda qayta ishlanadi.

Keyingi psevdokod dan havola qilinadi Tobin Frikening bir xil algoritmni amalga oshirish.[3]

Gridda rastrli skanerlash va yorliqlashlarge_label = 0; x uchun 0 dan n_ ustunlargacha {uchun 0 dan n_rows gacha {uchun [x, y] bo'lsa, keyin chap = egallab olingan [x-1, y] uchun; # Bu yuqorida [x-1, y] belgisi = egallab olingan [x, y-1] belgisi bo'lishi kerak emasmi; # Bu ham xuddi o'sha? if (left == 0) and (above == 0) then / * Yuqorida ham, chap tomonda ham yorliq. * / large_label = large_label + 1; / * Yangi, hali ishlatilmagan klaster yorlig'ini yarating. * / yorliq [x, y] = eng katta_ yorliq; aks holda (chapda! = 0) va (yuqorida == 0) bo'lsa, u holda / * Bitta qo'shnimiz, chap tomonda. * / yorliq [x, y] = topish (chapda); aks holda (chapda == 0) va (yuqorida! = 0) bo'lsa, unda / * Yuqorida bitta qo'shnimiz. * / yorliq [x, y] = topish (yuqorida); else / * Qo'shnilar ikkalasi ham chapda va yuqorida. * / birlashma (chapda, yuqorida); / * Chap va yuqoridagi klasterlarni bog'lang. * / yorliq [x, y] = topish (chapda); }}Ittifoqbo'sh birlik (int x, int y) {teglar [find (x)] = find (y);}Topingint topish (int x) {int y = x; while (yorliqlar [y]! = y) y = yorliqlar [y]; while (yorliqlar [x]! = x) {int z = yorliqlar [x]; yorliqlar [x] = y; x = z; } qaytish y;}

Misol

Quyidagi misolni ko'rib chiqing. Tarmoqdagi qorong'u hujayralar shakl (a) ular ishg'ol qilinganligini va oqlar bo'sh ekanligini anglatadi. Shunday qilib, ushbu kirishda H-K algoritmini ishga tushirish orqali biz natijani ko'rsatilgandek olamiz rasm (b) belgilangan barcha klasterlar bilan.

Algoritm kirish katakchasini hujayradan hujayraga quyidagicha ishlov beradi: Aytaylik, grid ikki o'lchovli massiv.

  • Hujayradan boshlab panjara [0] [0] ya'ni birinchi hujayra. Hujayra egallab olingan va uning chap yoki yuqorisidagi katakchalari yo'q, shuning uchun biz ushbu katakchani yangi yorliq bilan belgilaymiz 1.
  • panjara [0] [1] va panjara [0] [2] ikkalasi ham band emas, shuning uchun ular etiketlanmagan.
  • panjara [0] [3] ishg'ol qilingan, shuning uchun chapdagi katakchani tekshiring, u bo'sh emas, shuning uchun biz joriy yorliq qiymatini oshiramiz va yorliqni yorliqqa quyidagicha belgilaymiz 2.
  • panjara [0] [4], panjara [0] [5] va panjara [1] [0] egasiz, shuning uchun ular etiketlanmagan.
  • panjara [1] [1] ishg'ol qilingan, shuning uchun chap va yuqoridagi katakchani tekshiring, ikkala katak ham bo'sh, shuning uchun yangi yorliq belgilang 3.
  • panjara [1] [2] egallagan, shuning uchun chap va yuqoridagi katakchani belgilang, faqat chapdagi katak egallaydi, shuning uchun chapdagi katak yorlig'ini ushbu katakka belgilang 3.
  • panjara [1] [3] ishg'ol qilingan, shuning uchun katakchani chapga va yuqoridan tekshiring, ikkala katak ham band, shuning uchun ikkala klasterni birlashtiring va yuqoridagi katakning klaster yorlig'ini chapdagi katakka va shu katakka belgilang, ya'ni. 2. (Birlashtirish algoritmi yordamida birlashganda barcha kataklar yorliq bilan belgilanadi 3 ga 2)
  • panjara [1] [4] egallagan, shuning uchun chap va yuqoridagi katakchani belgilang, faqat chapdagi katak egallaydi, shuning uchun chapdagi katak yorlig'ini ushbu katakka belgilang 2.
  • panjara [1] [5] , panjara [2] [0] va panjara [2] [1] egasiz, shuning uchun ular etiketlanmagan.
  • panjara [2] [2] egallagan, shuning uchun chap va yuqoridagi katakchani belgilang, faqat yuqoridagi katakka egalik qiladi, shuning uchun yuqoridagi katak yorlig'ini ushbu katakka belgilang 3.
  • panjara [2] [3] , panjara [2] [4] va panjara [2] [5] egasiz, shuning uchun ular etiketlanmagan.
  • panjara [3] [0] ishg'ol qilingan, shuning uchun yuqoridagi bo'sh joyni tekshiring, shuning uchun biz joriy yorliq qiymatini oshiramiz va yorliqni quyidagicha uyaga belgilaymiz 4.
  • panjara [3] [1] egallagan, shuning uchun chap va yuqoridagi katakchani belgilang, faqat chapdagi katakka egalik qiladi, shuning uchun chapdagi katak yorlig'ini ushbu katakka belgilang 4.
  • panjara [3] [2] egasiz, shuning uchun u etiketlanmagan.
  • panjara [3] [3] ishg'ol qilingan, shuning uchun chap va yuqoridagi katakchani tekshiring, ikkala katak ham bo'sh, shuning uchun yangi yorliq belgilang 5.
  • panjara [3] [4] bo'sh joy mavjud, shuning uchun chapga va yuqoridagi katakchani belgilang, faqat chapdagi katakka egalik qiladi, shuning uchun chapdagi katak yorlig'ini ushbu katakka belgilang 5.
  • panjara [3] [5] , panjara [4] [0] va panjara [4] [1] egasiz, shuning uchun ular etiketlanmagan.
  • panjara [4] [2] ishg'ol qilingan, shuning uchun chap va yuqoridagi katakchani tekshiring, ikkala katak ham bo'sh, shuning uchun yangi yorliq belgilang 6.
  • panjara [4] [3] egallagan, shuning uchun chapga va yuqoridagi katakchani tekshiring, ikkalasi ham chapga va yuqoridagi katakka ega, shuning uchun ikkala klasterni birlashtiring va yuqoridagi katak yorlig'ini chapdagi katakka va shu katakka belgilang, ya'ni. 5. (Birlashtirish algoritmi yordamida birlashganda barcha kataklar yorliq bilan belgilanadi 6 ga 5).
  • panjara [4] [4] egasiz, shuning uchun u etiketlanmagan.
  • panjara [4] [5] ishg'ol qilingan, shuning uchun chap va yuqoridagi katakchani tekshiring, ikkala katak ham bo'sh, shuning uchun yangi yorliq belgilang 7.
  • panjara [5] [0] panjara [5] [1] panjara [5] [2] va panjara [5] [3] egasiz, shuning uchun ular etiketlanmagan.
  • panjara [5] [4] ishg'ol qilingan, shuning uchun chap va yuqoridagi katakchani tekshiring, ikkala katak ham bo'sh, shuning uchun yangi yorliq belgilang 8.
  • panjara [5] [5] egallagan, shuning uchun chap va yuqoridagi katakchani tekshiring, ikkalasi ham chap va yuqoridagi katakchani egallab oling, shuning uchun ikkala klasterni birlashtiring va yuqoridagi katakning klaster yorlig'ini chapdagi katakka va shu katakka belgilang, ya'ni. 7. (Birlashtirish algoritmi yordamida birlashganda barcha kataklar yorliq bilan belgilanadi 8 ga 7).
Ko'rib chiqing 6x6 (a) va (b) -rasmdagi kataklar.
Shakl (a), bu Hoshen-Kopelman algoritmiga kirish.
Shakl (b), Bu barcha klasterlar belgilangan algoritmning chiqishi.

Ilovalar

Shuningdek qarang

Adabiyotlar

  1. ^ https://www.cs.princeton.edu/~rs/AlgsDS07/01UnionFind.pdf
  2. ^ Xoshen, J .; Kopelman, R. (1976 yil 15 oktyabr). "Perkolatsiya va klasterni taqsimlash. I. Klasterning ko'p yorliqli texnikasi va muhim konsentratsiya algoritmi". Fizika. Vahiy B.. 14 (8): 3438–3445. doi:10.1103 / PhysRevB.14.3438 - APS orqali.
  3. ^ a b Frike, Tobin (2004-04-21). "Klasterni identifikatsiyalash uchun Hoshen-Kopelman algoritmi". ocf.berkeley.edu. Olingan 2016-09-17.
  4. ^ Christian Joas. "Hoshen-Kopelman algoritmiga kirish va uni nodal domen statistikasida qo'llash" (PDF). Webhome.weizmann.ac.il. Olingan 2016-09-17.
  5. ^ "Klasterlash" (PDF).
  6. ^ "Loyqa c-klasterlarni anglatadi".