我正在尝试在Python中执行有向图的传递约简

2024-04-26

作为警告,我对 python 仍然有点缺乏经验

我正在尝试使用 networkx 库执行有向图的传递约简。我已经想出了一个算法,但在实现它时遇到了困难。经过快速搜索,我在其他堆栈交换问题中找到了与我类似的算法,但没有演示如何实际编码该算法。

这是我的算法:

    For X in Nodes
    For Y in Nodes
    For z in Nodes
    if (x,y) != (y,z) and (x,y) != (x,z)
    if edges xy and yz are in Graph
    delete xz

这是我用 python 表达这一点的尝试:

    G = graph
    N = G.Nodes()
    for  x in N:
       for y in N:
          for z in N:
             if (x,y) != (y,z) and (x,y) != (x,z):
                if (x,y) and (y,z) in G:
                    G.remove_edge(x,z)

我认为我没有正确调用网络中边的每个排列,并且正在考虑尝试使用 itertools。即使我有所有可能的排列,我也不知道如何使用这些信息来实现算法。

任何帮助都会很棒。谢谢!


以下似乎有效,至少对于我提供的示例数据而言。如果您有一个具体的案例,但没有看到它会很有帮助。

import random
import pprint

class Graph:
    nodes = []
    edges = []
    removed_edges = []
    def remove_edge(self,x,y):
        e = (x,y)
        try:
            self.edges.remove(e)
            print("Removed edge %s" % str(e))
            self.removed_edges.append(e)
        except:
            print("Attempted to remove edge %s, but it wasn't there" % str(e))

    def Nodes(self):
        return self.nodes

    # Sample data
    def __init__(self):
        self.nodes = [1,2,3,4,5]
        self.edges = [
            (1,2),
            (1,3),
            (1,4),
            (1,5),
            (2,4),
            (3,4),
            (3,5),
            (4,5),
        ]

G = Graph()
N = G.Nodes()
for  x in N:
   for y in N:
      for z in N:
         #print("(%d,%d,%d)" % (x,y,z))
         if (x,y) != (y,z) and (x,y) != (x,z):
            if (x,y) in G.edges and (y,z) in G.edges:
                G.remove_edge(x,z)

print("Removed edges:")
pprint.pprint(G.removed_edges)
print("Remaining edges:")
pprint.pprint(G.edges)

Output:

Removed edge (1, 4)
Attempted to remove edge (1, 4), but it wasn't there
Removed edge (1, 5)
Attempted to remove edge (2, 5), but it wasn't there
Removed edge (3, 5)
Removed edges:
[(1, 4), (1, 5), (3, 5)]
Remaining edges:
[(1, 2), (1, 3), (2, 4), (3, 4), (4, 5)]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我正在尝试在Python中执行有向图的传递约简 的相关文章

