LinkListの終わりに要素を追加するよりも速くLinkListのhead要素を削除するかどうかをテストします。私のLinkedListでは、head_pop()とappend()の時間が同じですか?
これは私の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)であるべきだと思います。
あなたの 'timetest'はあなたが思っていることをやっていません。あなたはおそらく関数を渡すことを意図したときに、関数を呼び出して、結果を 'timetest'に渡します。しかし、たとえそれを与えられても、あなたは単に「時間」に変数を単に参照するだけです。 'f'を呼び出す必要があります。 'f()' –