算法(Java随笔)—穷举算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40780805/article/details/82846933

穷举算法(Exhaustive Attack method)——是最简单的一种算法,对一个问题的求解,穷尽每一种可能;算法效率不高,但使用于一些没有规律的场合。

穷举算法的基本思想就是从所有可能的情况中搜索正确的答案,使用循环语句和条件判断语句逐步验证每一种可能的正确性,从而得到正确的答案。

概述(来源百度):

穷举法是一种针对于密码的破译方法。这种方法很像数学上的“完全归纳法”并在密码破译方面得到了广泛的应用。简单来说就是将密码进行逐个推算直到找出真正的密码为止。比如一个四位并且全部由数字组成其密码共有10000种组合,也就是说最多我们会尝试9999次才能找到真正的密码。利用这种方法我们可以运用计算机来进行逐个推算,也就是说用我们破解任何一个密码也都只是一个时间问题。

当然如果破译一个有8位而且有可能拥有大小写字母、数字、以及符号的密码用普通的家用电脑可能会用掉几个月甚至更多的时间去计算,其组合方法可能有几千万亿种组合。这样长的时间显然是不能接受的。其解决办法就是运用字典,所谓“字典”就是给密码锁定某个范围,比如英文单词以及生日的数字组合等,所有的英文单词不过10万个左右这样可以大大缩小密码范围,很大程度上缩短了破译时间。

在一些领域,为了提高密码的破译效率而专门为其制造的超级计算机也不在少数,例如IBM美国军方制造的“飓风”就是很有代表性的一个。


穷举算法在程序中的应用如鸡兔同笼问题:“今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几只?”

通过判断可以知道鸡的数量应该在0~35之间,所以可以使用穷举法来逐个判断是否符合。

代码实现:

//穷举算法实例——鸡兔同笼问题
	String qiongJu(int head,int foot){
		for(int i=1;i<=head;i++){
			if((2*i+4*(head-i))==foot){
				return "鸡:"+i+"|兔:"+(head-i);
			}
		}
		return "";
	}

猜你喜欢

转载自blog.csdn.net/qq_40780805/article/details/82846933
今日推荐