當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python NetworkX prefix_tree用法及代碼示例


本文簡要介紹 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']

相關用法


注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.generators.trees.prefix_tree。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。