• 枚举法


    枚举法

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

    提出较好解决方案

    思想

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

    解题思路

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

    减少让计算机运算时间

  • 相关阅读:
    Visual C# 2008+SQL Server 2005 数据库与网络开发14.1.2 WPF的组成
    Visual C# 2008+SQL Server 2005 数据库与网络开发13.1.3 简单记事本程序菜单设计
    Visual C# 2008+SQL Server 2005 数据库与网络开发13.1.1 菜单创建
    Feathers TextInput使KeyboardEvent失效
    UILabel 多行显示
    突破flash player的睡眠模式
    突破flash player睡眠模式 后续
    缩放UIImage
    IT菜鸟报到!
    用VMware装了Ubuntu后,安装VMware Tools
  • 原文地址:https://www.cnblogs.com/jhpy/p/11567742.html
Copyright © 2020-2023  润新知