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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法复习 - 蛮力法

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

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

二.蠻力法的用處

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

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

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

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

f.蠻力算法可以為研究或教學目的服務,例如,可以以之為準繩 ,來衡量同樣問題的更高效算法。

三.問題實例

1.選擇排序
選擇排序最開始的時候,掃描整個列表,將最小的元素與第一個元素進行交換。然后從第二個元素開始掃描列表,找到n - 1個元素中最小元素和第二個元素交換。直到第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.冒泡排序
它比較表中的相鄰元素,如果是逆序的話,就交換他們的位置。重復多次以后,最大的元素就會沉到列表的最后一個位置。第二遍操作,第二大的元素沉下去,這樣進行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.字符串匹配問題
它的想法很簡單,就是從主串的第一個元素開始與模串的所有元素進行匹配,如果匹配失敗,那么就返回主串的第二個元素,直到遍歷完所有主串的元素。
這個算法叫做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.還有比較經典的旅行商問題和分配問題,分配問題在分支限界法中會詳細講解,這里不多做贅述、這兩個問題在空間,時間允許的情況下皆可通過窮舉查找的辦法解決。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。