Python的有向循环图实用程序

dcggraph的Python项目详细描述


Python的有向循环图实用程序

安装

pip install dcggraph

说明

此包当前用于从给定的 有向图中允许循环的节点。有些要点需要澄清 向上混乱:

  • directed:表示两个节点之间的边只能在一个节点中移动 方向(尽管在相同的两个节点之间可以有两条方向相反的边)
  • predicated:意味着即使一个节点是可访问的,它仍然必须 通过预测试(即predicate(node) == True)以便 返回。
    • 这意味着图中实际上有两个搜索过滤器:
      1. 节点必须可以在没有任何过滤的情况下访问
      2. 节点必须通过谓词测试
  • cyclic:意味着如果从一个节点开始,然后跟随一组 路径,则可以在同一个节点结束。这让事情变得更加困难 如果你和达格一起工作。在

周期是棘手的

处理循环的主要技巧是让谓词返回3个状态:

  1. PASS:表示节点自信地传递谓词
  2. FAIL:表示节点确信谓词失败
  3. WAIT:表示节点不确定它是否通过,并希望延迟提供 在看到更多节点之前有信心的回答(因为起点在循环图中很重要)

从谓词返回WAIT状态的节点将被放入unresolved列表中,并且每次另一个节点返回PASS或{}时都会重新计算。在对所有可到达的节点进行评估之后,unresolved列表中的任何剩余节点都将降级为FAIL状态,因为它们无法下定决心,因此它们没有更多的机会给出真正的答案。在

对于我在图中使用谓词搜索的情况,这个算法似乎很有效。我是positive存在比这里实现的更好的算法。在

美国石油学会

其主要特点是预测图的压缩和搜索。 除了下面的代码片段外,还可以查看测试的用法示例

importrefromdcggraphimportDCGnode,DCGedge,DCGgraphfromdcggraph.searchimportPredicateResult,DCGsearchg=DCGgraph()n0=g.create_node("n0")n1=g.create_node("n1")n2=g.create_node("n2")n3=g.create_node("n3")n4=g.create_node("n4")g.create_edge(n0,n1)g.create_edge(n0,n2)g.create_edge(n1,n3)g.create_edge(n1,n4)defeven(node,visited,passed,failed):iffre.match("[a-z][02468]",node.name):returnPredicateResult.PASSelse:returnPredicateResult.FAILs1=DCGsearch(g,even)# reuse the search object to cache FAIL/PASS results between searchesassertEqual(len(s1.search(n0)),3)assertEqual(len(s1.search(n1)),1)assertEqual(len(s1.search(n2)),1)assertEqual(len(s1.search(n3)),0)assertEqual(len(s1.search(n4)),1)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在Android上的可访问文件夹中创建文件?(非根)   tomcat Unix脚本未使用Process Runtime在Java中运行   模拟器中的java Android AudioTrack速度异常   java是否创建具有特定@ConditionalOnProperty的注释?   java如何使用json数据从gridview中的URL加载图像?(类别和子类别)   ConcurrentHashMap的java锁定值对象   如何在具有额外属性的Java枚举上执行Javadoc?   java如何修复SocketException连接重置问题?   无附加表的java JPA实体继承   java Android应用程序在启动屏幕后崩溃   java如何将Arraylist保存到文件?   java restTemplate从restfull Web服务获取文件数组   java活动带布局隐藏导航栏   socket未接收任何内容的java BufferedReader