Questions tagged «graph-theory»

图是一种数学结构,其中包含顶点或“节点”的集合以及连接成对顶点的边的集合。图形可以是无向的或有向的,边可以从一个顶点指向另一个顶点。


16
什么时候使用深度优先搜索(DFS)和广度优先搜索(BFS)?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 8天前关闭。 我了解DFS和BFS之间的区别,但是我想知道什么时候使用另一种比较实用? 任何人都可以举例说明DFS将如何胜过BFS,反之亦然?



7
为什么DFS和BFS的时间复杂度为O(V + E)
BFS的基本算法: set start vertex to visited load it into queue while queue not empty for each edge incident to vertex if its not visited load into queue mark vertex 所以我认为时间复杂度是: v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges) v顶点1到哪里n 首先,我所说的正确吗?其次,这是如何的O(N + E),以及关于其原因的直觉将非常好。谢谢

16
图算法查找两个任意顶点之间的所有连接
我正在尝试确定最佳的时间效率算法来完成下面描述的任务。 我有一套记录。对于这组记录,我具有连接数据,该数据指示该组记录中的记录对如何相互连接。这基本上表示一个无向图,其中记录是顶点,而连接数据是边。 集合中的所有记录都具有连接信息(即不存在孤立记录;集合中的每个记录都连接到集合中的一个或多个其他记录)。 我想从集合中选择任意两个记录,并能够显示所选记录之间的所有简单路径。“简单路径”是指在路径中没有重复记录的路径(即仅有限路径)。 注意:所选的两个记录将始终是不同的(即开始和结束顶点永远不会相同;没有周期)。 例如: 如果我有以下记录: A,B,C,D,E 并且以下表示连接: (A,B),(A,C),(B,A),(B,D),(B,E),(B,F),(C,A),(C,E), (C,F),(D,B),(E,C),(E,F),(F,B),(F,C),(F,E) [其中(A,B)表示记录A连接到记录B] 如果我选择B作为我的开始记录,选择E作为我的结束记录,则我想找到所有通过记录连接将记录B连接到记录E的简单路径。 将B连接到E的所有路径: B→E B-> F-> E B-> F-> C-> E B-> A-> C-> E B-> A-> C-> F-> E 这是一个例子,实际上我可能有包含数十万条记录的集合。

4
如何找到100个移动目标之间的最短路径?(包括现场演示。)
背景 此图说明了问题: 我可以控制红色圆圈。目标是蓝色三角形。黑色箭头指示目标将移动的方向。 我想以最少的步骤收集所有目标。 每转一圈,我必须向左/向右/向上或向下移动1步。 每转一圈,目标也会根据板上显示的方向移动1步。 演示版 我已经在Google appengine上对此问题进行了可播放的演示。 如果有人能击败目标分数,我将非常感兴趣,因为这表明我当前的算法不够理想。(如果管理成功,则应打印出祝贺消息!) 问题 我当前的算法在扩展目标数量方面确实非常糟糕。时间成倍增加,对于16条鱼,已经是几秒钟了。 我想为32 * 32的电路板尺寸和100个移动目标计算答案。 题 什么是计算收集所有目标的最小步骤数的有效算法(理想情况下为Javascript)? 我尝试过的 我当前的方法基于备忘录,但是它非常缓慢,我不知道它是否总是会产生最佳解决方案。 我解决了子问题“收集给定目标集并最终达到特定目标的最小步骤数是多少?”。 通过检查先前访问过的目标的每个选择,可以递归地解决子问题。我认为总是最好的方法是尽快收集先前的目标子集,然后尽快从最终位置移至当前目标(尽管我不知道这是否是一个有效的假设)。 这导致要计算的n * 2 ^ n状态非常迅速地增长。 当前代码如下所示: var DX=[1,0,-1,0]; var DY=[0,1,0,-1]; // Return the location of the given fish at time t function getPt(fish,t) { var i; var x=pts[fish][0]; var …


10
在图中访问某些节点的最短路径
我有一个大约100个节点和大约200个边的无向图。一个节点标记为“开始”,一个节点标记为“结束”,大约有十二个标记为“必须通过”。 我需要找到通过此图的最短路径,该路径以“开始”开始,以“结束”结束,并通过所有“必须通过”节点(以任何顺序)。 (http://3e.org/local/maize-graph.png / http://3e.org/local/maize-graph.dot.txt是有问题的图形-它表示宾夕法尼亚州兰开斯特的玉米迷宫)

5
如何在LaTeX中绘制图形?
首先,让我说我正在使用LyX,尽管使用ERT没问题。 其次,在Latex中绘制这样一个简单图形的最简单方法是什么? 我看过一些带有图形的文档,也看到了一些示例,但是我无法弄清楚如何只绘制一个简单的图形-我需要什么包,等等?

17
可视化对GraphViz太大的无向图?
我需要有关渲染具有178,000个节点和500,000条边的无向图的建议。我已经尝试过Neato,Tulip和Cytoscape。Neato甚至都不遥不可及,Tulip和Cytoscape声称他们可以应付,但似乎不行。(郁金香什么也不做,Cytoscape声称正在工作,然后停下来。) 我只是想要一个节点格式合理的矢量格式文件(ps或pdf)。


7
Python中最有效的图形数据结构是什么?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 4年前关闭。 改善这个问题 我需要能够在python中处理大型(10 ^ 7个节点)图。对应于每个节点/边缘的数据是最少的,例如,少量的字符串。就内存和速度而言,最有效的方法是什么? dict的dict更灵活,更易于实现,但我直观地期望列表列表会更快。list选项还要求我将数据与结构分开,而dict则允许某种形式: graph[I][J]["Property"]="value" 你有什么建议? 是的,我应该对效率的含义更加清楚。在这种特殊情况下,我的意思是随机访问检索。 将数据加载到内存中并不是一个大问题。一劳永逸。耗时的部分是访问节点,因此我可以提取信息并衡量我感兴趣的指标。 我没有考虑过将每个节点都设为一个类(所有节点的属性都相同),但是这似乎会增加额外的开销?我希望有人能对他们可以分享的类似案例有一些直接的经验。毕竟,图是CS中最常见的抽象之一。

4
在街道数据中查找街区(斜线)(图形)
我正在寻找一种自动在城市中将邻域定义为图形上的多边形的方法。 我对邻居的定义包括两个部分: 街区:在多条街道之间封闭的区域,其中街道(边)和交叉点(节点)的数量最少为3(三角形)。 邻域:对于任何给定的块,所有与该块直接相邻的块以及该块本身。 有关示例,请参见下图: 例如,B4是由7个节点和6个连接它们的边定义的块。如此处大多数示例所示,其他块由4个节点和4个连接它们的边定义。此外,附近的B1包括B2(反之亦然),而B2还包括B3。 我正在使用osmnx从OSM获取街道数据。 使用osmnx和networkx,如何遍历图形以查找定义每个块的节点和边? 对于每个块,我如何找到相邻的块? 我正在朝着一段代码工作,该代码采用一个图形和一对坐标(纬度,经度)作为输入,标识相关的块并返回该块的多边形以及如上定义的邻域。 这是用于制作地图的代码: import osmnx as ox import networkx as nx import matplotlib.pyplot as plt G = ox.graph_from_address('Nørrebrogade 20, Copenhagen Municipality', network_type='all', distance=500) 和我尝试寻找节点和度数不同的派系。 def plot_cliques(graph, number_of_nodes, degree): ug = ox.save_load.get_undirected(graph) cliques = nx.find_cliques(ug) cliques_nodes = [clq for clq in cliques if …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.