从最大priority queue
获取最小元素的最有效方法是什么?
假设我创建了一个通用priority queue
。现在这个queue
包含猫和猫有一个变量鱼,这是猫吃过的鱼的数量,我想让猫吃掉最少的鱼并给她多一些鱼,然后{{1再次sort
(这意味着我调用priority queue
来获取更接近根的鱼)。但由于swim()
是最大值(它必须是最大值,它不能是最小值),我怎样才能得到吃过最少鱼的猫?
答案 0 :(得分:0)
给定顶部元素最大的优先级队列,获取最小项的唯一方法是从队列中删除所有元素。您删除的最后一个是最小的项目。该方法的复杂性是O(n log n)。此外,您必须保存已弹出的项目,并在删除最后一项后将其重新放入队列。
您似乎已将优先级队列实现为二进制最大堆。如果是这种情况,那么最小的项目将是一个叶子,根据定义,它将在最后的n / 2个项目中。因此,如果您有权访问支持数组,则可以搜索最后一个项目的最后n / 2项。这是O(n)操作。
如果您需要定期删除最小的项目,可以考虑实施min-max heap。
答案 1 :(得分:0)
重新定义鱼的订购属性。
如果您使用的是使用import re
from collections import defaultdict
ga_re = r"<script type=\"text\/javascript\">\s+var _gaq = _gaq .*</script>" # our regex to subtract google analytics script
file_texts = defaultdict(str) # Temp store for file text
file_paths = ['first_file.html', 'second_file.html'] # list of files you want to run
for file_path in file_paths:
with open(file_path, mode='r') as f:
# Extract text from file
file_text = ''.join(f.readlines())
file_texts[file_path] = file_text
# Write to backup file
with open('{}.backup'.format(file_path), mode='w+') as fbackup:
fbackup.write(file_text)
with open(file_path, mode='w+'):
# Perform regex sub and write to file
file_text = file_texts[file_path]
file_text_result = re.sub(ga_re, file_text, re.DOTALL)
f.write(file_text_result)
概念的语言,一种方法是编写一个比较器来反转fish的默认排序属性。另一种选择是在创建/推动猫时存储鱼数的负数。逻辑可以构建到cat对象中,因此用户只能查看和操作正数量的鱼,但它们在内部存储为负值。