内容正文:
60 Python 枚举算法 上
一、什么是算法?
算法,简单理解就是“解题思路”,要找到解题的方法和关键的运算条件语句。算法的特征
并非所有过程都可以称为算法。算法应具有以下特征:
明确 -算法应清晰明确。它的每个步骤(或阶段)及其输入/输出都应该清楚,并且只能导致一种推算含义。
输入 -算法应具有0个或更多个定义明确的输入。
输出 -算法应具有1个或多个定义明确的输出,并且应与所需的输出匹配。
有限 -算法必须在有限数量的步骤后终止。
可行性 -可用资源应该可行。
独立 -算法应具有逐步指导,该指导应独立于任何编程代码。
二、什么是枚举算法(也称暴力破解)?
定义:枚举法也称为穷举法,是利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检验,从中找出符合要求的答案,因此枚举法是通过牺牲时间来换取答案的全面性。因此,使用枚举法解决问题时,需要考虑优化算法,选择恰当的枚举对象,尽量分析出问题中的隐含条件,缩小枚举范围,以提高解决问题的效率。
是我们在日常中使用到的最多的一个算法,它的核心思想就是:枚
举所有的可能。枚举法的本质就是从所有候选答案中去搜索正确的
解,使用该算法需要满足两个条件:
(1)可预先确定候选答案的数量;
(2)候选答案的范围在求解之前必须有一个确定的集合。
注:枚举算法一般会用到for循环。
三、枚举算法的理解
1.常用语句
暴力破解,使用for循环或者while循环,逐个列举,逐个排查,比较费事,但准确率高
2.解题思路
①确定枚举对象,枚举范围和判断条件
②逐一列举可能的解,验证是否为本问题的答案
3.解题步骤
①猜可能解的范围,做到不重不漏
②找到判断真解的条件(把题目的条件进行翻译)
③缩小可能解的范围,找到另一个隐藏条件,缩圈再运算,提高效率
举例理解
第一题
兔子4元一只,鸭子3元一只,刚好花完10元钱,可以买几只兔子和几只鸭子?
第二题
在所有三位数中:各位数相加之和是12,请你输出所有满足条件的三位数。
拓展一下 :
在所有三位数中:各位数相加之和是12,请你输出所有满足条件的三位数的个数。
另一种方法:
第三题
题目描述 输入一个数n,输出1(含)~n(含)中所有的8的倍数及其个数。
第四题:密码问题:四位密码有多少种可能
四位密码的可能性取决于每一位数字的选择范围。假设密码可以由0-9的数字组成,那么每一位数字都有10种选择(0-9),因此四位密码的可能性为:
10 * 10 * 10 * 10 = 10,000
即四位密码有10,000种可能性。每一位数字都有10种选择,所以总的组合数为10的四次方
拓展——破解密码
四个嵌套的循环枚举了所有可能的四位数字组合,
然后将其组合成字符串并与目标密码进行比较。
如果找到匹配的密码,就会输出破解成功的消息。
$$