是否存在通过有向图所有顶点的路径?

2023-12-30

给定G,一个有向图,是否存在一条经过G中所有顶点的路径(不一定是简单路径)?

我首先需要检查非循环图和强连通图中发生的情况,然后使用强连通分量的图找到一般图的解决方案。

到目前为止,我已经发现,对于强连通图来说,总有一条路径。对于非循环图,如果有多个源,则路径将永远不会存在。另外,如果存在 D out 大于 1 的顶点,则路径将永远不存在。

问题是,我不确定最后一个是否正确,如果错误,我的算法就是错误的。


最后一个假设不成立,例如看一下图表G = (V,E), where E = {(v_i,v_j) | i < j }该图显然是一个 DAG。因此找到最大的强连通分量不会改变图形。另外 - 该图有一个哈密顿路径,但是d_out(v_1) > 1[假设|V| > 3].

然而 - 你走在正确的轨道上。

高级伪代码中的算法:

  1. 找到图中的最大强连通分量 - 生成的图是 DAG。
  2. Use topological sort on the resulting graph1.
  3. 检查有序排序是否创建哈密顿路径
  4. 如果是 - 返回 true,否则返回 false

Claim:

当且仅当 DAG 表示时,存在包含所有顶点的路径 图的 MSCC 具有哈密顿路径

