入门算法:枚举、模拟

枚举算法

枚举算法(Enumeration / Brute Force)是指:列举出所有可能的候选解,逐一验证每个候选是否满足问题要求,最终找到正确答案。

  • 核心思想:用计算机”不怕重复”的特点,把所有的可能性都试一遍
  • 通俗理解:”我不知道密码,但我从0000试到9999″
  • 别名:暴力枚举、穷举法

枚举是最笨的方法,也是最可靠的方法——当你想不出其他解法时,枚举就是解法。


枚举算法的三个核心要素

要素说明示例
解空间所有可能解的集合0~9999的所有数字
枚举方式如何遍历解空间for循环、递归、位运算
验证条件判断一个候选是否为解是否满足方程式

枚举算法的基本结构

 // 枚举算法通用模板
 for (枚举所有可能) {
     if (验证条件成立) {
         记录答案或输出;
     }
 }

枚举算法的优缺点

优点缺点
思路简单,不容易出错时间复杂度高
一定能找到正确答案数据量大时无法使用
不用动脑筋想数学规律可能产生重复解

模拟算法

模拟算法(Simulation)是指:按照问题描述的操作步骤,用代码”翻译”整个过程,一步步执行,最终得到结果。

  • 核心思想:忠实还原规则,跟着过程走
  • 通俗理解:就像按菜谱做菜——菜谱说放盐就放盐,说翻炒就翻炒
  • 别名:过程仿真、情景模拟

模拟不需要聪明的数学公式,只需要耐心地把规则翻译成代码。


模拟算法的四个核心要素

要素说明示例
状态模拟过程中需要维护的数据当前位置、当前分数、剩余时间
规则每一步如何改变状态移动规则、计分规则
初始状态模拟开始时的状态起点(0,0)、分数0
终止条件模拟何时结束达到指定步数、触发某个条件

模拟算法的基本结构

 // 模拟算法通用模板
 初始化状态;
 ​
 while (未达到终止条件) {
     根据规则更新状态;
     步数/时间推进;
 }
 ​
 输出最终状态;

模拟算法的优缺点

优点缺点
思路直接,按步骤写代码可能很长
不需要复杂数学推导容易遗漏边界条件
结果可靠(规则正确时)效率可能不高

模拟 vs 枚举 对比总结

维度枚举算法模拟算法
核心问题“有哪些可能?”“过程是怎样的?”
思维方式穷举所有候选复现问题步骤
关键动作生成 + 验证状态更新 + 规则翻译
代码结构循环 + if判断循环 + 状态变量
复杂度来源解空间大小过程步数
典型问法“找出所有满足…”“执行后结果是什么?”

一句话总结

枚举是”我试试所有可能”——找答案 模拟是”我跟着规则走一遍”——复现过程 数据范围小用枚举,步骤清晰用模拟,两者可以结合使用。