Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用链表实现二进制堆_Java_Algorithm_Heap_Binary Tree - Fatal编程技术网

Java 使用链表实现二进制堆

Java 使用链表实现二进制堆,java,algorithm,heap,binary-tree,Java,Algorithm,Heap,Binary Tree,可能重复: 您好 在二进制堆的链表实现中,我很难找到一种算法来确定树节点的位置。我已经使用数组实现了堆,现在我想尝试使用链表;如果我使用数组来表示堆,是否有办法找到其数组索引为的树节点?看一看看一看有什么意义?链表实现将比基于数组的实现更慢或更复杂。如果用一个简单的链表替换数组,并且不添加其他结构,那么插入时间将是O(n)而不是O(logn),然后您还可以以相同的O(n)复杂度维护一个排序列表。这有什么意义?链表实现将比基于数组的实现更慢或更复杂。如果用简单的链表替换数组,并且不添加其他结构,

可能重复:

您好


在二进制堆的链表实现中,我很难找到一种算法来确定树节点的位置。我已经使用数组实现了堆,现在我想尝试使用链表;如果我使用数组来表示堆,是否有办法找到其数组索引为的树节点?

看一看

看一看

有什么意义?链表实现将比基于数组的实现更慢或更复杂。如果用一个简单的链表替换数组,并且不添加其他结构,那么插入时间将是O(n)而不是O(logn),然后您还可以以相同的O(n)复杂度维护一个排序列表。

这有什么意义?链表实现将比基于数组的实现更慢或更复杂。如果用简单的链表替换数组,并且不添加其他结构,则插入时间将是O(n)而不是O(logn),然后您还可以以相同的O(n)复杂度维护排序列表。

二进制堆并不总是更好。可以使用无序链表实现堆。它将有
O(1)
insert和
O(n)
删除大小为n的列表的时间复杂度。对于删除和插入,二进制堆是
O(n log n)
。如果您只需要执行少量(即常量)的删除,则可以使用链表。在实际操作中,这方面的一个很好的例子是使用Dijkstra算法的堆,其中需要插入和删除。在这种情况下,如果你有一个稠密的图,链表肯定会更好,但是对于稀疏的图,二进制堆更好。二进制堆并不总是更好。可以使用无序链表实现堆。它将有
O(1)
insert和
O(n)
删除大小为n的列表的时间复杂度。对于删除和插入,二进制堆是
O(n log n)
。如果您只需要执行少量(即常量)的删除,则可以使用链表。在实际操作中,这方面的一个很好的例子是使用Dijkstra算法的堆,其中需要插入和删除。在这种情况下,如果有一个稠密图,链表肯定会更好,但是对于稀疏图,二进制堆会更好。