算法--枚举法

版权声明:本文为博主原创文章,未经博主允许不得转载。转载请标明出处:http://blog.csdn.net/ligang2585116! https://blog.csdn.net/ligang2585116/article/details/83475665

枚举法

枚举(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}

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

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)
            }
    	}
    }
}

猜你喜欢

转载自blog.csdn.net/ligang2585116/article/details/83475665