【发布时间】:2019-11-21 15:19:06
【问题描述】:
from linkedlist import LinkedList
def find_max(linked_list): # Complexity: O(N)
current = linked_list.get_head_node()
maximum = current.get_value()
while current.get_next_node():
current = current.get_next_node()
val = current.get_value()
if val > maximum:
maximum = val
return maximum
def sort_linked_list(linked_list): # <----- WHAT IS THE COMPLEXITY OF THIS FUNCTION?
print("\n---------------------------")
print("The original linked list is:\n{0}".format(linked_list.stringify_list()))
new_linked_list = LinkedList()
while linked_list.head_node:
max_value = find_max(linked_list)
print(max_value)
new_linked_list.insert_beginning(max_value)
linked_list.remove_node(max_value)
return new_linked_list
由于我们循环了while循环N次,运行时间至少为N。对于每个循环我们调用find_max,但是,对于每次调用find_max,我们解析为find_max的linked_list减少了一个元素。基于此,运行时不是N log N吗?
还是N^2?
【问题讨论】:
-
什么是 1 + 2 + ... + (n-1) + n?
-
不,你还是 N^2。每次减少列表的大小意味着你是 1/2 N^2,但这只是一个常数。
标签: python python-3.x big-o complexity-theory