当前位置: 首页 > 面试题库 >

Redis:实现加权有向图

孙思源
2023-03-14
问题内容

使用Redis实现加权图的最佳方法是什么?

我们将主要在图上搜索最短路径(可能使用Dijkstra算法)

目前我们考虑将边缘添加到Redis

对于每个节点,我们将使用nodeId作为键,并使用引用节点的键的sortedset,sortedSet中每个nodeId的分数就是边缘的权重。

你怎么看?如果我错了,请纠正我,但这里唯一的遗憾是,对于sortedset中的下一个节点的每个查询,我们支付O(logn)而不是O(1)…

http://redis.io/commands/zrange


问题答案:

如果您一次取出一个排序集中的下一个项目,则仅获得O(log(n)),在这种情况下,与redis的连接延迟将比操作的复杂性更成问题。

对于图形上的大多数操作,您需要查看节点上的所有边,因此在处理节点时,将整个集合(或至少具有适当分数的那些)加载到本地内存中是有意义的。当然,这将意味着加载一些不会遵循的边缘,因为您已经找到了一条合适的路径,但是由于这些集合很小,因此这样做的代价将远远小于对您所做的每个边缘重新调用redis需要。



 类似资料:
  • 我想知道什么是实现无向加权图的有效方法。我想在上面执行Prims和Kruskal算法。我知道邻接列表,但这不会浪费内存;为。假设我有两个顶点A和B,由权重为“x”的边连接,所以我需要在邻接列表中添加两个条目: 我是不是漏掉了什么?

  • 我正在学习最小生成树。我研究了Prim的加权有向图算法。 算法简单 您有两组顶点:已访问和未访问 将所有边的距离设置为无穷远 从未访问集合中的任意顶点开始并探索其边 在所有边中,如果目标顶点没有被访问,并且如果边的权重小于目标顶点的距离,则用该边的权重更新目标顶点的距离 选择距离最小的未访问顶点,然后再进行一次,直到所有顶点都访问完 相信通过以上算法,能够在所有的生成树中找到代价最小的生成树,即最

  • 我有一个有向图,边上的权值是非负的。 我的算法应该做到以下几点: 获取从顶点u到顶点V的所有路径 计算从u到v的每条路径上的最小加权边 计算我从上面计算的最小加权边的最大值。

  • B)设是带有向图(无环多边)的一个邻接矩阵,其中是边到的一个权重。如果没有这样的边并且对于evrey我们有。矩阵。槽表示什么?最小权重?还是...? 知道吗? 编辑:我的意思是这些算法在图中找到哪一个?找到最大重量?最小重量?什么也没找到?

  • 在一个加权有向图中,我需要找到两个结点s,t之间的最短路径。以下是限制: 权重可以为负值。 路径必须经过一个特定的边,让我们从节点u到V调用her e和shes。 输出路径必须简单,即我们只通过一个节点一次。 因为我希望它最短,所以我将检查在从s到u之前从v到t运行bellman ford是否比相反的方式更快(如果有节点,两个节点都使用where是放置它的最佳位置)。 谢谢你的帮助!

  • 本文向大家介绍session 加入redis的实现代码,包括了session 加入redis的实现代码的使用技巧和注意事项,需要的朋友参考一下 Session信息入redis Session简介 session,中文经常翻译为会话,其本来的含义是 指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。有时候我们可以看到这样的话“在 一个浏