我想测试是否快速删除LinkList的head元素而不是向LinkList的末尾添加元素。
这是我的LinkList的主要代码:
class LNode:
def __init__(self,elem,next_=None):
self.elem=elem
self.next=next_
class LinkList:
def __init__(self):
self.__head=None
#delete head element
def head_pop(self):
if self.__head is None:
raise LinkedListUnderflow("in pop")
e=self.__head.elem
self.__head=self.__head.next
return e
#add an element at end
def append(self,elem):
if self.__head is None:
self.__head=LNode(elem)
return
p=self.__head
while p.next is not None:
p=p.next
p.next=LNode(elem)
import time
#test time
def timetest(f):
start=time.clock()
for a in range(0,1000000):
f
end=time.clock()
print("times:"+str(end-start))
然后,我试试这个:
llist=LinkList()
def append():
llist.append(666)
def head_pop():
llist.head_pop()
timetest(append())
timetest(head_pop())
输出:
times:0.029582597002445254
times:0.03032071299821837
正如您所看到的,他们花费的时间相同。
但我认为它应该是O(n):O(1)。
答案 0 :(得分:0)
您正在做的是将append()
的结果传递给您的时间测试函数,而您想要传递函数本身!
更改时间测试以调用f
功能:
def timetest(f):
start=time.clock()
for a in range(0,1000000):
f() # <- note the () here
end=time.clock()
print("times:"+str(end-start))
然后用它来测试:
timetest(append)
timetest(head_pop)
正如你所看到的,我们传入了要调用的函数的函数,而不是函数的结果(被调用一次!)