蠻力演算法題
『壹』 簡要敘述蠻力法,基本常用的例子有哪些
蠻力法(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一樣,看似大家都知道的常識