算法思想之枚举法

枚举法的基本思想

  • 在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做枚举法(穷举法)。
  • 枚举法的核心思想就是枚举所有可能,其本质就是在所有可能的候选答案中搜索问题可能的解。使用枚举法应满足两个条件:(1)可预先确定候选答案的数量(2)候选答案的范围在求解之前必须有一个确定的集合
  • 枚举法的结构通常是循环+判断

枚举法的优缺点

优点

  1. 算法简单,在局部地方使用枚举法,效果十分的好;
  2. 得到的结果肯定是正确的;

缺点

  1. 可能做了很多的无用功,浪费了宝贵的时间,效率低下;
  2. 运算量过大,当问题的规模变大的时候,循环的阶数越大,执行速度越慢。

应用枚举法的基本思路

step1. 确定枚举对象、枚举范围和判定条件;
step2. 枚举可能的解,验证是否是问题的解。

枚举法示例

百元买鸡问题

[问题描述] 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
[思路解析] 由题可设买公鸡 x x x 只,买母鸡 y y y只,买小鸡 z z z只,有方程 x + y + z = 100 , 5 x + 3 y + z / 3 = 100 x+y+z=100, 5x+3y+z/3=100 x+y+z=100,5x+3y+z/3=100,由此可得代码:

'''
百元买鸡问题
 鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?
'''

def enum():
    res = []
    for x in range(1, 101):
        for y in range(1, 101):
            for z in range(3,101,3):
                if x*5 + y*3 + z/3 == 100 and x + y + z == 100:
                    res.append([x,y,z])
    return res

res = enum()
for each in res:
    print(f'买公鸡{each[0]}只,母鸡{each[1]}只,小鸡{each[2]}只')

[结果]
买公鸡4只,母鸡18只,小鸡78只
买公鸡8只,母鸡11只,小鸡81只
买公鸡12只,母鸡4只,小鸡84只

你可能感兴趣的:(基本算法,算法)