the rest of the world may follow the rules,but i must follow my heart!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 = 1
while 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 += 1
return 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)
網路流 EK演算法及其優化
今天上午我彷彿知道了什麼叫做網路流,這裡推薦一篇部落格,大家入門網路流的可以看一下這篇部落格,保證一看就懂!codevs 1993 include include include include using namespace std const int inf 0x7ffffff queue q ...
串的模式匹配演算法 BF演算法及其複雜度
s串為主串,t為待匹配串,用i j分別指示s和t中的字元位置,i j初值均為0。演算法步驟 1 若當前比較的字元是s i t j 則繼續向後比較,執行 i j 2 若當前正在比較的字元不匹配呢?那麼j回溯到位置0 即令j 0 i呢?回溯到主串的i j 1處 0 1 2 3 4 5 6 7 a b a...
Python中選擇排序及其演算法複雜度
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的資料元素排完。下圖為其演示圖 選擇排序...