寻求反转(反转?镜像?翻转)DAG 的算法

2024-01-17

我正在寻找一种算法来“反转”(反转?从里到外?) 有向无环图:

       A*      # I can't ascii-art the arrows, so just
      / \      # pretend the slashes are all pointing
     B   C     # "down" (south-east or south-west)
    /   / \    # e.g. 
   G   E   D   # A -> (B -> G, C -> (E -> F, D -> F))
        \ /
         F

我使用的表示形式是不可变的,真正是 DAG(没有 “父”指针)。我想以某种方式遍历图表 在构建具有等效节点的“镜像”图时,但是 节点之间的关系方向反转。

         F*
        / \
   G*  E   D   # F -> (E -> C -> A, D -> C -> A), G -> B -> A
    \   \ /    # 
     B   C     # Again, arrows point "down"
      \ /      # 
       A       # 

所以输入是一组“根”(这里是{A})。输出应该是 结果图中的“根”集合:{G,F}。 (我所说的根是指一个节点 没有传入的参考。叶子是没有输出的节点 参考。)

输入的根成为输出和签证的叶子 反之亦然。该变换应该是其自身的逆变换。

(出于好奇,我想向我正在使用的库添加一个功能 表示用于结构查询的 XML,我可以通过它映射每个节点 第一棵树到第二棵树的“镜像”(以及后面 再次)为我的查询规则提供更多的导航灵活性。)


遍历图,构建一组反向边和叶节点列表。

首先使用叶节点(现在是根节点)对反向边执行拓扑排序。

根据从排序列表末尾开始的反转边构造反转图。由于节点是按逆拓扑顺序构造的,因此保证在构造节点之前已经构造了给定节点的子节点,因此可以创建不可变的表示。

如果您使用跟踪与节点关联的两个方向上的所有链接的中间表示结构,则为 O(N);如果使用排序来查找节点的所有链接,则为 O(NlnN)。对于小图或不受堆栈溢出影响的语言,您可以懒惰地构造图,而不是显式执行拓扑排序。因此,这在一定程度上取决于您所实现的内容,这会有多大的不同。

A -> (B -> G, C -> (E -> F, D -> F))

