蛮力算法题
‘壹’ 简要叙述蛮力法,基本常用的例子有哪些
蛮力法(brute force method,也称为穷举法或枚举法)是一种简单直接地解决问题的方法,常常直接基于问题的描述,所以,蛮力法也是最容易应用的方法。
蛮力法特性:
(1)理论上,蛮力法可以解决可计算领域的各种问题。
(2)蛮力法经常用来解决一些较小问规模的问题。
(3)对于一些重要的问题(如排序、查找、串匹配),蛮力法可以设计一些合理的算法,这些算法具有实用价值,而且不受输入规模的限制。
(4)蛮力法可以作为某类问题时间性能的下界,来衡量同样问题的其他算法是否具有更高的效率。
查找问题中使用蛮力法。
顺序查找:
是指在查找集合中一次查找值为k的元素,若查找成功,则给出元素在查找集合中的位置;若查找失败,则给出失败信息。
【想法】:将查找集合放在一维数组中,然后从数组的一端向另一端逐个将元素与带查找值进行比较,若相等,则查找成功,给出该元素在查找中的序号;若整个数组检测完仍未找到与带差值相等的元素,则查找失败,给出失败标志0。我们在查找过程中还要注意下标是否越界的问题。
算法的实现方法一:
int SeqSearch1(int r[] ,int n, int k) //数组r[1] r[n]中存放查找集合。
{
int i = n;
while(i>0 && r[i]!k) //注意检测比较位置是否越界。
{ i--; }
return i;
}
上述算法我们每次都要去判断数组的下标是否越界,为了避免在查找过程中每一次比较前都要判断查找位置是否越界,可以设置观察哨,即将待查值放在查找方向的“尽头”处,则比较位置i至多移动到下标0处。
‘贰’ 算法设计 线性规划 蛮力法 给出详细设计过程
解:#include<iostream>
using namespace std;
//在此现行规划列子:
//第一个约束方程的最大X1 max=4; Y1 max=4;
//第二个约束方程的最大X2 max=6 Y2 max=2;
//取X1,X2 的最小值 X=4+1,包括0
// Y1,Y2的最小值为y=2+1,包括0
//因此时间复杂度为 x*y=8
////////////////////////
int main()
{
int i,j,max=0;
for(i=0;i<=4;i++)
for(j=0;j<=2;j++)
{
if(max < 3*i+5*j)
{
if((i+j <=4) && (i+3*j<=6))
max=3*i+5*j;
}
}
cout<<max<<endl;
return 0;
}
‘叁’ C语言编程,设计一个蛮力算法,第13题
给个顺横向的例子
for (x = 0 ; x < map_cx ; x++)
for (ifrom = 0 ; ifrom <map_cx;i++)
for(ito =ifrom;ito<map_cx;ito++){
if (isac(map ,ifrom,ito ,strlist ,buff))
printf("%s\n",buff);
}
‘肆’ 计算a的n次方,蛮力计算的方法复杂度为O(n),有什么方法可以减小算法复杂度
不知道下面的程序复杂度是否满足条件,楼主可以考虑更进一步b=a*a*a或者更大
#include<stdio.h>
#include<math.h>
long aa(int a,int n)
{
int i,b;
if(n==0)
return 1;
else if(n==1)
return a;
else
{
b=a*a;//b等于a的平方
for(i=1;i<n/2;i++)
{
b*=b;
}
if(n%2==1)
a*=b;//如果n为奇数结果*a
else a=b;
}
return a;
}
int main()
{
int a,n;
printf("please input a,n:");
scanf("%d%d",&a,&n);
printf("%ld\n",aa(a,n));
return 0;
}
‘伍’ 蛮力算法设计
就和人们提出1+1为什么等于2一样,看似大家都知道的常识