什么类型的应用程序需要合并多个堆?
What type of applications need to merge multiple heaps?
在不同的可用堆操作中,我了解需要 decreasekey 来降级作业,需要 increasekey 来提升作业,并且需要 removekey 来 cancel/abort 作业。什么类型的应用程序需要合并两个或多个堆?有堆合并的实际用例吗?
我实际使用堆合并的东西。
我有多个包含键计数的非常大的文件。也就是说,每一行包含一个 [key, count]
对。所有密钥都是唯一的。我需要一个包含每个文件中前 X 个(可能非常大)项的堆。
一种方法是:
create empty master heap
for each file
use standard heap selection to get top 10 items from file
add each item from file heap to master heap
另一种方法是用合并替换将项目添加到主堆的循环。根据您使用的堆类型,合并操作可以快 很多。配对堆(和其他堆)将在 O(1) 中进行合并。
在不同的可用堆操作中,我了解需要 decreasekey 来降级作业,需要 increasekey 来提升作业,并且需要 removekey 来 cancel/abort 作业。什么类型的应用程序需要合并两个或多个堆?有堆合并的实际用例吗?
我实际使用堆合并的东西。
我有多个包含键计数的非常大的文件。也就是说,每一行包含一个 [key, count]
对。所有密钥都是唯一的。我需要一个包含每个文件中前 X 个(可能非常大)项的堆。
一种方法是:
create empty master heap
for each file
use standard heap selection to get top 10 items from file
add each item from file heap to master heap
另一种方法是用合并替换将项目添加到主堆的循环。根据您使用的堆类型,合并操作可以快 很多。配对堆(和其他堆)将在 O(1) 中进行合并。