随机推荐

  • HTML 页面中的目录选择器

    如何在 html 页面中创建目录选择器 如果我使用输入文件元素 我只能选择文件 但我需要选择目录 我需要这样做 因为用户应该在他的计算机内选择正确的路径 有什么解决办法吗 试试这个 我想它会对你有用
  • 有没有C语言的跨平台GUI库? [复制]

    这个问题在这里已经有答案了 可能的重复 GUI 应用程序的跨平台 C 库 https stackoverflow com questions 2018850 cross platform c library for gui apps 有没有
  • XMPP会议室邀请函

    在我的聊天应用程序中 我想实现群聊功能 同样 我想创建房间并向我的朋友发送加入房间的邀请 这是我加入并邀请朋友进入房间的代码 创建房间 Create Room btn CreateRoom Button findViewById R id
  • LLDB 给出局部变量的“使用未声明的标识符”错误

    在以下函数中 我无法在 LLDB 中看到 recordMap for 循环打印键 recordType 设置正确 但 p recordMap 给出错误 使用未声明的标识符 我可以在 LLDB 中很好地看到变量 recordType 所以我处
  • python 和 pandas - 如何使用 iterrows 访问列

    wowee 如何将 iterrows 与 python 和 pandas 一起使用 如果我进行行迭代 我是否应该无法使用 row COL NAME 访问 col 以下是列名称 print df Int64Index 152 entries
  • .net 中什么是类型安全?

    什么是类型安全 它是什么意思以及为什么它很重要 如果你问 类型安全 的概念是什么general意味着 它是代码的特征 允许开发人员确定某个值或对象将表现出某些属性 即属于某种类型 以便他 她可以以特定方式使用它 而不必担心意外或未定义的情况
  • 多个 Facebook 评论实例

    每当用户使用 JQuery 执行特定操作时 我都需要在页面上加载多个 Facebook 评论框 http developers facebook com docs reference plugins comments 如果我要一次加载所有评
  • 在 MediaElement.js 中的视频末尾停止而不是倒带

    我想知道如何在视频结束时停止 MediaElement js 播放器 我想知道如何在视频结束时停止 mediaelement js 播放器 我希望保留最后一帧 而不是像现在一样倒带显示第一帧 是否可以改变这种行为 我为这个问题编写了一个修复
  • 如何在制表符中显示选择编辑器文本而不是值

    As the 编辑器选择 http tabulator info docs 4 1 edit edit values steve Steve Boberson bob Bob Jimmerson jim Jim Stevenson 我可以发
  • 覆盖 gem 的 lib 文件夹中的私有方法

    spree auth devise gem 中有一个私有方法 该方法位于控制器 UserSessionsController 内部https github com spree spree auth devise blob master li
  • Node 和 NPM 运行脚本和 Ctrl-C 触发 SIGINT 两次

    我在运行的一个 Nodejs 应用程序上遇到了问题npm start 这只是node app js 我的应用程序包含一个 sigint 处理程序 如下所示 process on SIGINT gt db disconnect then pr
  • 在Python中对字典键进行排序[重复]

    这个问题在这里已经有答案了 我有一个字典 其中每个键引用一个 int 值 根据值将键排序到列表中的最佳方法是什么 我喜欢这一个 sorted d key d get
  • 如何以编程方式将 ContextMenu 添加到系统托盘图标?

    我想以编程方式向托盘图标添加上下文菜单 这样当我右键单击托盘图标时 它应该显示菜单 我应该如何为托盘图标编写右键单击事件处理程序 我已经尝试过以下方法 private void Icon MouseRightClick object sen
  • Business Catalyst:检查我们是否位于 Liquid 的根 URL 上

    我想使用 Liquid 标记来测试正在查看的页面是否是主页 但特别是网站的根 URL 例如www mysite com 我尝试使用 globals get 因为根据BC 文档 http docs businesscatalyst com r
  • mongodb Nodejs Each 与 toArray

    我快速浏览了一下 没有找到任何令我满意的答案 但基本上我已经开始使用带有express和mongodb的node js来创建webapi 而不是通常的 Net MVC Web API路线 但我注意到的一件事是 为了返回结果集合 我正在以相当
  • 在 Django 中,当登录 URL 以 ?next=/accounts/logout/ 结尾时,停止重定向回注销

    在我的模板中 我目前正在使用next参数将用户重定向回登录页面之前的页面 a href Log in a The firstof标签确保万一request path无效 那么它将重定向回根 URL 这在除注销页面之外的每个页面上都适用 如果
  • 如何保证清理代码在 Windows C++ 中运行(SIGINT、错误分配和关闭窗口)

    我有一个 Windows C 控制台程序 如果我不调用ReleaseDriver 在我的程序结束时 某些硬件会进入错误状态 并且在不重新启动的情况下无法再次使用 我想确定一下ReleaseDriver 即使程序异常退出 例如如果我点击Ctr
  • 在 JDialog 中使用 JCalendar

    我的程序使用JDialogs 打开表格并采用我想要使用的表格JCalendar让用户选择一个日期 然后我将其用于其他方法 我已经下载了JCalendar图书馆 我读了一些示例代码 但仍然不知道该怎么做 我有一个想法 在表单中 您按下一个按钮
  • jQuery 动画分几步?

    我正在编写自己的动画函数是为了好玩 但我无法真正获得流畅的动画 jQuery 每个动画的步骤比例非常好 使其非常流畅 我想知道他们用来计算要采取多少步骤的通用公式是什么 这取决于动画的持续时间 jQuery 使用其默认设置存储在jQuery
  • 我正在尝试在Python中执行有向图的传递约简

    作为警告 我对 python 仍然有点缺乏经验 我正在尝试使用 networkx 库执行有向图的传递约简 我已经想出了一个算法 但在实现它时遇到了困难 经过快速搜索 我在其他堆栈交换问题中找到了与我类似的算法 但没有演示如何实际编码该算法