当前位置: 首页 > news >正文

数据结构——算法设计的基本思想(穷举、递归、分治等)

(1)穷举法(Brute Force)

穷举法的基本思想是:列举所有可能的情况,逐一验证,直到找到问题的解或证明无解

  • 优点:通用性强,思路简单,容易实现。
  • 缺点:效率低,通常时间复杂度较高。

例子
判断一个数组中是否存在两个数的和为 kkk。穷举法的做法是枚举所有数对,检查其和是否等于 kkk,复杂度为 O(n2)O(n^2)O(n2)

在考研中,穷举法往往作为起点,在此基础上再引入优化(如排序 + 双指针,将复杂度降为 O(nlog⁡n)O(n\log n)O(nlogn))。


(2)递归法(Recursion)

递归是一种“函数直接或间接调用自身”的思想。其核心在于:把原问题分解为规模更小、形式相同的子问题来求解

  • 关键要素:递归出口(终止条件) + 递归式(自我调用)。
  • 优点:描述简洁,符合问题的自然结构。
  • 缺点:可能导致栈空间开销大,效率较低。

例子
斐波那契数列:

F(n)={0,n=01,n=1F(n−1)+F(n−2),n>1 F(n)= \begin{cases} 0, & n=0 \\ 1, & n=1 \\ F(n-1)+F(n-2), & n>1 \end{cases} F(n)=0,1,F(n1)+F(n2),n=0n=1n>1

直接递归的效率为 O(2n)O(2^n)O(2n),但通过记忆化搜索或动态规划可降为 O(n)O(n)O(n)


(3)分治法(Divide and Conquer)

分治法的基本思想是:把一个规模较大的问题分解为若干规模较小但结构相同的子问题,分别求解后再合并结果

  • 步骤:分解(Divide)→ 递归求解(Conquer)→ 合并(Combine)。
  • 优点:常能显著降低复杂度;适合处理大规模数据。
  • 典型应用:排序(归并排序、快速排序)、搜索(二分查找)、矩阵运算。

例子
归并排序:

  • 分解:把数组分成左右两半;
  • 求解:递归排序左右子数组;
  • 合并:将两个有序子数组合并。
    其时间复杂度为 O(nlog⁡n)O(n\log n)O(nlogn)

(4)其它常见思想(简要了解)

除了上述三种,考研中还会涉及一些常见的算法思想:

  • 贪心(Greedy):在每一步选择当前最优解,期望最终得到整体最优解。例如最小生成树(Prim、Kruskal)、哈夫曼编码。
  • 动态规划(Dynamic Programming):通过保存子问题的解来避免重复计算。例如背包问题、最长公共子序列。
  • 回溯法(Backtracking):在搜索过程中尝试构造解,不符合条件时立即回退。例如八皇后问题、数独求解。
  • 分支限界法(Branch and Bound):在搜索树中利用上下界估计剪枝,避免无效搜索。

小结

  • 穷举法:简单直接,效率低。
  • 递归法:问题自我分解,但要注意效率和栈开销。
  • 分治法:分解 + 合并,效率常为 O(nlog⁡n)O(n\log n)O(nlogn)
  • 其它思想(贪心、动态规划、回溯)在后续章节会结合具体数据结构深入讲解。

在考研复习中,理解这些思想能帮助我们在遇到陌生题目时快速找到突破口。

http://www.dtcms.com/a/353732.html

相关文章:

  • 【自用】JavaSE--junit单元测试、反射、注解、动态代理
  • FreeRTOS 常见面试题与核心知识点详解
  • Redis数据持久化——RDB快照和Aof日志追加
  • 8.28 模拟
  • 从易用性的角度来看,哪个ETL平台比较好用?
  • MySQL-数据类型
  • Clerk 用户认证系统集成文档
  • 关于virtual camera
  • UE5 PCG 笔记(三) Height To Density 节点
  • UE5 查找组件
  • UE5多人MOBA+GAS 55、基于 Python 协调器与 EOS 的会话编排
  • 嵌入式Linux自学不走弯路!670+讲课程!系统学习路线:入门+应用+ARM+驱动+移植+项目 (STM32MP157开发板)
  • 快速入门PowerDesigner-Database
  • 软件开发整体介绍和Swagger介绍和使用步骤
  • Dubbo加标签方式
  • Ubuntu 22.04 插入光驱后磁盘满启动故障clean, ...files, ...blocks
  • Proxmox VE 中启用 CentOS 虚拟机的串口终端(xterm.js 控制台)
  • MAX系列FPGA型号对比及低功耗特性分析
  • 服务器类型与TCP并发服务器构建(SELECT)
  • 冬天的思念
  • 数模笔记day01(数据预处理、K-means聚类、遗传算法、概率密度分布)
  • SqlHelper类库的使用方法
  • 关于DTO、DO、BO、VO
  • Linux系统性能优化全攻略:从CPU到网络的全方位监控与诊断
  • [实战] 半导体工厂生产网络项目案例分享
  • 遥感语义分割消融实验+对比实验
  • AI驱动的前端性能优化:从监控到自动化修复
  • SymPy 与 NumPy 混合编程:解决矩阵类型转换与数学函数兼容性问题
  • 计算机视觉全流程(基础知识)
  • 耐达讯自动化Profibus 集线器:变送器连接的神秘王牌