我想知道为什么 Java 的优先级队列不支持 ChangePriority。我在某处(没有详细信息)读到,放弃 ChangePriority 允许人们使用更有效的实现,但不知道它怎么可能——二进制堆似乎非常简单/高效的数据结构——看不到任何改进的空间。另一个线索可能是它可能需要笨拙的界面来向 PQ 指示哪个元素(可能是堆中的位置)改变了它的优先级,但我仍然是 Java 的新手,无法得出结论。
编辑:为什么这不是一个毫无意义的问题?如果您是 Java 新手(尤其是 C/C++ 背景),您会开始想知道所有指针都去了哪里,或者我如何在 Java 中实现 Dijkstra 等。
第一个问题已经回答了很多次,据我所知,第二个问题没有一个简单的答案。人们可以期望,在像 Java 这样的语言中,所有常用的编程工具都在手边,开箱即用,封装在一个漂亮的类包装器中。但是突然之间你必须自己实现一个带有减少键方法的 PQ,这在 Java 中可能比在 C/C++ 中更尴尬。在这个问题中,我不是在问如何实现 Dijkstra(这在其他一些线程中得到了很好的回答)。如果没有减少键/优先级方法,仍然可能有许多 PQ 应用无法解决,例如。如果优先级更新比 PQ 中的项目多得多。在 Dijkstra 中最多有 V
因此,人们可能会认为 Java 的 PQ 缺乏变更优先级是有一些严重的原因的。不管实际的 Java 的 PQ 接口如何,这些原因本身可能很有趣。