我尝试重新实现堆化方法,以便使用_siftup和_siftdown更新或删除堆中的任何节点,并保持O(log(n))的时间复杂度。
我为优化我的代码做了一些努力,但事实证明,与heapq.heapify相比,它们更糟糕(从所花费的总时间来看)。所以我决定研究一下。并将复制的代码与模块代码进行了比较。
# heap invariant.
def _siftdown(heap, startpos, pos):
newitem = heap[pos]
# Follow the path to the root, moving parents down until finding a
import heapq
f = [int(x) for x in input().split()]
T=[]
for i in range(len(f)):
heapq.heappush(T,(f[i],str(i)))
while len(T)>1:
a=heapq.heappop(T)
b=heapq.heappop(T)
heapq.heappush(T,(a[0]+b[0],'('+a[1]+' '+b[1]+')' ))
temp = 0
cost = 0
index= 0
for i
我需要创建具有特定时间范围和优先级的作业队列,例如
name time priority
-----------------------------------------------------
Job 1: from 13:00 till 14:00 5.5.2018 10
Job 2: from 14:00 till 15:00 5.5.2018 10
Job 3: from 14:00 till 15:00 5.5.2018 1
现在我需要的是允许Job 3覆盖Job 2,因为它具有
如何逐行读取多个CSV输入文件,比较每行中的字符,将先按字母顺序出现的行写入输出文件,然后将最小值文件的指针向前推进,继续与所有文件进行比较,直到达到所有输入文件的末尾为止。下面是一些解决方案的粗略计划。
buffer = []
for inFile in inFiles:
f = open(inFile, "r")
line = f.next()
buffer.append([line, inFile])
#find minimum value in buffer alphabetically...
#write it to an output
下面的代码从导入的模块中打印每个函数的docstring。但是,结果包括一些没有在模块中定义的函数,而是由模块导入的。
import inspect
import my_module
all_functions = inspect.getmembers(my_module, inspect.isfunction)
for i in all_functions:
print i[0] # print function name
print i[1].
我有几个排序列表,我想把它们加到一个大的排序列表中。做这件事最有效的方法是什么?
我会这样做,但效率太低了:
big_list=[]
for slist in sorted_lists: # sorted_lists is a generator, so lists have to be added one by one
big_list.extend(slist)
big_list.sort()
下面是sorted_lists的一个示例:
sorted_lists的大小=200
sorted_lists=1668第一元素的大小
sorted_lists=[
['000008.
我正在尝试返回一系列流媒体数字的运行中位数。为此,我使用了max-heap (将值存储在序列的下半部分)和min-heap (将值存储在序列的上半部分)。
特别是,我使用的是来自heapq模块()的Python (2.0)内置最小堆数据结构。要构建max-heap,我只需使用我需要推送到堆中的数字的负数。
我的Python代码如下:
import heapq
maxh = []
minh = []
vals=[1,2,3,4,5,6,7,8,9,10]
for val in vals:
# Initialize the data-structure and insert/push
我们可以在创建列表本身的同时创建排序列表吗?
或
是否有其他数据结构可以在创建时按排序顺序放置值?
list = []
list.append("cde")
list.append("abc")
list.append("xyz") # append element in sorted order itself
我很熟悉
list.sort() #or
list = sorted(list)
我根据以下输入发行版生成Huffman代码:
a = [(1,0.5),(0,0.25),(0,0.125),(0,0.125)]
b = [(0,0.5),(1,0.25),(0,0.125),(0,0.125)]
唯一的区别是1在不同的垃圾桶中。
但是,当我使用以下函数对这些代码进行编码时:
def encode(symbfreq):
tree = [[wt, [sym, ""]] for sym, wt in symbfreq]
heapq.heapify(tree)
while len(tree)>1:
lo, hi = h
python中有heapq,用于一般用途。我想记录topN(0~20)为10e7记录。
如果使用heapq,应该使用“-”将max转换为min;并记录底部的min数,调用heapq.heappushpop()
我应该使用heapq还是自实现堆(可能是buggy还是效率较低)?
#update
import heapq
class TopN(object):
"""
v format: (num, value)
after looking into http://hg.python.org/cpython/file/2.7/Lib/heapq.