霍森-科佩爾曼算法
霍森–科佩爾曼算法基於聯合-查找算法,用於標記佔據-非佔據網格團簇。[1] 此算法最早由霍森和科佩爾曼在1976年的文章《Percolation and Cluster Distribution. I. Cluster Multiple Labeling Technique and Critical Concentration Algorithm》中提出。[2]
逾滲理論
[編輯]逾滲理論研究格點上團簇的行為和統計性質。設在一個正方格子中每個元胞佔據概率為p
、非佔據概率為1–p
。每一組相鄰(共邊)的佔據元胞各自形成一個團簇。團簇的數目、尺寸分佈是逾滲理論中的重要問題。
|
|
一個5x5 格子。(a)中佔據概率為 p = 6/25 = 0.24 。(b)中佔據概率為 p = 16/25 = 0.64 。
|
霍森–科佩爾曼算法查找、 標記團簇
[編輯]霍森-科佩爾曼算法的主要步驟是:掃描格點、查找佔據元胞並將其用其所屬團簇的序號標記。掃描格點時逐行掃描,一行結束後從下一行開頭繼續掃描。掃描每一個元胞時,若元胞被佔據,則根據其相鄰的已標記所屬團簇的元胞將其標記,具體的操作要使用聯合-查找算法。如果元胞沒有任何相鄰的、被標記的佔據元胞,那麼就用一個新的記號標記之。[3]
聯合-查找算法
[編輯]聯合-查找算法是一種計算等價類的方法。 定義函數 union(x,y)
將元素 x
和 y
劃為等價類。 因為等價關係有傳遞性,所有與x
等價的元素與y
也等價。因此,對於每個元素x
,都存在一組元素與x
等價。這些元素構成了x
的等價類。在此基礎上,定義函數find(x)
以返回 x
所屬的等價類的代表元。
偽代碼
[編輯]掃描網格時,每掃到一個佔據元胞,就要查看其相鄰的所有元胞。若某相鄰元胞被佔據且已被掃過,那麼就執行union
操作,將被掃描的元胞以及相鄰的元胞劃入同一個等價類;如果被掃描元胞與兩個不同標記的元胞相鄰,則將兩個團簇合併為一個。之後,執行find
操作,找到等價類的代表元並以之標記等價類中的所有元胞。如果當前元胞沒有被掃過的佔據的相鄰元胞,那麼用未使用的標籤標記之。
Raster Scan and Labeling on the Grid largest_label = 0; for x in 0 to n_columns { for y in 0 to n_rows { if occupied[x,y] then left = occupied[x-1,y]; above = occupied[x,y-1]; if (left == 0) and (above == 0) then /* Neither a label above nor to the left. */ largest_label = largest_label + 1; /* Make a new, as-yet-unused cluster label. */ label[x,y] = largest_label; else if (left != 0) and (above == 0) then /* One neighbor, to the left. */ label[x,y] = find(left); else if (left == 0) and (above != 0) then /* One neighbor, above. */ label[x,y] = find(above); else /* Neighbors BOTH to the left and above. */ union(left,above); /* Link the left and above clusters. */ label[x,y] = find(left); } }
Union void union(int x, int y) { labels[find(x)] = find(y); }
Find int find(int x) { int y = x; while (labels[y] != y) y = labels[y]; while (labels[x] != x) { int z = labels[x]; labels[x] = y; x = z; } return y; }
應用
[編輯]參見
[編輯]參考文獻
[編輯]- ^ 存档副本 (PDF). [2019-05-03]. (原始內容 (PDF)存檔於2021-03-08).
- ^ Hoshen, J.; Kopelman, R. Percolation and cluster distribution. I. Cluster multiple labeling technique and critical concentration algorithm. Phys. Rev. B. 15 October 1976, 14 (8): 3438–3445. doi:10.1103/PhysRevB.14.3438.
- ^ Fricke, Tobin. The Hoshen-Kopelman Algorithm for cluster identification. ocf.berkeley.edu. 2004-04-21 [2016-09-17]. (原始內容存檔於2021-05-07).
- ^ Journal of Applied Sciences. Scialert.net. [2016-09-17]. (原始內容 (PDF)存檔於2017-10-07).
- ^ Christian Joas. Introduction to the Hoshen-Kopelman algorithm and its application to nodal domain statistics (PDF). Webhome.weizmann.ac.il. [2016-09-17]. (原始內容 (PDF)存檔於2016-09-15).
- ^ Clustering (PDF). (原始內容 (PDF)存檔於2021-04-21).
- ^ Fuzzy c-means clustering. (原始內容存檔於2020-10-17).