演算法複習 蠻力法

2021-10-01 20:43:03 字數 1217 閱讀 7737

一.定義

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

二.蠻力法的用處

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

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

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

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

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

三.問題例項

1.選擇排序

選擇排序最開始的時候,掃瞄整個列表,將最小的元素與第乙個元素進行交換。然後從第二個元素開始掃瞄列表,找到n - 1個元素中最小元素和第二個元素交換。直到第n - 1遍。

int min;

for(int i = 0;i <= n - 2;i ++)

}

2.氣泡排序

它比較表中的相鄰元素,如果是逆序的話,就交換他們的位置。重複多次以後,最大的元素就會沉到列表的最後乙個位置。第二遍操作,第二大的元素沉下去,這樣進行n - 1遍操作,該列表就排好序了。

for(int i = 0;i <= n - 2;i ++)

for(int j = 0;j <= n - 1;j ++)

3.字串匹配問題

它的想法很簡單,就是從主串的第乙個元素開始與模串的所有元素進行匹配,如果匹配失敗,那麼就返回主串的第二個元素,直到遍歷完所有主串的元素。

這個演算法叫做bf。

# includeusing namespace std;

string bf(string s1,string s2)

else

} if(s2[j]=='\0')return s1;

else return ss;

}main()

{ string s1="abcdef";

string s2="dfa";

string s;

s = bf(s1,s2);

cout<4.還有比較經典的旅行商問題和分配問題,分配問題在分支限界法中會詳細講解,這裡不多做贅述、這兩個問題在空間,時間允許的情況下皆可通過窮舉查詢的辦法解決。

演算法設計之蠻力法

1.蠻力法 也叫窮舉法 是一種直接解決問題的方法,常常直接基於問題的描述和所涉及的概念及定義。2.蠻力法優點 邏輯清晰,相對於高效的 巧妙的演算法,實現和構思簡單。同時蠻力法也是很多高效演算法的基礎。可以作為其他高效演算法的衡量標準。對於一些重要的問題,它可以產生一些合理的演算法。可以解決一些小規模...

蠻力法習題

1.分式化簡。設計演算法,將乙個給定的真分數化簡為最簡分數形式。例如將6 8化簡為3 4。include using namespace std int mincommonfactor int a,int b 求最小公因數 int main cout 最簡真分數是 2.設計演算法,判斷乙個大整數能否...

演算法設計與分析學習 蠻力法

參考 演算法設計與分析 第三章 蠻力法 接下來的每章中,我們專注於一種特定的演算法設計策略。蠻力法是一種最簡單和直接的解決問題的辦法,往往是低效的,但我們不應該忽略它的地位,1 它可以解決廣闊領域的各種問題 2 在規模允許時,多少可以產生一些實用的演算法 3 往往可以以蠻力法為準繩,來衡量高效的演算...