zoukankan      html  css  js  c++  java
  • 枚举法

    枚举法

    在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么这结论是可靠的,这种归纳方法叫做枚举法
    问题解决思路
    思考真正困难所在

    提出较好解决方案

    思想

    将问题所有可能存在的答案一一列举,然后根据条件判断这个答案不是不是合适,是就保留,不是就舍弃

    解题思路

    1. 确定要枚举的对象,范围和判定条件.
    2. 逐一枚举可能的解并验证每个解是不是问题的解.

    枚举算法步骤

    (1)确定解题的可能范围,不能遗漏任何一个真正解,同时避免重复。

    (2)判定是否是真正解的方法。

    (3)为了提高解决问题的效率,使可能解的范围将至最小,

    代码实现

    如果a+b+c=100,而且 a^2+b^2=c^2(a,b,c为自然数),问如何求出所有a,b,c可能存在的组合

    1568818491093

    a,b,c从0开始 枚举法最笨的一个方法

    1. 先让其中一个数去变,其他两个数先不动, 怎么实现?
      嵌套循环
    2. 实现a+b+c=1000,和a*2+b*2=c*2
      写上两个判断,a+b+c=1000,和a*
      2+b**2=c**2 判断条件
    3. 写一个计时器
    import time  #测试时间
    start_time=time.time()
    for a in range(0,1001):
        for b in range(0,1001):
            for c in range(0,1001):
                if a+b+c==1000 and a**2 +b**2==c**2:
                    print(a,b,c)
    end_time=time.time()
    print(f'花费时间{end_time-start_time}')#测试时间
    print('finished')#结束标志
    ##结果
    0 500 500
    200 375 425
    375 200 425
    500 0 500
    花费时间352.2528417110443
    finished
    
    

    思路优化(有了结果不需要判断)

    改进

    因为c==1000-a-b 有了c的结果之后 就不需要再对c进行判断,

    那么直接判断第二个条件,

    import time  #测试时间
    start_time=time.time()
    for a in range(0,1001):
        for b in range(0,1001):
            c=1000-a-b
            if a+b+c==1000 and a**2 +b**2==c**2:
                 print(a,b,c)
    end_time=time.time()
    print(f'花费时间{end_time-start_time}')#测试时间
    print('finished')#结束标志
    ##结果
    0 500 500
    200 375 425
    375 200 425
    500 0 500
    花费时间2.135776996612549
    finished
    
    

    结果分析(缩短近150倍

    花费时间仅需要2s钟,缩短近150倍!!!

    减少350s的时间,只是因为少了一个判断,(每个人电脑性能不一样)

    减少让计算机运算时间

  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/jhpy/p/11567742.html
Copyright © 2011-2022 走看看