假设您有以下Python函数,并假定链表的正常结构:
def append(self, element): # Line 1
new_node = Node(element, None) #2nd arg. is the next_node # Line 2
ptr = self.head # Line 3
if self.size == 0: # No elements case # Line 4
self.head = new_node # Line 5
self.tail = new_node # Line 6
self.size += 1 # Line 7
else: # 1 or more elements # Line 8
while ptr.next_node != None: # Line 9
ptr = ptr.next_node # Line 10
ptr.next_node = new_node # Line 11
self.tail = new_node # Line 12
self.size += 1 # Line 13
函数尝试将节点附加到链表的末尾,同时更新相关值。我想知道函数的时间复杂度——理想情况下,它是O(c),其中c是常数,但我相信它是O(n)。你知道吗
逐行分析,我可以看到第1-7行和第10-13行在每个函数调用中执行一次,并以固定时间运行。但是,第8-10行将以线性时间运行,因为while循环必须为n个节点执行n次。此外,第10行也被执行n次。你知道吗
函数在O(n)时间内运行对吗?你知道吗
接下来,考虑另一个函数。你知道吗
def append(self, element): # Line 1
new_node = Node(element, None) #2nd arg. is the next_node # Line 2
ptr = self.tail # Line 3
if self.size == 0: # No elements case # Line 4
self.head = new_node # Line 5
self.tail = new_node # Line 6
self.size += 1 # Line 7
else: # 1 or more elements # Line 8
ptr.next_node = new_node # Line 9
self.tail = new_node # Line 10
self.size += 1 # Line 11
第1-11行都是if语句或赋值,它们以恒定的时间运行,每个函数调用执行一次。因此,此函数将作为O(c)运行。你知道吗
它会在O(c)时间内运行吗?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