算法学习之蛮力法
算法學(xué)習(xí)之蠻力法
文章目錄
- 算法學(xué)習(xí)之蠻力法
- 蠻力法的思想
- 蠻力法的基本
- 蠻力法的優(yōu)點(diǎn)
- 蠻力法的解題步驟
- 蠻力法的經(jīng)典查找問題
- 順序查找
- 改進(jìn)的順序查找
- 串匹配問題
- 蠻力法的經(jīng)典排序問題
- 蠻力法的經(jīng)典組合問題
- 生成排列對象
- 生成子集
- 0/1背包問題
- 任務(wù)分配問題
- 蠻力法的經(jīng)典圖問題
- 哈密頓回路
- TSP問題
蠻力法的思想
蠻力法是指采用遍歷技術(shù),使用一定的策略將待求解問題的所有元素依次處理一次,其關(guān)鍵為依次處理所有元素,要使已處理過的元素不再被訪問
蠻力法的基本
基本技術(shù)——遍歷
關(guān)鍵——依次處理所有元素
基本的遍歷對象:(1)集合(2)線性表(3)樹(4)圖
蠻力法的優(yōu)點(diǎn)
蠻力法的解題步驟
蠻力法的經(jīng)典查找問題
順序查找
從表的第一端向另一端逐個將元素與既定值進(jìn)行對比,若相等,則查找成功,給出元素在表中位置;若無相等值,則查找失敗,返回NULL;
PS:我覺得這個東西就是循環(huán)遍歷外加一個跳出判斷,就不放代碼了
改進(jìn)的順序查找
對于順序查找有兩個結(jié)束條件:(1)跳出條件,即滿足條件時立刻跳出循環(huán)(2)結(jié)束條件,即查找超出既定范圍后結(jié)束循環(huán)
對此每次循環(huán)會產(chǎn)生兩次比較,對此可作出改進(jìn),將范圍邊界設(shè)為跳出條件時,可以減少一個判斷條件
串匹配問題
也稱模式匹配,即在主串S中查找子串T
需要注意的是(1)此算法的依次執(zhí)行時間不容忽視:當(dāng)問題規(guī)模n很大時,常常需要在大量的信息中進(jìn)行匹配(2)算法改進(jìn)所取得的積累效益不容忽視:串匹配操作經(jīng)常被調(diào)用,執(zhí)行頻率是極其高的
注:串匹配的匹配算法為BF算法,以及略有些難以理解的KMP算法,再次不在多做描述,可以參考網(wǎng)上的解釋博客(PS:疫情期間,很是頹廢)
蠻力法的經(jīng)典排序問題
(1)選擇排序 (2)冒泡排序
注:這個也是最基礎(chǔ)的兩個排序問題,在此也不再過多描述(PS:我覺得這個大家應(yīng)該都會)
蠻力法的經(jīng)典組合問題
生成排列對象
假設(shè)已經(jīng)生成了所有的(n-1)!個排列,可以把n插入到n-1個元素的每一種排列中去,來得到問題規(guī)模為n的所有排列(PS:在此之前我從未接觸過這個問題,細(xì)想之后發(fā)現(xiàn)不知如何通過書上的三重循環(huán)來實(shí)現(xiàn)全排列嘗試,因此轉(zhuǎn)載此篇文章以供參考:排列算法c++實(shí)現(xiàn))
生成子集
n個元素的集合A={a1,a2,……,ana_{1},a_{2},……,a_{n}a1?,a2?,……,an?}的所有2n2^{n}2n個子集和長度為n的所有2n2^{n}2n個比特串之間的意義對應(yīng)關(guān)系(PS:簡單的來說就是類似于數(shù)電的交并集,001={a3a_{3}a3?},011={a2,a3a_{2},a_{3}a2?,a3?}依次類推)
注:這個代碼還沒寫過目測可寫,但是疫情期間有點(diǎn)懶,日后如果能記起來就寫
0/1背包問題
在給定的所有的元素中選出小于容量c的最有價值的子集,本質(zhì)仍然是找出所有子集,然后計(jì)算每個子集的總價值,找到價值最大的子集,但是其復(fù)雜度仍然是O(2n2^{n}2n)
任務(wù)分配問題
問題描述:假設(shè)有n個任務(wù)需要分配給n個人執(zhí)行,每個人物只分配給一個人,每個人只分配一個任務(wù),且第j個任務(wù)分配給第i個人的成本是C[i,j],要求找出總成本最小的分配方案
此方案需要考慮全排列,算出每個排列的成本,排列數(shù)量為n!,復(fù)雜度很高,除非問題規(guī)模很小,否則蠻力法基本與此無緣】
蠻力法的經(jīng)典圖問題
哈密頓回路
適用蠻力法尋找哈密頓回路也是尋找排列,當(dāng)排列內(nèi)所有元素的邊都連通時即可
TSP問題
就是變相加權(quán)哈密頓回路的尋找!!!
注:蠻力法終究還是蠻力法,一般情況下,即使進(jìn)行一定程度的改進(jìn)后,也只能改變其時間復(fù)雜度的系數(shù),而不是數(shù)量級。(PS:個人感覺有點(diǎn)虎頭蛇尾,畢竟所有例子如果都要用到的話代碼量會很大,所以我決定不寫代碼,簡單的將思路寫一下,畢竟后續(xù)中基本不可能用蠻力法來實(shí)現(xiàn))
總結(jié)
- 上一篇: 用迁移学习创造的通用语言模型ULMFiT
- 下一篇: 实力赢得信任丨西安珠江新城业主喜迎公元物