当前位置: 首页 > 知识库问答 >
问题:

使用堆/优先级队列表示有向加权图

谭修竹
2023-03-14

所以我有一个有向加权图。我需要使用Dijskra的算法来扫描这个图并打印出最短的路径。我必须使用堆/优先级队列,从我目前的知识来看,我知道这是一回事。

但是,一个图可以有2个以上的子节点,一个堆只能有2个子节点。当我把它放入堆格式时,其他子节点(边)会发生什么?

共有1个答案

虞正业
2023-03-14

堆的表示本身并不与图的结构相关联。

您正在使用Graph。你需要找到最小距离的顶点,然后用它来确定与它的最小距离。堆在帮你拿那东西。仅此而已。

在heap中,层并不表示图的层次结构,它只是将堆的层与任何节点的值都小于它的子节点的值的属性相关联。就是这样。图中的兄弟姐妹可能会在堆中处于父子关系中。

    null
 类似资料:
  • 注意:我知道可以用比较器创建优先级队列,然后重复调用Add。

  • 我正在编写一个涉及堆实现的代码,在我的bubbleUp方法中,在我的while循环行中,我似乎遇到了一个取消引用的错误。这可能是一个相当基本的问题,但解决这个问题的最佳方法是什么?我在实现removeHigh方法时也遇到了一些问题,该方法旨在从队列中移除最高的元素。

  • 问题内容: 总体而言,我正在尝试使用优先级队列来实现Dijkstra的算法。 根据golang-nuts的成员所述,Go中惯用的方法是将堆接口与自定义的基础数据结构一起使用。所以我像这样创建了Node.go和PQueue.go: 和PQueue.go: 和main.go :(动作在SolveMatrix中) 问题是,在编译时我收到错误消息: 注释掉PQ.Push(firstNode)行确实使编译器

  • 问题内容: 我正在尝试根据文档中提供的示例实现优先级队列。文件:priorityQueue 简而言之,它看起来像这样(不包括所有内容): 该文件中: 如您所见,在与示例进行比较时,我不使用指针,因为这样做会给我一个编译错误,告诉我我的优先级队列未正确实现接口。 这会给我带来以下问题: 该项目未附加到队列中。 我试图写出队列指针地址,它显示了不同的地址。这就解释了为什么它不起作用,但是切片不是地图长

  • 我不熟悉堆,二进制堆,我试图理解为什么我们需要使用二进制堆实现优先级队列。我还了解到二进制堆的底层数据结构也是一个数组。 所以我的问题是,为什么我们不能使用一个数组,按降序(对于最大堆)或升序(对于最小堆)排序来表示优先级队列?这里我可能错了,但我认为,如果以这种方式实现,findMax、findMin、insert和delete等操作的时间复杂度将几乎保持不变。那么,我们是否可以不使用排序数组来

  • 我目前正在尝试实现min heap PQ,但是我在实现的正确性方面遇到了一些问题,我似乎无法找出我做错了什么——它没有输出最低优先级,也没有对它们进行正确排序。 使用以下测试数据: 我得到以下结果: 我希望结果是按升序排列的——起初我认为这可能是因为交换了错误的孩子,但最后一个输出是最大的优先级,所以这没有意义。我花了几个小时试图研究堆优先级队列,但我找不到任何帮助。 以下是CMP要求的更好的代码