networkx.generators.trees.prefix_tree
的用法。用法:
prefix_tree(paths)
從路徑列表創建有向前綴樹。
通常路徑被說明為字符串或整數列表。
“prefix tree” 表示字符串的前綴結構。每個節點代表某個字符串的前綴。根代表空前綴,單字母前綴有子前綴,每個雙字母前綴都有子前綴,從父節點對應的單字母開始,依此類推。
更一般地,前綴不需要是字符串。前綴是指序列的開始。根對於每個一個元素前綴都有子元素,並且對於以父元素的一個元素序列開頭的每個兩個元素前綴它們都有子元素,依此類推。
請注意,此實現使用帶有屬性的整數節點。每個節點都有一個屬性“source”,其值為該節點對應的路徑的原始元素。例如,假設
paths
由一條路徑組成:“can”。那麽表示該路徑的節點[1, 2, 3]
具有“source”值“c”, “a”和“n”。一個節點的所有後代在與該節點關聯的序列/路徑中都有一個公共前綴。從返回的樹中,每個節點的前綴可以通過遍曆樹到根並沿途累積 “source” 值來構造。
根節點始終為
0
並具有 “source” 屬性None
。根是唯一度數為零的節點。 nil 節點始終為-1
並具有 “source” 屬性"NIL"
。 nil 節點是out-degree 為零的唯一節點。- paths: iterable of paths:
一個可迭代的路徑,它們本身就是序列。這些序列之間的匹配前綴用前綴樹的節點來標識。樹的一個葉子與每條路徑相關聯。 (相同的路徑與樹的同一葉相關聯。)
- 樹:DiGraph
表示由
paths
生成的前綴樹組成的樹狀結構的有向圖。節點是定向的“downward”,從父節點到子節點。添加一個特殊的“synthetic” 根節點作為每個路徑中第一個節點的父節點。添加一個特殊的 “synthetic” 葉節點,即 “nil” 節點-1
,作為代表路徑中最後一個元素的所有節點的子節點。 (從技術上講,添加這個 nil 節點使其不是樹狀圖,而是有向無環圖;移除 nil 節點使其成為樹狀圖。)
參數:
返回:
注意:
前綴樹也稱為
trie
。例子:
從具有公共前綴的字符串列表中創建前綴樹:
>>> paths = ["ab", "abs", "ad"] >>> T = nx.prefix_tree(paths) >>> list(T.edges) [(0, 1), (1, 2), (1, 4), (2, -1), (2, 3), (3, -1), (4, -1)]
葉節點可以作為 nil 節點的前輩獲得:
>>> root, NIL = 0, -1 >>> list(T.predecessors(NIL)) [2, 3, 4]
要恢複生成前綴樹的原始路徑,請從節點
-1
向上遍曆樹到節點0
:>>> recovered = [] >>> for v in T.predecessors(NIL): ... prefix = "" ... while v != root: ... prefix = str(T.nodes[v]["source"]) + prefix ... v = next(T.predecessors(v)) # only one predecessor ... recovered.append(prefix) >>> sorted(recovered) ['ab', 'abs', 'ad']
相關用法
- Python NetworkX preferential_attachment用法及代碼示例
- Python NetworkX preflow_push用法及代碼示例
- Python NetworkX predecessor用法及代碼示例
- Python NetworkX projected_graph用法及代碼示例
- Python NetworkX power用法及代碼示例
- Python NetworkX panther_similarity用法及代碼示例
- Python NetworkX parse_edgelist用法及代碼示例
- Python NetworkX pydot_layout用法及代碼示例
- Python NetworkX pygraphviz_layout用法及代碼示例
- Python NetworkX pagerank_numpy用法及代碼示例
- Python NetworkX pagerank_scipy用法及代碼示例
- Python NetworkX parse_graphml用法及代碼示例
- Python NetworkX planted_partition_graph用法及代碼示例
- Python NetworkX py_random_state用法及代碼示例
- Python NetworkX planar_layout用法及代碼示例
- Python NetworkX parse_multiline_adjlist用法及代碼示例
- Python NetworkX parse_adjlist用法及代碼示例
- Python NetworkX pagerank用法及代碼示例
- Python NetworkX negative_edge_cycle用法及代碼示例
- Python NetworkX voronoi_cells用法及代碼示例
- Python NetworkX numerical_edge_match用法及代碼示例
- Python NetworkX inverse_line_graph用法及代碼示例
- Python NetworkX LFR_benchmark_graph用法及代碼示例
- Python NetworkX write_graph6用法及代碼示例
- Python NetworkX DiGraph.__contains__用法及代碼示例
注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.generators.trees.prefix_tree。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。