枚举--实用案例(小白入)

枚举

枚举(Brute-force)是一种通过逐一检查所有可能的解来找到问题答案的方法。

使用场景:
  • 问题的解空间较小:例如,数字范围有限、排列组合数量较少等。

  • 问题没有明显的优化方向:无法通过其他算法(如贪心、动态规划)快速求解。

  • 验证所有可能性:需要穷举所有可能的解,确保没有遗漏。

实现方式
1.简单循环枚举
 for i in range(1, 101):
     if i % 3 == 0 and i % 5 == 0:
         print(i)  # 输出能被3和5整除的数
2.嵌套循环枚举
 for i in range(1, 10):
     for j in range(i+1, 10):
         print(i, j)  # 枚举所有不同的i和j
3.递归枚举
 def enum(n, current):
     if current == n:
         print(current)
         return
     for i in range(current, n+1):
         enum(n, i+1)
 ​
 enum(3, 1)  # 枚举1到3的排列
应用示例
密码破解:枚举所有可能的密码组合,直到找到正确的密码:
 from itertools import product
 ​
 def brute_force_password():
     chars = 'abcdefghijklmnopqrstuvwxyz'
     for length in range(1, 5):  # 尝试长度为1到4的密码
         for pwd in product(chars, repeat=length):
             password = ''.join(pwd)
             if verify_password(password):  # 假设verify_password是验证函数
                 return password
寻找最大值:枚举所有可能的子数组,找到最大和:
 def max_subarray_sum(arr):
     max_sum = float('-inf')
     n = len(arr)
     for i in range(n):
         current_sum = 0
         for j in range(i, n):
             current_sum += arr[j]
             if current_sum > max_sum:
                 max_sum = current_sum
     return max_sum
排列组合问题
 from itertools import permutations
 ​
 def find_permutations(arr):
     perms = permutations(arr)
     for p in perms:
         print(p)
枚举的局限性

枚举方法的局限性主要体现在以下方面:

  • 时间复杂度高:对于大规模问题,枚举可能需要极长的时间。

  • 空间复杂度高:某些情况下需要存储大量中间结果。

  • 不适用于动态问题:枚举方法通常无法处理实时变化的解空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值