在计算机科学中,时间复杂度和内存需求是选择数据结构和算法的重要因素。不同的集合实现方式对时间和空间的需求也有所不同。以下是几种常见的示例:
数组是一种简单的数据结构,具有常量时间访问元素和大小固定的优点,但插入和删除元素需要移动其他元素,因此平均时间复杂度为O(n),其中n是元素数量。在删除元素时可以将其标记为'已删除”,而不是立即移动其他元素。这称为'软删除”。
示例代码:
class ArraySet:
def __init__(self):
self.array = []
def add(self, item):
if item not in self.array:
self.array.append(item)
def remove(self, item):
if item in self.array:
self.array.remove(item)
def __contains__(self, item):
return item in self.array
链表的插入和删除元素具有常量时间,但访问任意元素的时间为O(n),其中n是元素数量。
示例代码:
class ListNode:
def __init__(self, val=None):
self.val = val
self.next = None
class LinkedListSet:
def __init__(self):
self.head = ListNode()
def add(self, item):
if item not in self:
new_node = ListNode(item)
new_node.next = self.head.next
self.head.next = new_node
def remove(self, item):
prev, curr = self.head, self.head.next
while curr:
if curr.val == item:
prev.next = curr.next
break
prev, curr = curr, curr.next
def __contains__(self, item):
curr = self.head.next
while curr:
if curr.val == item:
return True
下一篇:不同激活函数的性能比较