有向图的数据结构,允许快速删除节点?

2023-12-24

我需要存储有向图(不一定是非循环的),以便节点删除尽可能快。我不介意存储额外的数据,以便准确地知道删除节点时必须删除哪些边。

如果我存储一个边列表(作为节点索引对),那么当杀死某个节点 n 时,我必须在整个列表中搜索源或目标为 n 的边。这对于我的应用来说成本太高了。是否可以通过在节点中存储一些附加数据来避免这种搜索?

一种想法是让每个节点将其自己的源和目标存储为两个单独的列表。当节点 n 被杀死时,它的列表也被杀死。但是,链接到节点 n 的所有目标/源如何知道更新它们自己的列表(即,从它们的列表中消除失效的节点)?这将需要一些昂贵的搜索......

可以避免吗?

Thx.


您有两个选择,但不会太花哨:邻接列表和邻接矩阵。前者可能最适合您正在做的事情。要删除节点,只需删除该节点的列表的所有出边即可。对于入边,您可以考虑为每个列表保留一个哈希表以进行 O(1) 查找。

这是一个很好的概述http://www.algorithmist.com/index.php/Graph_data_structs http://www.algorithmist.com/index.php/Graph_data_structures

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

有向图的数据结构,允许快速删除节点? 的相关文章

  • 使用 A 星查找路径的启发式函数

    I am trying to find a optimal solution for the following problem 每个节点内表示的数字表示为 x y 一个节点的相邻节点总是有一个y值为 当前节点 y 值 1 更改的成本为 1
  • 如何在 Unity 中对齐“轨道”或模块化对象?

    我正在开发一个简单的游戏 用户可以在其中放置不同但模块化的对象 例如 轨道 道路等 我的问题是 当将一个物体靠近另一个物体时 如何匹配和放置不同的物体 我的第一种方法是为每个模块对象创建一个隐藏的子对象 一个盒子 并将其放在可以放置其他对象
  • 滚动或滑动窗口迭代器?

    我需要一个可在序列 迭代器 生成器上迭代的滚动窗口 又名滑动窗口 默认的 Python 迭代可以被视为一种特殊情况 其中窗口长度为 1 我当前正在使用以下代码 我怎样才能更优雅和 或更有效地做到这一点 def rolling window
  • 如何衡量字符串的复杂度?

    我有一些长字符串 1 000 000 个字符 每个字符串仅包含定义字母表中的符号 例如 A 1 2 3 示例字符串 string S1 1111111111 meta complexity 0 string S2 1111222333 me
  • 贪心技术与穷举搜索有何不同?

    我正在为一些示例问题编写伪代码 并且我注意到贪婪技术和详尽搜索之间存在令人担忧的模式 Job 1 Job 2 Job 3 Job 4 Job 5 Person 1 9 2 7 8 Person 2 6 4 3 7 Person 3 5 8
  • 压缩很多小字符串的算法?

    我正在寻找一种压缩小 ASCII 字符串的算法 它们包含大量字母 但也可以包含数字和很少的特殊字符 它们很小 平均约为 50 100 字节 最多 250 个字节 例子 Android show EditText setError above
  • 通过排列四个给定数字找到最大可能时间 HH:MM

    我最近为了工作晋升而参加了编码测试 这是我真正遇到的任务之一 我想知道什么是最好的方法来做到这一点 我使用了大量的 if 和 if else 这不是最干净的解决方案 但完成了工作 我被问到的问题是 将 4 个数字格式化为 24 小时时间 0
  • 2D形状识别与解析算法

    我正在寻找一种算法 用于从给定的一组 x y 点检测简单形状 如矩形 三角形 正方形和圆形 我还在寻找一种方法 一旦检测到 将路径转换为更干净的形状 我已经查遍了互联网 但没有找到任何 简单 的方法 几乎所有这些对于我的简单实现来说都是高级
  • 按步长值变化对数组中的数字进行分组

    我有一个像 101 107 106 199 204 205 207 306 310 312 312 314 317 318 380 377 379 382 466 469 471 472 557 559 562 566 569 在这个数组中
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要
  • 生成和保存 ZedGraph 绘图而不在表单上显示

    是否可以将数据绘制到 ZedGraph 图表上并将其保存为文件 而不显示 生成用户可见的图表 我希望处理大量数据集并生成图表并将其保存到文件中以便在应用程序外部查看 如果无法做到这一点 是否可以在隐藏 最小化表单上显示图形 保存图形 关闭窗
  • 为什么Python中pop()的大O与pop(0)不同[重复]

    这个问题在这里已经有答案了 他们不应该都是O 1 因为从 Python 列表中的任何位置弹出一个元素涉及销毁该列表并在新的内存位置创建一个元素 蟒蛇的list实现使用动态调整大小的 Carray在引擎盖下 删除元素usually要求您移动后
  • 逐字遍历句子

    如何逐字遍历任何给定的句子 java中有内置函数吗 我不知道如何开始 像这样的事情 String sentence Your sentence here String words sentence split s splits by whi
  • 为什么我们需要检测链表中的循环

    我看到很多关于如何检测链表中的循环的问答 但我想了解的是我们为什么要这样做 换句话说 检测链表中的循环的实际用例是什么 在现实生活中 您可能永远不需要检测链表中的循环 但是执行此操作的算法很重要 我在现实生活中多次使用它们 例如 我经常会递
  • 如何用线条在一个Excel散点图中绘制多个分组数据

    我在 Excel 中的一张图表 带线的散点图 中绘制分组数据 按索引 时遇到一些困难 我将非常感谢您的帮助 我的数据分为三列 第一列是数据或组的索引 即每组数据的唯一编号 第二列是时间 第三列是数据 Group Time Data 1 1
  • 带有元数据的 scipy kdtree

    我目前正在寻找一种方法来构建几个 kd 树以快速查询一些 n 维数据 但是 我对 scipy KD 树算法有一些问题 我的数据包括id gt data somedata coordinate x y 我希望能够基于坐标和 k 最近邻居的 i
  • 如何使用networkx删除有向图中的所有相关节点?

    我不确定我的问题的正确术语是什么 所以我只会解释我想做的事情 我有一个有向图 删除节点后我希望所有独立相关的节点也被删除 这是一个例子 假设我删除节点 11 我希望节点 2 也被删除 在我自己的示例中 它们将是 2 以下的节点 现在也必须删
  • 您将如何显示/布局企业应用程序之间的数据流?

    我的雇主是一家大型瑞士电信公司 我们有许多系统用于为不同任务传输数据 例如性能管理 故障管理 配置管理等 为了向 管理 尖头等 解释这些系统如何交互 我将有关数据流 格式 协议的信息收集到 数据库 逗号分隔的说服者 中 然后为 Graphv
  • 在大文件中查找重复项

    我有一个非常大的文件 大约有 1500 万个条目 文件中的每一行都包含一个字符串 称为键 我需要使用 java 查找文件中的重复条目 我尝试使用哈希图并检测重复的条目 显然 这种方法向我抛出了 java lang OutOfMemoryEr
  • 广度优先搜索:检查访问状态的时机

    在有向图的广度优先搜索中 可能循环 当一个节点出队时 其所有尚未访问的子节点都会入队 并且该过程将继续 直到队列为空 有一次 我以相反的方式实现它 将节点的所有子节点排队 并在节点出队时检查访问状态 如果正在出队的节点之前已被访问过 则该节

