枚举(Enumuerate)是蛮力策略的一种表现,最普遍的思维方式。它根据问题中的条件将可能的情况一一列举出来,逐一尝试从中找到满足问题条件的解。
优点: 算法简单,在局部地方使用枚举法,效果十分的好 缺点: 运算量过大,当问题的规模变大的时候,循环的阶数越大,执行速度越慢
示例: 百钱百鸡问题 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? { x + y + z = 100 5 x + 3 y + z 3 = 100 \begin{cases} x + y + z = 100\\ 5x + 3y + \frac{z}{3} = 100 \end{cases} {x+y+z=1005x+3y+3z=100
function f () {
for (let x = 0; x <= 20; x++) {
for (let y = 0; y <= 33; y++) {
for (let z = 0; z <= 100; z++) {
if (x + y + z === 100 && 5 * x + 3 * y + z/3 === 100) {
console.log(x, y, z)
}
}
}
}
}
优化算法, z = 100 − x − y z = 100 - x - y z=100−x−y
function f () {
for (let x = 0; x <= 20; x++) {
for (let y = 0; y <= 33; y++) {
let z = 100 - x - y
if (z % 3 === 0 && 5 * x + 3 * y + z/3 === 100) {
console.log(x, y, z)
}
}
}
}