MOOC笔记
11.1 枚举的基本思想
枚举是不断猜测的过程 从可能的集合中一一列举个元素 判断新的猜测是否是正确答案
*例子1 找素数
思路 记2为PRIM0 寻找比PRIMk大的最小素数PRIMk+1 如果PRIMk+1大于N 那么PRIMk+1是解
新的猜测中两个关键因素: 1)猜测的结果必须是之前没有出现过的 新的猜测一定比之前的素数大 2)及时排除错误答案 除2之外只能是奇数
关键问题 1) 给出解空间 建立简洁的数学模型 模型中变量数尽可能少 它们之间互相独立 条件是“n不能被大于2的素数整除”而不是“n不能被大于2的整数整除” 2) 减少搜索空间 利用知识缩小模型中个变量的取值范围 避免不必要的计算 减少代码中循环体执行次数:除2之外的数只有奇数可能是素数 3) 采用合适的搜索顺序 搜索空间的遍历顺序要和模型中条件表达式一致
*例子2 百钱买百鸡
张丘建《算经》鸡翁一值钱五 鸡母一值钱三 鸡雏三值钱一 百钱买百鸡 问鸡翁鸡母鸡雏各几何?
思路 构造解集0<=X,Y,Z<=100 验证条件X+Y+Z=100 5X+3Y+Z/3=100 复杂度O(100^2)
问题集合
1)复杂度怎么计算