算法知识、栈、队列

一、算法基础

  1. 算法特征
特征 说明
有穷性 有限时间内完成
确定性 无歧义的明确定义
输入 0个或多个输入(0输入指内置参数)
输出 ≥1个输出
可行性 符合计算规则,可执行有限次实现
  1. 常见算法类型
  • 基础算法:穷举、高精度计算
  • 核心算法:排序、递推、递归
  • 优化算法:贪心、分治、搜索(DFS/BFS)、动态规划
  1. 算法复杂度

时间复杂度(常见阶数升序):

O(1) < O(log n) < O(n) < O(n log n) < O(n²) < O(n³) < O(2ⁿ)

空间复杂度:算法运行所需内存空间

  1. 常见算法的算法复杂度
算法类别 最佳情况 平均情况 最坏情况 空间复杂度 备注
哈希查找 O(1) O(1) O(n) O(n) 冲突时退化为链表
二分查找 O(1) O(log n) O(log n) O(1) 要求有序数组
快速排序 O(n log n) O(n log n) O(n²) O(log n) 最坏情况需优化枢轴选择
归并排序 O(n log n) O(n log n) O(n log n) O(n) 稳定排序
堆排序 O(n log n) O(n log n) O(n log n) O(1) 原地排序
冒泡排序 O(n) O(n²) O(n²) O(1) 优化后可提前终止
选择排序 O(n²) O(n²) O(n²) O(1) 不稳定
插入排序 O(n) O(n²) O(n²) O(1) 对小规模数据高效
DFS/BFS O(V+E) O(V+E) O(V+E) O(V) V:顶点数,E:边数
Dijkstra O(V²) O(E log V) O(E log V) O(V) 优先队列优化后
动态规划 O(子问题数) O(子问题数) O(子问题数) O(状态空间) 依赖问题分解
回溯算法 O(解空间大小) O(解空间大小) O(解空间大小) O(递归深度) 指数级复杂度常见

二、数据结构基础

  1. 数组特性
特性 说明 时间复杂度
同类型元素 存储相同数据类型 -
随机访问 通过下标直接访问 O(1)
插入/删除 需移动元素 O(n)

优化方向:通过限制操作类型定制高效结构 → 栈、队列、堆


三、栈(Stack)

  1. 核心特性
  • LIFO/FILO:后进先出原则
  • 高效操作:push/pop/getTop均为O(1)
  • 核心组件:栈顶指针(counter)
  1. 操作清单
操作 功能描述 时间复杂度
init() 初始化空栈 O(1)
push(x) 元素x入栈 O(1)
pop() 移除栈顶元素 O(1)
getTop() 获取栈顶元素(不移除) O(1)
empty() 检测栈是否为空 O(1)
display() 输出栈内所有元素 O(n)
setNull() 清空栈 O(1)

四、队列(Queue)

  1. 核心特性
  • FIFO:先进先出原则
  • 双指针管理:队首指针f(指向头元素前),队尾指针r(指向最后元素)
  • 初始状态:f = r = 0
  1. 操作清单
操作 功能描述 时间复杂度
init() 初始化空队列 O(1)
enqueue(x) 元素x入队 O(1)
dequeue() 移除队首元素 O(1)
isEmpty() 检测队列是否为空 O(1)
isFull() 检测队列是否已满 O(1)
display() 输出队列所有元素 O(n)

特殊变种:循环队列、双端队列、优先队列

posted @ 2025-05-15 15:36  Jason227  阅读(22)  评论(0)    收藏  举报