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