original roots: [ A ]
original links: [ AB, BG, AC, CE, EF, CD, DF ] 
reversed links: [ BA, GB, CA, EC, FE, DC, FD ]
reversed roots: [ G, F ]
reversed links: [ BA, CA, DC, EC, FE, FD, GB ] (in order of source)
topologically sorted: [ G, B, F, E, D, C, A ]
construction order : A, C->A, D->C, E->C, F->(D,E), B->A, G->B
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻求反转(反转?镜像?翻转)DAG 的算法 的相关文章

  • 4 x 3 锁图案

    我遇到了这个 它要求计算在 4x3 网格中可以制作特定长度的锁定图案的方式数 并遵循规则 可能有些点不能包含在路径中 有效的模式具有以下属性 图案可以使用第一次接触的点序列来表示 与绘制图案的顺序相同 从 1 1 到 2 2 的图案与图案不
  • 稀疏矩阵中的最大和子矩形

    求一个子矩形中的最大和NxN矩阵可以完成O n 3 正如其他帖子中指出的 使用 2 d kadane 算法的时间 然而 如果矩阵是稀疏的 具体来说O n 非零条目 可以O n 3 时间被打败了吗 如果有帮助的话 对于我感兴趣的当前应用程序
  • 两个非嵌套循环的大 O 表示法

    对于两个非嵌套的 for 循环 大 O 表示法是什么 Example for int i 0 i
  • 如何计算两个ip之间的主机数量? C#

    我有两个ip 1 1 1 1 1 2 4 4 4 4 显然这只是一个例子 这是一个动态计算器 如果子网掩码不相关 我如何计算所述 ip 之间的主机数量 要计算 理论 IP 地址的数量 您需要将每个 IP 地址转换为其 32 位整数格式 这实
  • 如何在Scala中实现尾递归快速排序

    我写了一个递归版本 def quickSort T xs List T p T T gt Boolean List T xs match case Nil gt Nil case gt val x xs head val left righ
  • 加密成本高,解密成本低

    我希望该用户 攻击者加密数据并发送给服务器 现在我想要一种与标准算法完全相反的算法 使用快 难以解密 即很难使用服务器发送的密钥来加密密码等数据 以防止随机攻击 但很容易解密这样服务器在验证用户时消耗的时间非常少 但是对于攻击者来说 每次使
  • 哪种数据聚类算法适合检测时间序列事件中未知数量的聚类?

    这是我的场景 考虑在不同地点和时间发生的一组事件 例如 考虑有人在高空记录暴风雨期间城市中的雷击 就我的目的而言 闪电是瞬时的 只能击中某些位置 例如高层建筑 还可以想象每次雷击都有一个唯一的 ID 以便以后可以参考该雷击 这个城市大约有1
  • Java:如何实现3和?

    我正在研究 3 Sum 来自己实现它 并遇到了以下规则的实现 给定一个由 n 个整数组成的数组 S S 中是否存在满足 a b c 0 的元素 a b c 查找数组中所有总和为零的唯一三元组 注意 三元组 a b c 中的元素必须按非降序排
  • 基于时间的算法评分

    我们希望创建一种评分算法 在更短的时间内获得更高的分数 在更长的时间内获得更少的分数 需要注意的是 没有实际范围 因此时间范围可以从 100 毫秒到长达 10 分钟或更长时间 点范围为 0 到 50 谢谢你的帮助 你可以简单地把它变成一个线
  • 搜索/排序算法 - 是否有类似 GoF 的列表?

    我是一名自学成才的开发人员 坦率地说 我不太擅长找出在任何特定情况下使用哪种搜索或排序算法 我只是想知道是否有设计模式 esque 列出了以太坊中可用的常见算法 供我添加书签 就像是 算法名称 带有别名 如果有的话 它解决的问题 大O成本
  • 用 Java 创建迷宫求解算法

    我被分配了用 Java 创建迷宫求解器的任务 这是任务 Write an application that finds a path through a maze The maze should be read from a file A
  • cordova 使用什么 js“引擎”?

    Cordova 使用什么 JS 引擎 它是特定于平台的还是跨所有平台的一个标准 意味着 iOS 的 safari 和 Android 的 chrome 以及 Windows 可能的 IE 标准 或者跨所有平台的 Cordova JS 引擎
  • Exposé 布局算法

    我正在制作一些项目 其布局类似于 Mac OS X 在 Expos 中对窗口所做的操作 它适应项目的长宽比和可用区域的长宽比 基本上 可用区域分为行和列 每个单元格 行和列的交集 中放置一个项目 这些项目必须保持其纵横比 此处width h
  • 在 O(n) 时间内找到 n x n 矩阵中的局部最小值

    所以 这不是我的家庭作业问题 而是取自 coursera 算法和数据结构课程的未评分作业 现已完成 You are given an n by n grid of distinct numbers A number is a local m
  • 如何确定算法函数的复杂度?

    您如何知道算法函数对于特定操作是否需要线性 常数 对数时间 它取决于CPU周期吗 您可以通过三种方式 至少 做到这一点 在网上查找算法 看看它是如何描述其时间复杂度的 根据输入大小 自己检查算法 查看嵌套循环和递归条件等内容 以及每个循环运
  • 解释一下从 N 个给定集合中的每一个中给出第 K 个最大数字的示例?

    今天我尝试解决一个Facebook 编程挑战赛 https facebook interviewstreet com recruit challenges 我遇到的挑战是 酒吧问题 可以找到here https github com alo
  • 编程错误:(psycopg2.errors.UndefinedColumn)关系“task_fail”的列“execution_date”不存在

    我正在尝试在气流中运行 DAG 以将数据集摄取到谷歌云存储 这是 DAG 脚本 import os from airflow import DAG from airflow utils dates import days ago from
  • 0-1背包算法

    以下 0 1 背包问题是否可解 浮动 正值和 浮动 权重 可以是正数或负数 背包的 浮动 容量 gt 0 我平均有 这是一个相对简单的二进制程序 我建议用蛮力进行修剪 如果任何时候你超过了允许的重量 你不需要尝试其他物品的组合 你可以丢弃整
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这