随机推荐

  • Play Framework 2.3 - CORS 标头

    UPDATE新的 Play 2 5 提供了新的CORS过滤器 https www playframework com documentation 2 5 x CorsFilter 由于新的 2 3 Java 版本完成了 Response 类
  • 绑定值源已删除

    由于某种原因 在使用状态 带有数组 并与其值之一绑定时出现索引越界错误 一般来说 向数组添加更多值是没有问题的 但是 当您尝试删除一个值时 您会收到索引越界错误 这是我在自己的项目中遇到的问题的简化版本 在 SwiftUI 中尝试以下示例
  • 开发基于 Java EE 的 Web 应用程序时如何提高生产力

    我想知道与其他技术堆栈相比 您如何解决基于 Java EE 的 Web 应用程序开发看似低生产率的问题 Seaside http www seaside st 红宝石 on Rails http rubyonrails org etc 限制
  • 在带有模拟器的 Xamarin.iOS 中使用 Azure AD B2C - 钥匙串问题(团队 ID 为空)

    我正在开发 Xamarin Forms 应用程序 并设置 Azure AD B2C 进行身份验证 我正在关注官方教程 https learn microsoft com en us xamarin xamarin forms data cl
  • 如何在haproxy中启用keep-alive?

    这是我的 haproxy conf haproxy 1 7 9 global log 127 0 0 1 local0 defaults retries 3 option redispatch timeout client 30s time
  • 使用 CASE 语句根据在 PARTITION 中查找特定条目来更改新 BigQuery 列的值

    我尝试编写一些 case 语句 如果分区内满足特定条件 这些语句可能会更改调用中所有条目的值 这是具体的上下文 假设我有一个使用以下 SQL 查询创建的特定数据集 SELECT date CONCAT fullVisitorId STRIN
  • 如何对包含 erf 函数的 SymPy 表达式进行羔羊化处理以与 NumPy 一起使用

    我想用 SymPy 对包含 erf 函数的符号表达式进行羔羊化 对于标量参数可以按如下方式完成此操作 log normal 0 5 0 5 sym erf sym log x mu sym sqrt 2 sigma 2 F sym lamb
  • Python Exchangelib:检查项目是否是消息

    使用 Exchangelib 检索项目时出现错误 有没有什么方法可以检测该项目是否是电子邮件 如果不是 则忽略它 下面的代码引发AttributeError MeetingRequest object has no attribute fl
  • 尝试在 Web 视图中显示 url

    我正在尝试使用loopj包 我正在尝试向网站发出 HTTP 请求并在 web 视图中显示该网站 我成功返回结果 但是 Web 视图没有按需要显示页面 而是 chrome 打开并显示页面 我是否遗漏了某些内容 或者有什么方法可以覆盖这种不需要
  • Chrome 命令行开关/参数是什么?

    在哪里可以找到用于 Chrome 和 chromedriver 的命令行开关列表 对于 Chromium 请在此处找到列表 https chromium googlesource com chromium src master chrome
  • 如何使用 purrr 中的映射和 dplyr 中的 mutate 来生成 glm 汇总表?

    我正在使用 purrr 和 broom 包来生成一系列 glm 并构建一个包含模型信息的表 以便我可以对它们进行比较 当我从 purrr 调用地图函数时 代码失败 我认为问题与 mutate 和 map 的组合有关 我想生成一个表 其中每个
  • 如何更改asp.net web api中的默认路由

    我正在研究 asp net web api 我正在尝试在 global asax 文件中设置项目的默认路由 例如 localhost 45678 api Products 但我没有找到任何类似于 asp net mvc 路由模型的格式 ur
  • 秒到年

    基本上 我正在尝试重新创建 PHP 日期的年份功能 使用自 1970 年 1 月 1 日以来的秒数 我试图在不使用内置函数的情况下获取年份 我有一个想法 但由于闰年而没有实现 谁能给我一个可行的公式 从 1970 年开始计算秒数并计算出一年
  • 为什么番石榴在我的 build.sbt 中没有正确着色?

    tl dr Here https github com erip shading repro lagom hdfs是包含问题的存储库 Cassandra 和 HDFS 都在内部使用 guava 但由于各种原因 它们都没有屏蔽依赖关系 因为番
  • Cocoa - 从 NSOperation 返回信息

    我有一个 iPhone 应用程序 它使用 Web 服务从服务器获取数据 我将对 Web 服务的每个调用都放在 NSOperation 子类中 以便它可以线程化 我的问题是 从已完成的 NSOperation 子类传回信息的推荐方法是什么 我
  • 同步块内的产量?调用yield()后锁释放?

    我正在创建一个多线程并调用yield 在里面 java lang Thread yield 方法使当前正在执行的线程对象暂时暂停并允许其他线程执行 其他线程是否有可能执行也想进入同步块的情况 synchronized this lock c
  • 是否有 std::noncopyable (或等效的)?

    有一个提升 不可复制 http www boost org doc libs master libs core doc html core noncopyable html我的图书馆里有我自己的不可复制的课程 最新的 C 标准中是否有 st
  • ServiceTestCase 中的 MockContentResolver 空指针

    我正在尝试以 TDD 式的方式创建一个服务 为此我创建了以下测试 该服务主要轮询 Web 服务并将新信息放入内容提供程序中 由于它是一项服务 因此我使用内容提供程序 它将将信息存储到其中作为测试的预言机 我认为我想要做的是创建一个 Mock
  • Swift iOS8 如何删除最后一张照片?

    我尝试从相机胶卷中获取最后一张照片并将其删除 现在我获取了最后一张照片 但在删除最后一张照片时遇到问题 我尝试了这种方法 但我删除了所有照片 所以我计划构建一个新的 PHFetchResult 其中仅包含最后一张照片 但我不知道该怎么做 P
  • 有向图的数据结构,允许快速删除节点?

    我需要存储有向图 不一定是非循环的 以便节点删除尽可能快 我不介意存储额外的数据 以便准确地知道删除节点时必须删除哪些边 如果我存储一个边列表 作为节点索引对 那么当杀死某个节点 n 时 我必须在整个列表中搜索源或目标为 n 的边 这对于我