Proof of claim:
<-
if there is a hamiltonian path - then such a path is trivial, for each MSCC - the path goes through all vertices, and then to the out edge that is representing the our edge that was chosen in the hamiltonian path in the MSCC graph.
->
If such a path exists, let it be v0->v1->...vm.
Let's denote V_i the maximal strongly connected component in which v_i lays.
Now, for the path in the original graph v0->v1->...->vm, there is also a path in the MSCC graph2: V_0->V_1->...->V_m.
Note that if V_i appears twice [or more] in the above path - the two occurances are adjacent to each other, otherwise the MSCC found is not maximal because if V_i->V_k->...->V_i is feasible path - then V_i and V_k are not maximal, since you can unite them into one bigger SCC.
Now, for each V_i collapse all occurances of it into one, and you get yourself a path - where each V_i appears at most once [we just showed why], and exactly one [since every v_i was on the original path and we did not remove MSCC's completely - just collapsed them].
Thus - the generated path is a hamiltonian path in the MSCC graph.

建议算法的正确性证明:
由于我们表明 MSCC 图中的哈密顿路径存在当且仅当原始图中存在所请求的路径时 - 那么:
->
算法返回 true -> 算法在 DAG 中找到哈密顿路径 -> Dag 中存在哈密顿路径 [脚注 1] -> 存在原始图中所要求的路径。
<-
算法返回 false -> 算法在 DAG 中未找到哈密尔顿路径 -> DAG 中没有哈密尔顿路径 [脚注 1] -> 原始路径中不存在所请求的路径。

Q.E.D.


1:在 DAG 中,如果存在哈密顿路径,则存在唯一的拓扑排序,如果存在哈密顿路径 - 就是拓扑排序中顶点的顺序。因此,在 DAG 中找到哈密顿路径很容易。
2:实际上,这是一点修改,V_i->V_i并不是 MSCC 图表上真正的边缘,但现在我们将其表示为边缘。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否存在通过有向图所有顶点的路径? 的相关文章

  • 如何用约束标记一大组“传递群”?

    在 NealB解决方案之后进行编辑 与以下解决方案相比 NealB的解决方案非常非常快任何另一个 https stackoverflow com q 18033115 answers and 提出了关于 添加约束以提高性能 的新问题 Nea
  • 每个术语出现的次数

    我得到了一个数组a n 2 where n can be 10 5最大时有n个科目和n个学生 全部编号为 1 2 n a i 0 and a i 1 1 lt i lt n 表示在第 i 个科目中 所有来自a i 0 to a i 1 通过
  • 需要解释搜索最小大和的算法

    我正在解决 Codility 问题作为练习 但无法回答其中一个问题 我在互联网上找到了答案 但我不明白这个算法是如何工作的 有人可以引导我逐步完成它吗 这是问题 You are given integers K M and a non em
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • AStar-名称解释

    我正在寻找 AStar A 算法为何被称为 AStar 的解释 所有类似的 最短路径问题 算法通常都以其开发者的名字命名 那么 AStar 代表什么 有称为 A1 和 A2 的算法 后来证明A2是最优的 实际上也是可能的最好算法 所以他给它
  • 找到一个数是素数,为什么检查到n/2更好。避免n后半部分的数字的原因是什么

    要检查一个数是否是素数 最简单的方法是尝试将这个数除以 2 到 n 如果任何操作得到余数为 0 那么我们就说给定的数不是素数 但最好只进行划分和检查直到 n 2 我知道更好的方法是直到 sqrt n 我想知道跳过后半部分的原因 假设我们是否
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 优先连接,Matlab 中的复杂网络

    大家好 我现在正在 MATLAB 中研究优先附件模型 在理解以下内容时遇到一些困难 假设我一开始有 4 个节点 连接如下 time 0 1 lt gt 2 3 lt gt 4 在下一个时间步骤中 我添加一个节点和 4 个连接 然后添加另一个
  • pytesseract 无法从图像中识别复杂的数学公式

    我在用pytesseractpython 中的模块 pytesseract从图像中识别文本 但它不适用于包含复杂数学公式 例如根 推导 积分数学问题或方程 的图像 代码2 py Import modules from PIL import
  • 如何高效生成总和在指定范围内的所有组合(在所有深度)

    假设您有一组值 1 1 1 12 12 16 如何生成总和在预定义范围内的所有可能组合 不重复 min max 例如 这里是 所有深度的 范围在13 and 17 1 12 1 1 12 1 1 1 12 16 1 16 这假设具有相同值的
  • 查找一个二维矩阵是否是另一个二维矩阵的子集

    最近我参加了一个黑客马拉松 我了解到一个问题 试图在 2d 矩阵中找到网格形式的模式 模式可以是 U H 和 T 并由 3 3 矩阵表示 假设我想展示 H 和 U 1 0 1 1 0 1 1 1 1 gt H 1 0 1 gt U 1 0
  • 机器人探索算法

    我正在尝试为机器人设计一种算法 试图找到位于未知位置的旗帜 该旗帜位于一个包含障碍物的世界中 机器人的任务是夺取旗帜并将其带到他的基地 代表他的起始位置 机器人在每一步只能看到有限的邻域 他事先不知道世界是什么样子 但他有无限的内存来存储已
  • 最接近 x,y 的线上的点[重复]

    这个问题在这里已经有答案了 可能的重复 如何判断一个点是否在某条线附近 https stackoverflow com questions 910882 how can i tell if a point is nearby a certa
  • Diamond-Square 算法的平滑问题

    我正在使用菱形方形算法来生成随机地形 它工作得很好 除了我让这些大圆锥形状要么伸出或伸入地形 问题似乎在于 时不时会有一个点被设置得太高或太低 Here is a picture of the problem And it can be b
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • 查找重叠事件/时间的算法

    在处理自定义日历时 我不知道如何找到与任何其他时间段重叠的时间段 时段从 0 点至 720 点 上午 9 点至晚上 9 点 每个像素代表一分钟 var events id 1 start 0 end 40 an event from 9 0
  • O(n^2) 与 O (n(logn)^2)

    时间复杂度是O n 2 or O n logn 2 better 我知道当我们简化它时 它就变成了 O n vs O logn 2 and logn lt n 但是关于logn 2 n is only less than log n 2 f
  • 使用 stl sort 对表进行排序

    我有一个巨大的表 约 50Gb 格式为 i j k 来自稀疏矩阵 存储为 uint32 t idx1 idx2 float vals uint32 t tablesize 我想使用给定的比较函数 即 idx1 和 idx2 的函数 对其进行
  • 随机排列

    我无法找到一种随机洗牌元素的好方法std vector经过一些操作后 恢复原来的顺序 我知道这应该是一个相当简单的算法 但我想我太累了 由于我被迫使用自定义随机数生成器类 我想我不能使用std random shuffle 无论如何这没有帮

随机推荐

  • 强制下载 iOS 5.0.1 符号

    一位客户向我发送了 iOS 5 0 1 9A405 设备的崩溃日志 我在 Snow Leopard 上运行 Xcode 4 2 崩溃日志调用堆栈的系统部分无法符号化 并且它们似乎与崩溃相关 Xcode 中没有 iOS 5 0 1 符号 我没
  • WIX - 对安装取消运行自定义操作

    我正在使用 WIX 编写安装程序 当用户按下 取消 按钮时 我需要执行自定义操作 我创建了一个自定义操作 但我似乎找不到在哪里使用该操作 有什么想法我该怎么做吗 尝试类似的方法
  • 导航栏随着 CSS 动画消失

    我正在使用 Animate css 库中的 CSS3 动画 它们真的很棒 当我将它们与 WOW js 结合起来时 它们工作得非常完美 但是 当我向下滚动页面并且动画进入屏幕时 屏幕顶部的固定导航栏会消失几秒钟 动画显示的时间 然后返回屏幕
  • 适用于 Android 和 iOS 的应用程序 OpenStreetMap [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想使用 OpenStreetMap 制作一个移动本机应用程序 Android 和 iOS 我需要离线
  • Swift 中的惰性属性相当于 Objective C 中的惰性 Init getter

    Swift 中的惰性属性是否相当于用 Objective C 中的惰性加载模式覆盖 getter 来自文档 惰性存储属性是指直到第一次使用时才计算其初始值的属性 您可以通过在声明之前写入惰性属性来指示惰性存储属性 所以 大多数情况下 是的
  • 位图图像未显示在 imageview 中

    我创建了一个应用程序 在其中允许用户从图库中选择图像或从相机拍摄照片并将该图像上传到网络服务器 此代码工作正常 现在在其他屏幕中 我正在从网络服务器下载图像并存储该图像在 SD 卡中 问题是 如果从图库中选择图像 则图像将显示在图像视图中
  • ANTLR:自定义语法示例的词法错误帮助

    什么方法可以让我最大限度地报告词法错误 举一个简单的例子 我想为以下文本编写语法 为了简单起见 空格被忽略 字符串常量中不能有 myvariable 2 myvariable hello world Group myvariablegrou
  • 使用 window 作为原型在 javascript 中返回看似错误的值

    您希望此代码返回 123 但它返回的是窗口对象 function W this window 123 W prototype window new W window window object not 123 请检查后续问题 window
  • ElasticSearch 中过滤的嵌套inner_hits 查询的聚合

    我刚接触 ElasticSearch 几天 作为一项学习练习 我实现了一个基本的职位抓取工具 它聚合来自几个职位列表网站的职位 并用一些数据填充索引供我使用 我的索引包含每个列出职位的网站的文档 每个文档的属性都是一个 jobs 数组 其中
  • WPF - MVVM 屏幕管理

    想象一下您有一个复杂的数据对象 它足够复杂 以至于要编辑对象的各种属性 用户最好拥有多个屏幕 它本质上是一个配置项目的购物车 因此 一个屏幕就可以让您添加项目 另一种方法允许您对这些项目进行修改 即预先确定的更改 这些更改会产生相关成本 第
  • 使用 gnu asm 在 x64 中使用参数执行

    我正在尝试在 Linux 的 GNU asm 中编写 shellcode 但无法使用参数调用 execve 我正在尝试做什么 execve bin ls bin ls la NULL NULL 这是我的代码 section text glo
  • 在实体存储库中注入容器

    我想获取存储库中的当前区域设置 这就是为什么我将容器注入到我的存储库中 但我收到错误 我无法弄清楚 这是我的service yml code survey repository container aware class Demo Surv
  • webview 遇到重定向问题

    NSURL urlString NSURL URLWithString urlAddress URL Requst Object NSURLRequest requestObj NSURLRequest requestWithURL url
  • Laravel 5.4 artisan 为 /public 处的现有文件夹提供 htaccess / 和 Routes::get 服务

    我仍在尝试使用 Laravel 5 4 然而运行 php artisan server 没有考虑 public中的 htaccess文件 无论我在那里编辑什么 它仍然没有处理它 artisan服务运行在127 0 0 1 8000 我遇到这
  • 将 API 的响应作为节点服务器的响应传递会引发异常

    在某些情况下 当在我的节点 express 服务器上命中特定路由时 我想向 API 发出请求并将该响应直接返回给客户端 我关注了这个堆栈溢出帖子 将服务器端 axios 请求的响应发送到 React Redux 应用程序 https sta
  • 为什么 asp.net mvc 中的部分视图需要下划线

    只是为了区分对话框内使用的视图还是 foreach 循环 客户详细信息 中使用的视图 你不需要下划线 这只是一个约定 而MVC非常热衷于使用约定
  • Ruby on Rails 脚本控制台

    我没能跑 script console以前 它曾经抛出一个错误 因为我script console文件已包含 usr bin env ruby19 进行命中和试验后 我通过替换修复了此错误 usr bin env ruby19 with u
  • 数据声明 Haskell 中的类型约束

    我正在使用 Haskell 并尝试编写以下内容 data Scale s Scale s s 但是 我想做到这一点s必须是 Num 类型类的内容 例如 Int 或 Double 使用 Haskell 和 GHC 可以做到这一点吗 Yes L
  • 正则表达式匹配所有内容,直到最后一次出现 /

    使用正则表达式 Ant 中的 Replaceregexp 如何匹配 然后替换 从行开头到最后一次出现斜杠的所有内容 我需要从以下任何一个开始 replace this keep this replace this replace this
  • 是否存在通过有向图所有顶点的路径?

    给定G 一个有向图 是否存在一条经过G中所有顶点的路径 不一定是简单路径 我首先需要检查非循环图和强连通图中发生的情况 然后使用强连通分量的图找到一般图的解决方案 到目前为止 我已经发现 对于强连通图来说 总有一条路径 对于非循环图 如果有