两个不同的追加函数到链表的时间复杂度?

时间:2019-01-18 08:16:58

标签: python algorithm linked-list append time-complexity

假设您具有以下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)时间运行吗?

0 个答案:

没有答案