算法学习之蛮力法

算法学习之蛮力法

蛮力法的思想

蛮力法是指采用遍历技术,使用一定的策略将待求解问题的所有元素依次处理一次,其关键为依次处理所有元素,要使已处理过的元素不再被访问

蛮力法的基本

基本技术——遍历
关键——依次处理所有元素
基本的遍历对象:(1)集合(2)线性表(3)树(4)图

蛮力法的优点

  1. 逻辑清晰,编写程序简洁,容易编写
  2. 对于一些问题(排序、查找、矩阵乘法、字符串匹配),可以配合着产生一些合理算法
  3. 当遍历空间很小时,可以使用较小的代价
  4. 可以解决小规模问题(毕竟优化算法本身就有一定的复杂度,不如蛮力法来的简洁明了)
  5. 可以为其他高效算法做衡量

蛮力法的解题步骤

  1. 找出枚举范围:分析问题所涉及的各种情况
  2. 找出约束表达式:分析问题的解需要满足的条件,并应逻辑表达式表示

蛮力法的经典查找问题

顺序查找

从表的第一端向另一端逐个将元素与既定值进行对比,若相等,则查找成功,给出元素在表中位置;若无相等值,则查找失败,返回NULL;

PS:我觉得这个东西就是循环遍历外加一个跳出判断,就不放代码了

改进的顺序查找

对于顺序查找有两个结束条件:(1)跳出条件,即满足条件时立刻跳出循环(2)结束条件,即查找超出既定范围后结束循环
对此每次循环会产生两次比较,对此可作出改进,将范围边界设为跳出条件时,可以减少一个判断条件

//1、普通的顺序查找
int SeqSearch1(int r[], int n, int k)
{
	i=n;
	while(i>0&&r[i]!=k)
	{
		i--;
	}
	return i;
}
//2、改进的顺序查找
int SeqSearch1(int r[], int n, int k)
{
	r[0]=k;
	i=n;
	while(r[i]!=k)
	{
		i--;
	}
	return i;
}

串匹配问题

也称模式匹配,即在主串S中查找子串T

需要注意的是(1)此算法的依次执行时间不容忽视:当问题规模n很大时,常常需要在大量的信息中进行匹配(2)算法改进所取得的积累效益不容忽视:串匹配操作经常被调用,执行频率是极其高的


注:串匹配的匹配算法为BF算法,以及略有些难以理解的KMP算法,再次不在多做描述,可以参考网上的解释博客(PS:疫情期间,很是颓废)

蛮力法的经典排序问题

(1)选择排序 (2)冒泡排序

注:这个也是最基础的两个排序问题,在此也不再过多描述(PS:我觉得这个大家应该都会)

蛮力法的经典组合问题

生成排列对象

假设已经生成了所有的(n-1)!个排列,可以把n插入到n-1个元素的每一种排列中去,来得到问题规模为n的所有排列(PS:在此之前我从未接触过这个问题,细想之后发现不知如何通过书上的三重循环来实现全排列尝试,因此转载此篇文章以供参考:排列算法c++实现

生成子集

n个元素的集合A&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值