社團檢測之K Shell演算法

2021-09-22 08:24:11 字數 1624 閱讀 5115

本文簡單介紹節點重要性度量演算法原理及其python實現

k-shell 方法遞迴地剝離網路中度數小於或等於 k 的節點,具體劃分過程如下: 假設網路中不存在度數為 0 的孤立節點。從度指標的角度分析,度數為 1的節點是網路中最不重要的節點,因此首先將度數為 1 的節點及其連邊從網路中刪除。刪除操作進行之後的網路中會出現新的度數為 1 的節點,接著將這些新出現的度數為 1 的節點及其連邊刪除。重複上述操作,直到網路中不再新出現度數為 1的節點為止。此時所有被刪除的節點構成第一層,即 1-shell,節點的 ks 值等於 1。剩下的網路中,每個節點的度數至少為2。繼續重複上述刪除操作,得到 ks 值等於 2 的第二層,即 2-shell。依此類推,直到網路中所有的節點都被賦予 ks 值。

# -*- coding: utf-8 -*-

"""created on 17-12-17

@summary: kshell演算法節點重要性度量

@author: dreamhome

"""from get_graph import read_graph_from_file

defkshell

(graph)

:"""

根據kshell演算法計算節點的重要性

:param graph: 圖

:return: importance_dict

"""importance_dict =

ks =

1while graph.nodes():

# 暫存度為ks的頂點

temp =

node_degrees_dict = graph.degree(

)# 每次刪除度值最小的節點而不能刪除度為ks的節點否則產生死迴圈。這也是這個演算法存在的問題。

kks =

min(node_degrees_dict.values())

while

true

:for k, v in node_degrees_dict.items():

if v == kks:

graph.remove_node(k)

node_degrees_dict = graph.degree(

)if kks not

in node_degrees_dict.values():

break

importance_dict[ks]

= temp

ks +=

1return importance_dict

if __name__ ==

"__main__"

:# graph = nx.graph()

# graph.add_edges_from(

# [(1, 4), (2, 4), (3, 4), (4, 5), (5, 6), (5, 7), (3, 5), (6, 7)])

# print kshell(graph)

path =

"/home/dreamhome/network-datasets/karate/karate.paj"

graph = read_graph_from_file(path)

print kshell(graph)

複雜網路K Shell演算法及其Python實現

the rest of the world may follow the rules,but i must follow my heart 隨心所欲即使其他人隨波逐流。k shell 方法遞迴地剝離網路中度數小於或等於 k 的節點,具體劃分過程如下 假設網路中不存在度數為 0 的孤立節點。從度指標的...

文字檢測之 craft檢測演算法

名稱 character region awareness for text detection 開源 核心思想 本 為2019年南韓學者提出的一種字元級的文字檢測演算法,取得了不錯的檢測效果.craft文字檢測的主要思想 影象分割的思想,採用u net結構,先下取樣再上取樣,非畫素級分割,而是將乙...

社團劃分演算法原理整理

特點 分為兩個大小已知的社團 kernighan lin演算法,1970年提出,試探優化法,基於一種採用貪婪演算法原理講網路劃分為兩個大小已知的社團的二分法,七級本思想是在網路劃分時引入乙個增益函式q,通過交換節點對,使得q值最大。q 為兩個社團內部的邊數 兩個社團之間的邊數 特點 一次分成兩個,僅...