当前位置:实例文章 » JAVA Web实例» [文章]【数据结构】---时间复杂度与空间复杂度

【数据结构】---时间复杂度与空间复杂度

发布人:shili8 发布时间:2025-03-11 18:50 阅读次数:0

**数据结构**

在计算机科学中,数据结构是指组织、存储和操作数据的方式。它是计算机程序设计中的一个基本概念,直接影响到程序的性能、效率和可维护性。

本文将讨论时间复杂度与空间复杂度这两个重要概念,以及它们在不同数据结构中的应用。

**时间复杂度**

时间复杂度(Time Complexity)是指算法执行所需的时间量,与输入大小的关系。它通常用大O符号表示,例如O(n)、O(log n)等。

常见的时间复杂度级别有:

* O(1):恒定时间复杂度,表示算法在任何情况下都只需要常数时间。
* O(log n):对数时间复杂度,表示算法的执行时间与输入大小的对数成正比。
* O(n):线性时间复杂度,表示算法的执行时间与输入大小成正比。
* O(n log n):线性对数时间复杂度,表示算法的执行时间与输入大小的乘积成正比。
* O(n^2):平方时间复杂度,表示算法的执行时间与输入大小的平方成正比。

**空间复杂度**

空间复杂度(Space Complexity)是指算法所需的存储空间量,与输入大小的关系。它通常用大O符号表示,例如O(1)、O(n)等。

常见的空间复杂度级别有:

* O(1):恒定空间复杂度,表示算法在任何情况下都只需要常数存储空间。
* O(log n):对数空间复杂度,表示算法所需的存储空间与输入大小的对数成正比。
* O(n):线性空间复杂度,表示算法所需的存储空间与输入大小成正比。

**例子**

###1. 线性搜索

def linear_search(arr, target):
 """
 Linear search algorithm.

 Args:
 arr (list): The input array.
 target: The target value to be searched.

 Returns:
 int: The index of the target value if found, -1 otherwise.
 """
 for i in range(len(arr)):
 if arr[i] == target:
 return i return -1# Example usagearr = [2,5,8,12,16,23,38,57,62,72,81]
target =23index = linear_search(arr, target)
print(f"Target {target} found at index {index}")


时间复杂度:O(n)

空间复杂度:O(1)

###2. 二分搜索
def binary_search(arr, target):
 """
 Binary search algorithm.

 Args:
 arr (list): The input array.
 target: The target value to be searched.

 Returns:
 int: The index of the target value if found, -1 otherwise.
 """
 low =0 high = len(arr) -1 while low <= high:
 mid = (low + high) //2 if arr[mid] == target:
 return mid elif arr[mid] < target:
 low = mid +1 else:
 high = mid -1 return -1# Example usagearr = [2,5,8,12,16,23,38,57,62,72,81]
target =23index = binary_search(arr, target)
print(f"Target {target} found at index {index}")


时间复杂度:O(log n)

空间复杂度:O(1)

###3. Hash表
class HashTable:
 def __init__(self):
 self.size =10 self.table = [[] for _ in range(self.size)]

 def hash_function(self, key):
 return hash(key) % self.size def insert(self, key, value):
 index = self.hash_function(key)
 for i, (k, v) in enumerate(self.table[index]):
 if k == key:
 self.table[index][i] = (key, value)
 break else:
 self.table[index].append((key, value))

 def search(self, key):
 index = self.hash_function(key)
 for k, v in self.table[index]:
 if k == key:
 return v return None# Example usagehash_table = HashTable()
hash_table.insert("apple",5)
hash_table.insert("banana",7)

print(hash_table.search("apple")) # Output:5


时间复杂度:O(1)(平均情况下)

空间复杂度:O(n)

###4. 堆栈
class Stack:
 def __init__(self):
 self.stack = []

 def push(self, value):
 self.stack.append(value)

 def pop(self):
 if not self.is_empty():
 return self.stack.pop()
 else:
 raise IndexError("Stack is empty")

 def peek(self):
 if not self.is_empty():
 return self.stack[-1]
 else:
 raise IndexError("Stack is empty")

 def is_empty(self):
 return len(self.stack) ==0# Example usagestack = Stack()
stack.push(5)
stack.push(7)

print(stack.pop()) # Output:7


时间复杂度:O(1)

空间复杂度:O(n)

###5. 队列
class Queue:
 def __init__(self):
 self.queue = []

 def enqueue(self, value):
 self.queue.append(value)

 def dequeue(self):
 if not self.is_empty():
 return self.queue.pop(0)
 else:
 raise IndexError("Queue is empty")

 def peek(self):
 if not self.is_empty():
 return self.queue[0]
 else:
 raise IndexError("Queue is empty")

 def is_empty(self):
 return len(self.queue) ==0# Example usagequeue = Queue()
queue.enqueue(5)
queue.enqueue(7)

print(queue.dequeue()) # Output:5


时间复杂度:O(n)

空间复杂度:O(n)

###6. 链表
class Node:
 def __init__(self, value):
 self.value = value self.next = Noneclass LinkedList:
 def __init__(self):
 self.head = None def append(self, value):
 node = Node(value)
 if not self.head:
 self.head = node else:
 current = self.head while current.next:
 current = current.next current.next = node def traverse(self):
 values = []
 current = self.head while current:
 values.append(current.value)
 current = current.next return values# Example usagelinked_list = LinkedList()
linked_list.append(5)
linked_list.append(7)

print(linked_list.traverse()) # Output: [5,7]


时间复杂度:O(n)

空间复杂度:O(n)

###7. 树
class Node:
 def __init__(self, value):
 self.value = value self.left = None self.right = Noneclass Tree:
 def __init__(self):
 self.root = None def insert(self, value):
 if not self.root:
 self.root = Node(value)
 else:
 self._insert(value, self.root)

 def _insert(self, value, node):
 if value < node.value:
 if node.left:
 self._insert(value, node.left)
 else:
 node.left = Node(value)
 elif value > node.value:
 if node.right:
 self._insert(value, node.right)
 else:
 node.right = Node(value)

 def traverse(self):
 values = []
 self._traverse(values, self.root)
 return values def _traverse(self, values, node):
 if node:
 self._traverse(values, node.left)
 values.append(node.value)
 self._traverse(values, node.right)

# Example usagetree = Tree()
tree.insert(5)
tree.insert(7)

print(tree.traverse()) # Output: [5,7]


时间复杂度:O(n)

空间复杂度:O(n)

###8. 图
class Graph:
 def __init__(self):
 self.adjacency_list = {}

 def add_vertex(self, value):
 if value not in self.adjacency_list:
 self.adjacency_list[value] = []

 def add_edge(self, from_value, to_value):
 if from_value in self.adjacency_list and to_value in self.adjacency_list:
 self.adjacency_list[from_value].append(to_value)
 self.adjacency_list[to_value].append(from_value)

 def traverse(self):
 visited = set()
 values = []
 for value in self.adj

其他信息

其他资源

Top