算法与数据结构
外观
算法与数据结构[编辑 | 编辑源代码]
算法与数据结构是计算机科学的核心基础,研究如何高效地组织和处理数据。算法指解决问题的一系列明确步骤,数据结构则是存储和组织数据的方式。两者相辅相成,共同构成了高效程序设计的理论基础和实践工具。
基本概念[编辑 | 编辑源代码]
算法[编辑 | 编辑源代码]
算法是具有以下特性的计算过程:
- 有限性:必须在有限步骤后终止
- 确定性:每个步骤都有明确定义
- 输入:有零个或多个输入
- 输出:产生至少一个输出
- 有效性:每个步骤都能在有限时间内完成
数据结构[编辑 | 编辑源代码]
常见的基本数据结构包括:
复杂度分析[编辑 | 编辑源代码]
算法效率通常用大O符号表示:
时间复杂度示例:
# O(1) 常数时间
def get_first(arr):
return arr[0]
# O(n) 线性时间
def linear_search(arr, target):
for item in arr:
if item == target:
return True
return False
# O(n^2) 平方时间
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
经典算法[编辑 | 编辑源代码]
排序算法[编辑 | 编辑源代码]
搜索算法[编辑 | 编辑源代码]
应用实例[编辑 | 编辑源代码]
路径规划[编辑 | 编辑源代码]
使用Dijkstra算法寻找图中两点间最短路径:
数据压缩[编辑 | 编辑源代码]
哈夫曼编码利用字符出现频率构建最优前缀码:
from heapq import heappop, heappush
def build_huffman_tree(freq):
heap = [[weight, [char, ""]] for char, weight in freq.items()]
heapify(heap)
while len(heap) > 1:
lo = heappop(heap)
hi = heappop(heap)
for pair in lo[1:]:
pair[1] = '0' + pair[1]
for pair in hi[1:]:
pair[1] = '1' + pair[1]
heappush(heap, [lo[0] + hi[0]] + lo[1:] + hi[1:])
return heap[0]