那些操作?
添加元素;插入元素;访问元素;搜索/查找元素;更新元素;删除元素;获取元素的长度
复杂度有多少?
对算法复杂度的衡量,主要依据操作的实现方法。比如插入访问搜索,更新删除元素这些操作,也就是除了长度获取和添加元素之外,这几个方法无一例外需要使用索引值遍历,而这一个操作的时间复杂度是O(N),除此之外,更新元素还需要替换,所以严格来讲,这些操作的算法复杂度至少是O(N)
如何使用代码实现操作?
# -- codeing = utf-8 --
# @Time : 2/6/2021 1:57 PM
# @Autor : Caesar
# @File : Linklist.py
# @ Software : PyCharm
_from collections import deque
# Create a linkedlist
_linkedlist = deque()
# Add element
# Time Complexity : O(1)
_linkedlist.append(1)
linkedlist.append(2)
linkedlist.append(3)
#[1,2,3]
_print(linkedlist)
“””
使用索引插入,需要通过遍历找到这个索引值,因此时间复杂度是O(N)
“””
# Insert element
# Time complexity:O(N)
_linkedlist.insert(2, 99)
# [1,2,99,3]
_print(linkedlist)
“””
使用索引值访问某个元素,必然经过复杂度最高的遍历,所以时间复杂度还是O(N)
“””
# Access an element
# Time Complexity: O(N)
_element = linkedlist[2]
# 99
_print(element)
“””
通过遍历搜索链表中的每一个元素,直到找到想要的那个元素,因此时间复杂度还是O(N)
“””
# Search an element
# Time complexity: O(N)
_index = linkedlist.index(99)
# 2
_print(index)
“””
对于时间复杂度的分析,更进一步的思考方式是考虑其实现,比如更新一个元素,更新的策略依靠的是索引值
所以第一步肯定是通过遍历找到这个索引值,然后通过替换的方法,实现更新“””
**# Update an element
# Time complexity : O(N)
_linkedlist[2] = 88
# [1, 2, 88, 3]
_print(linkedlist)
“””
有两种方法可以实现删除,分别是del,remove.但在这里我们对算法复杂度的估量需要考虑更多的因素
比如删除的这个操作本身是O(N)但是删除之前需要先找到这个元素,而查找的实现依赖遍历,所以删除
方法的实现,它的时间复杂度还是O(N)
“””
_# remove an element
# del linkedlist[2]
_linkedlist.remove(88)
print(linkedlist)
# Length
# Time complexity: O(1)
_length = len(linkedlist)
# 3
_print(length)