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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。