⑴ 簡要敘述蠻力法,基本常用的例子有哪些
蠻力法(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++代碼
#include<stdlib.h>
#include<cmath>
#include<algorithm>
using namespace std;
static double Tmax = 10, Tmin = 0.1, r = 0.999999;
static int k = 100;
inline void random_sele(int &fl, int &fp, int arr[], int n)
{
do
{
fl = rand() % n;
fp = rand() % n;
} while (fl == arr[fp] || arr[fl] == arr[fp]);
};
inline bool accept(double r1, double r2, double T)
{
const unsigned int MASK((1 << 30) - 1);
double p = 1.0 / (1.0 + exp((r2 - r1) / T));
unsigned int temp1=((rand()<<20)^(rand()<<10)^rand())&MASK;
unsigned int temp2=((rand()<<20)^(rand()<<10)^rand())&MASK;
double res=(1.0*temp1+1.0*temp2/MASK);
return res < p*MASK;
}
void set_SA()
{
printf(" Tmax Tmin r k ");
printf(" %.8f %.8f %.8f %d ",Tmax,Tmin,r,k);
printf("Input Tmax,Tmin,r,k: ");
scanf("%lf%lf%lf%d",&Tmax,&Tmin,&r,&k);
}
void TSP_SA(int arr[], double &evl, int n, double map[][2000])
{
double r1, r2, T = Tmax;
int i, fl, sl, fp, sp;
int show_s=0;
srand(11827);
while (T >= Tmin)
{
for (i = 0; i < k; i++)
{
random_sele(fl, fp, arr, n);
sl = arr[fl], sp = arr[fp];
r1 = map[fl][sl] + map[fp][sp] + map[sp][arr[sp]];
r2 = map[fl][sp] + map[sp][sl] + map[fp][arr[sp]];
if (accept(r1, r2, T))
{
arr[fp] = arr[sp];
arr[fl] = sp;
arr[sp] = sl;
sl = sp;
evl = evl + r2 - r1;
}
}
if(++show_s==1000000/k)
{
printf("T=%f evl=%f ",T,evl);
show_s=0;
}
T *= r;
}
}
⑷ 求最大子序列連續求和寫程序 (1)用蠻力法寫程序 (2)用分治法寫程序 (3)哪個算
最簡單且最快的是線段樹,線段樹每個節點維護對應區間 從左開始最大連續序列和(從區間左端點開始)lmax,從右開始最大連續序列和(從區間右端點開始)rmax,區間最大連續子序列和 mmax,區間和s。設lc為線段樹當前節點x左節點,rc為右節點(#define下好寫一些),那麼mmax[x]=max(rmax[lc]+lmax[rc],max(mmax[lc],mmax[rc])),lmax[x]=max(lmax[lc],s[lc]+lmax[rc]),rmax[x]=max(rmax[rc],s[rc]+rmax[lc]),s[x]=s[lc]+s[rc]。初始化即將每個葉子節點賦值。此方法好在還可以logn修改並且除了第一次O(nlogn)查詢外,其餘都是O(1)查詢,輸出mmax[rt](rt為根節點)即可。
⑸ 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);
}
⑹ 蠻力法最近對問題的偽代碼怎麼寫啊,求計算機大神指點!!!!~
請明確給個題目,其實你可以在網上搜索到很多這樣的源代碼的,仔細尋找就可以找到,很簡單的。
⑺ 演算法中怎麼在一個數組中查找某個元素(使用蠻力法)
python">result=false
#c=數組,j=元素
foriinc:
ifi==j:
result=true
break
returnresult
⑻ C#蠻力法給出空間n個點求出兩點之間的最短距離代碼
為什麼不用FLOYD(弗洛伊德)演算法,代碼簡潔容易理解。自己就能看懂,網路一下。我就不再廢話了。
⑼ 蠻力法是什麼樣的演算法
《演算法設計與分析基礎》學習 --- 蠻力法
要重溫演算法思想,並以《演算法設計與分析基礎》這本書作為教材。該書每一章介紹一種演算法設計思想。今天從最簡單的開始寫起,打好基礎。以後再逐步深入,學習更深入的演算法。 蠻力法就是一種解決問題的最簡單最直觀的最容易理解方法,雖然它簡單,而且在實際應用中因為效率的原因可能不能派上用場,但是還是不能忽略它。正如書中作者所說,在解決小規模問題的時候也不失為一個方法,而且也是更復雜演算法的基礎。 一、選擇排序
01/* 02 蠻力法-選擇排序 03 將輸入數組排成非遞減數組 04 05 array:待排數組 06 n:數組大小,即[0,n-1] 07*/08void SelectionSort(int array[],unsigned int n) 09{ 10 int min; 11 for(int i=0;i
⑽ 使用python貪心演算法和蠻力演算法解決問題~~
# coding:utf-8 """定義一個函數,名字為sameSums(aList),alist是一個整形list(限定重復元素不超過2個,排2f0e除這樣的list,元素前後差為1,[4,5,6,7,8]),函數作用是判斷能分成兩組,使得兩組數字的和相等。若可以擇返回值是true,若不可以返回值是false。如下例:sameSums([4, 7, 6, 3]) --> True //4+6 = 10 and 7 + 3 = 10sameSums([3, 3]) --> TruesameSums([4, 12, 16]) --> True //4+12= 16 and 16sameSums([5, 1]) --> False 特別提示:這個題目,貪心演算法只能計算上面這樣的情況。這個題目,對初學者來說,有點難度,但稍微有點演算法基礎,編程思路,就不難。先講一個故事:二個小孩兒時從樹上采板栗,最後合並一堆,分板栗,採集一人選一個的分。假定人性是貪婪的,第一個先選的人,選最大的,第二個選的人,選次大的,一直循環下去。貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的局部最優解。這個題目:先將list從大到小排序,中間設置2個空的list,從大的開始選,下一次選的時候,需要比較一下和,如果誰的和小,再添加一個,直到最後一個元素。 """ def sameSums(int_list): """ www.iplaypy.com python教程 """ >>> sameSums([4, 7, 6, 3]) True >>> sameSums([3, 3]) True >>> sameSums([4, 12, 16]) True >>> sameSums([5, 1]) False """ new_lst = sorted(int_list, reverse=True) list1 = list() list2 = list() for n in new_lst: if sum(list1) < sum(list2): list1.append(n) else: list2.append(n) return sum(list1) == sum(list2) if __name__ == "__main__": import doctest doctest.testmod() lst = [3, 9, 10, 30, 8] print sameSums(lst)