Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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
Data structures 二进制堆是否支持减少密钥操作?_Data Structures_Priority Queue - Fatal编程技术网

Data structures 二进制堆是否支持减少密钥操作?

Data structures 二进制堆是否支持减少密钥操作?,data-structures,priority-queue,Data Structures,Priority Queue,根据,需要Θ(logn)(转换为O(logn))来执行减少键操作。然而,似乎没有任何站点包含具有减少密钥操作的二进制堆实现 因此,考虑到web上缺乏实现,是否可以在二进制堆中执行减少键操作?我发现: 为了在O(logn)中执行减少键,我们必须事先知道相应元素的位置。一个hash映射和一个好的hash函数可以保证O(1)个摊销时间。在每次修改之后,我们必须更新哈希映射,它采用O(logn) 在确定元素的位置后,如果元素的优先级高于其父元素,则将其上移(与插入的方式类似),如果元素的优先级低于其子

根据,需要Θ(logn)(转换为O(logn))来执行减少键操作。然而,似乎没有任何站点包含具有减少密钥操作的二进制堆实现

因此,考虑到web上缺乏实现,是否可以在二进制堆中执行减少键操作?

我发现:

  • 为了在O(logn)中执行减少键,我们必须事先知道相应元素的位置。一个hash映射和一个好的hash函数可以保证O(1)个摊销时间。在每次修改之后,我们必须更新哈希映射,它采用O(logn)
  • 在确定元素的位置后,如果元素的优先级高于其父元素,则将其上移(与插入的方式类似),如果元素的优先级低于其子元素的优先级,则将其下移(与删除的方式类似),并更新修改后的元素在哈希映射中的位置

我认为这是他问的一个完全正确的问题……你可能对哪一个有
Θ(1)
减少键操作感兴趣,我认为是相反的。哈希映射的更新需要O(1),而reduce key需要O(lg(n))。更新哈希映射需要O(logn),因为每次
交换(父、子)
操作都必须更新它。在
递减键
操作中存在O(log n)这样的操作。