Tag:

图形遍历n步

给出一个简单的无向图,如下所示: 从D,A,B或C( V_start )开始 – 我必须计算从n步骤的起始点( V_start )到起始点( V_start )有多少可能的路径,其中每个边和顶点都可以被访问无限次。 我正在考虑进行深度优先搜索,当steps > n || (steps == n && vertex != V_start)时停止 steps > n || (steps == n && vertex != V_start) ,但是,如果例如n = 1000000 ,则这变得相当昂贵。 我的下一个想法让我将DFS与动态编程相结合,然而,这就是我被困住的地方。 (这不是家庭作业,只是为了学习而被困在图形和算法中。) 如何在合理的时间内用大n解决这个问题?

给定一个整数数组,找到第一个唯一的整数

给定一个整数数组,找到第一个唯一的整数。 我的解决方案:使用std::map 将整数(数字作为键,其索引作为值)逐一放入(O(n^2 lgn)) ,如果有重复,则在将所有数字放入之后从地图中删除条目(O(lg n))映射,迭代映射并找到索引为O(n)最小的密钥。 O(n^2 lgn)因为地图需要进行排序。 效率不高。 更好的解决方案?

如何在两个节点之间找到循环图中最长的路径?

我已经解决了这里发布的大多数问题,除了最长的路径之外。 我已经阅读了关于最长路径的维基百科文章,如果图形是非循环的,那么这似乎是一个简单的问题,而我的不是。 那我怎么解决这个问题呢? 蛮力,通过检查所有可能的路径? 我怎么开始这样做? 我知道它会在图表上获得很多~18000。 但我只是想开发它,因为它是项目所需要的,我只是测试它并在一个较小比例的图形上向教师显示,执行时间只有一两秒钟。 至少我完成了所有必需的任务,并且我有一个运行的概念certificate它可以工作但是在循环图上没有更好的方法。 但我不知道从哪里开始检查所有这些路径……

C定向图实现选择

欢迎mon amie , 在我的一些作业中,我觉得需要使用Graph ADT。 但是,我想拥有它,怎么说, generics 。 也就是说,无论我喜欢什么,我都希望存储在其中。 我面临的问题与复杂性有关。 我应该使用什么数据结构来表示节点集? 我忘了说我已经决定使用Adjacency list技术 。 一般来说,教科书提到了一个链表,但据我所知,只要链表很有用并且我们需要进行搜索, 树就更好了 。 但话说回来,我们需要的是将一个节点与其相邻节点列表相关联, 那么哈希表怎么样呢? 你能帮我决定在哪些数据结构(链表,树,哈希表)中存储节点?

如何在动态图中避免“堆指针意大利面”?

一般问题 假设您正在编写一个由图形组成的系统,以及可以根据相邻节点的配置激活的图形重写规则。 也就是说,您有一个在运行时期间无法预测地增长/缩小的动态图形。 如果你天真地使用malloc ,新的节点将被分配在内存中的随机位置; 经过足够的时间,你的堆将成为指针意大利面,给你可怕的缓存效率。 是否有任何轻量级的增量技术可以使连接在一起的节点在内存中保持紧密联系 ? 我尝试了什么 我唯一能想到的是将节点嵌入笛卡尔空间,并使用一些物理弹性模拟来排斥/吸引节点。 那将有线节点保持在一起,但看起来很傻,我想模拟的开销会比缓存效率加速更大。 坚实的例子 这是我正在尝试实施的系统。 这是我试图在C中优化的代码的简短片段。 这个 repo是JS中的原型,工作实现,具有可怕的缓存效率(以及语言本身)。 该video以图形方式显示系统的运行情况。

对某些Graph操作的最简单算法的建议

这个项目的截止日期很快就会结束,我没有太多时间来处理剩下的事情。 因此,我正在寻找最简单的算法来实现Graph结构上的一些操作,而不是寻找最好的(可能更复杂/耗时)算法。 我需要做的操作如下: 在给定距离X的情况下列出图形网络中的所有用户 给定距离X和关系类型,列出图形网络中的所有用户 在给定一种关系的情况下,计算图形网络上2个用户之间的最短路径 计算图形网络上2个用户之间的最大距离 计算图形网络上最远的连接用户 关于我的Graph实现的一些注意事项: 边节点有2个属性,一个是char类型,另一个是int 。 它们分别代表关系和体重的类型。 图表使用链接列表实现,包括顶点和边。 我的意思是,每个顶点指向下一个顶点,每个顶点也指向不同链表的头部,即该特定顶点的边。 我知道我需要做什么: 我不知道这是否是最简单的,如上所述,但对于2个用户之间的最短路径,我相信Dijkstra算法是人们似乎经常推荐的,所以我想我会接受它。 我一直在搜索和搜索,我发现很难实现这个算法,有没有人知道任何教程或易于理解的东西,所以我可以自己实现这个算法? 如果可能的话,使用C源代码示例,它会有很大帮助。 我看到许多带有数学符号的例子,但这让我更加困惑。 如果我将图形“转换”为邻接矩阵来表示链接权重和关系类型,您认为这会有所帮助吗? 是否更容易执行该算法而不是链接列表? 我可以轻松地实现一个函数来在需要时进行转换。 我这样说是因为我觉得在阅读了几页关于这个主题之后会更容易,但我可能是错的。 我对其他4个操作,建议没有任何想法?

如何针对2个节点之间的单个最短路径优化Dijkstra算法?

我试图在Dijkstra算法的C中理解这个实现 ,同时修改它,以便只找到2个特定节点(源和目的地)之间的最短路径。 但是,我不确切知道该做些什么。 我看到它的方式,没有什么可做的,我似乎无法改变d[]或prev[]因为这些数组聚合了一些重要数据用于最短路径计算。 我唯一能想到的就是在找到路径时停止算法,也就是说,当mini = destination被标记为已访问时,打破循环。 还有什么我可以做的让它变得更好还是够了? 编辑: 虽然我很欣赏给予我的建议,但人们仍未能完全回答我的质疑。 我想知道的是如何优化算法以仅搜索2个节点之间的最短路径。 到目前为止,我对所有其他一般优化都不感兴趣。 我所说的是,在找到从节点X到所有其他节点的所有最短路径的算法中,如何优化它以仅搜索特定路径? PS:我刚注意到for循环从1开始直到<= ,为什么它不能从0开始直到< ?