日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法复习 - 蛮力法

發(fā)布時(shí)間:2023/12/14 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法复习 - 蛮力法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.定義
蠻力法是一種簡(jiǎn)單直接解決問題的方法,常常直接基于問題的描述和所涉及的概念定義。

二.蠻力法的用處

a.和其他策略不同,我們可以用它解決廣闊領(lǐng)域的各種問題,實(shí)際上,它可能是唯一一種什么問題都能解決的一般性方法。

b.對(duì)于一些重要的問題(例如 排序,查找,矩陣乘法和字符串匹配)來說,蠻力法可以可以產(chǎn)生一些合理的算法

c.如果要解決的問題實(shí)例不多,而且蠻力法可以用一種能夠接受的速度對(duì)實(shí)例求解,那么設(shè)計(jì)一個(gè)更高效率的算法是不值得的

d.即使效率很低,仍然可以用蠻力算法解決一些小規(guī)模的問題實(shí)例。

f.蠻力算法可以為研究或教學(xué)目的服務(wù),例如,可以以之為準(zhǔn)繩 ,來衡量同樣問題的更高效算法。

三.問題實(shí)例

1.選擇排序
選擇排序最開始的時(shí)候,掃描整個(gè)列表,將最小的元素與第一個(gè)元素進(jìn)行交換。然后從第二個(gè)元素開始掃描列表,找到n - 1個(gè)元素中最小元素和第二個(gè)元素交換。直到第n - 1遍。

int min;for(int i = 0;i <= n - 2;i ++){min = i;for(j = i + 1;j <= n - 1;j ++){if(A[min] > A[j])min = j; //升序排列,降序改為 < 即可swap(A[min],A[j]);}}

2.冒泡排序
它比較表中的相鄰元素,如果是逆序的話,就交換他們的位置。重復(fù)多次以后,最大的元素就會(huì)沉到列表的最后一個(gè)位置。第二遍操作,第二大的元素沉下去,這樣進(jìn)行n - 1遍操作,該列表就排好序了。

for(int i = 0;i <= n - 2;i ++)for(int j = 0;j <= n - 1;j ++){if(A[j] > A[j + 1])swap[A[j + 1],A[j]);}

3.字符串匹配問題
它的想法很簡(jiǎn)單,就是從主串的第一個(gè)元素開始與模串的所有元素進(jìn)行匹配,如果匹配失敗,那么就返回主串的第二個(gè)元素,直到遍歷完所有主串的元素。
這個(gè)算法叫做BF。

# include<iostream> using namespace std;string BF(string s1,string s2) {int i,j;i=j=0; string ss = "error";while(s1[i]!='\0'&&s2[j]!='\0'){if(s1[i]==s2[j]){i++;j++;}else {i=i-j+1;j=0;}}if(s2[j]=='\0')return s1;else return ss; }main() {string s1="abcdef";string s2="dfa";string s;s = BF(s1,s2);cout<<s; }

4.還有比較經(jīng)典的旅行商問題和分配問題,分配問題在分支限界法中會(huì)詳細(xì)講解,這里不多做贅述、這兩個(gè)問題在空間,時(shí)間允許的情況下皆可通過窮舉查找的辦法解決。

總結(jié)

以上是生活随笔為你收集整理的算法复习 - 蛮力法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。