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的时间,只是因为少了一个判断,(每个人电脑性能不一样)

    减少让计算机运算时间

  • 相关阅读:
    【转载】分析商品日均销量(DMS)对促销商品选择的意义
    日志备份和差异备份还原中的常见问题示例(转自&邹建)
    SQL Server 2000中的完整备份、差异备份操作
    数据库差异备份与增量备份的不同之处
    差异备份和还原操作方法(转)
    SQL备份(全)
    Microsoft SQL2000 错误代码 (@@error)
    图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别
    arm-none-linux-gnueabi-gcc command not found
    关于ST-Link的internal command error问题的解决方法
  • 原文地址:https://www.cnblogs.com/jhpy/p/11567742.html
Copyright © 2011-2022 走看看