随机推荐

  • C# 方法声明中的 new

    public new int AdjustedBaseValue 这里的新是什么意思或做什么 这意味着您正在隐藏 int 值 它是在基类中声明的 并且您在派生类中重新声明它 从而有效地隐藏了基类版本 查看文档here https learn
  • CSS 外部样式表不起作用,但完全相同的 CSS 在内部样式表上工作

    在制作个人网站时 我遇到了添加 CSS 样式表的问题 该样式表是本地样式表 在同一文件夹中具有 htm 文件 名为 Rodrigo css Here is the HTML Link tag with the CSS in the hrc
  • 绕过截断的“ps”

    我正在尝试编写一个脚本 该脚本将根据关键字查找特定进程 提取 PID 然后使用找到的 PID 杀死它 我在 Solaris 中遇到的问题是 由于 ps 结果被截断 基于关键字的搜索将无法工作 因为关键字是被截断的部分 过去 80 个字符 的
  • 如何检查函数是否已从控制台调用?

    我试图跟踪从控制台调用某些函数的次数 我的计划是在每个函数中添加一个简单的函数 例如 trackFunction 可以检查它们是从控制台调用还是作为底层函数调用 尽管这个问题听起来很简单 但由于我在函数编程方面的知识有限 我找不到解决这个问
  • git filter repo - 未找到 Python - 但已安装

    所以我第一次尝试使用 git filter repo 我已经安装了Python 3 9 我尝试运行 git filter repo strip blobs bigger than 100M 每次失败时 git 重击 git filter r
  • psexec 支持输入重定向吗?

    我试图通过 psexec 控制远程 Python 脚本 它从 stdin 读取命令 但我需要重定向 psexec 的输入 因为 psexec 本身将从另一个程序启动 但是 我没有运气让 psexec 接受重定向的输入 它应该起作用吗 我想做
  • lxml:将命名空间添加到输入文件

    我正在解析由外部生成的 xml 文件program http celldesigner org 然后 我想使用我自己的命名空间向该文件添加自定义注释 我的输入如下所示
  • iOS - Xcode 中的文件所有者和第一响应者是什么?

    iOS Xcode 中的文件所有者和第一响应者是什么 文件所有者是一个实例化的 runtime加载笔尖时拥有笔尖内容及其出口 操作的对象 它可以是您喜欢的任何类的实例 查看工具选项板的标识选项卡 文件所有者是应用程序代码和 nib 文件内容
  • 防止 Python 嵌入在我的默认路径 C:\Python38 中查找模块

    我正在使用 Cython embed模式来生成 exe 我正在评估分发嵌入 Cython 编译的代码并使其在任何机器上运行所需的最少文件集 https stackoverflow com questions 62390978 minimal
  • 如何使用“puts”添加额外的换行符而不将换行符粘贴到字符串中?

    If I say puts Hello 并决定添加一个额外的换行符 我需要这样做 puts Hello n 在字符串中包含这个字符是很难看的 有什么办法可以做到这一点而不污染我的字符串吗 只需再拨打一次电话即可puts puts Hello
  • 测量 Java 程序内存使用情况的最佳方法?

    我目前正在使用VisualVM 但我遇到的问题是我无法保存它生成的图表 我需要报告一些有关其内存使用情况和运行时间的数据 尽管运行时间很容易获得System nanoTime 我也尝试过NetBeans 分析器但这不是我想要的 因为我不是在
  • 执行 JFrame.pack() 后如何保存 JScrollPane 位置?

    我有以下代码 JFrame frame new JFrame JScrollPane scrollPane new JScrollPane new panel with stuff in it frame getContentPane ad
  • 如何打开多个 WebSocket 流

    我正在尝试从 Binance WebSocket API 传输数据 我让它一次只处理一个交易品种 if WebSocket in window open websocket var symbols getSymbol console log
  • 为什么 HTTP 中 GET 方法比 POST 快?

    我是网络编程新手 只是想了解将数据从一个页面发送到另一个页面的 GET 和 POST 方法 据说GET方法比POST更快 但我不知道为什么 我发现的原因之一是 GET 只能包含 255 个字符 难道还有其他原因吗 请有人给我解释一下 与速度
  • 我的计算机上的 Ubuntu 14.04 上的 CUDA 安装在哪里?

    我正在尝试在我的 ubuntu 14 04 中安装 CUDA 7 5 我遵循了本指南中的所有内容 通过包安装 http developer download nvidia com compute cuda 7 5 Prod docs sid
  • 如何在 HTML 电子邮件模板中嵌入图像?

    我创建了一个电子邮件模板 using HTML和从头开始的内联样式 现在我需要添加一些图像 此时无法使用 url 因为它没有托管 我尝试使用 base64 编码 它在 Apple 邮件客户端中有效 但图像未在 Gmail 中呈现 有没有办法
  • FullAjaxExceptionHandler 在无效会话后不会重定向到错误页面

    我在使用 Omnifaces FullAjaxExceptionHandler 时遇到问题 http showcase omnifaces org exceptionhandlers FullAjaxExceptionHandler htt
  • 安装 ibapi 包

    您好 我正在尝试在 python 中安装 ibapi 但是该软件包似乎不可用 因为每次我尝试安装它时都会出现错误 是否有其他方法可以安装该软件包 对你的帮助表示感谢 我已经留下了我使用的代码 尝试安装该软件包 pip install iba
  • Python:在 difflib 中传递 SequenceMatcher“autojunk=False”标志会产生错误

    I am trying https stackoverflow com questions 20267564 python find maximum length of all n word length substrings shared
  • 寻求反转(反转?镜像?翻转)DAG 的算法

    我正在寻找一种算法来 反转 反转 从里到外 有向无环图 A I can t ascii art the arrows so just pretend the slashes are all pointing B C down south e