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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

算法学习之蛮力法

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

算法學(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)線(xiàn)性表(3)樹(shù)(4)圖

蠻力法的優(yōu)點(diǎn)

  • 邏輯清晰,編寫(xiě)程序簡(jiǎn)潔,容易編寫(xiě)
  • 對(duì)于一些問(wèn)題(排序、查找、矩陣乘法、字符串匹配),可以配合著產(chǎn)生一些合理算法
  • 當(dāng)遍歷空間很小時(shí),可以使用較小的代價(jià)
  • 可以解決小規(guī)模問(wèn)題(畢竟優(yōu)化算法本身就有一定的復(fù)雜度,不如蠻力法來(lái)的簡(jiǎn)潔明了)
  • 可以為其他高效算法做衡量
  • 蠻力法的解題步驟

  • 找出枚舉范圍:分析問(wèn)題所涉及的各種情況
  • 找出約束表達(dá)式:分析問(wèn)題的解需要滿(mǎn)足的條件,并應(yīng)邏輯表達(dá)式表示
  • 蠻力法的經(jīng)典查找問(wèn)題

    順序查找

    從表的第一端向另一端逐個(gè)將元素與既定值進(jìn)行對(duì)比,若相等,則查找成功,給出元素在表中位置;若無(wú)相等值,則查找失敗,返回NULL;

    PS:我覺(jué)得這個(gè)東西就是循環(huán)遍歷外加一個(gè)跳出判斷,就不放代碼了

    改進(jìn)的順序查找

    對(duì)于順序查找有兩個(gè)結(jié)束條件:(1)跳出條件,即滿(mǎn)足條件時(shí)立刻跳出循環(huán)(2)結(jié)束條件,即查找超出既定范圍后結(jié)束循環(huán)
    對(duì)此每次循環(huán)會(huì)產(chǎn)生兩次比較,對(duì)此可作出改進(jìn),將范圍邊界設(shè)為跳出條件時(shí),可以減少一個(gè)判斷條件

    //1、普通的順序查找 int SeqSearch1(int r[], int n, int k) {i=n;while(i>0&&r[i]!=k){i--;}return i; } //2、改進(jìn)的順序查找 int SeqSearch1(int r[], int n, int k) {r[0]=k;i=n;while(r[i]!=k){i--;}return i; }

    串匹配問(wèn)題

    也稱(chēng)模式匹配,即在主串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ò)書(shū)上的三重循環(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ō)就是類(lèi)似于數(shù)電的交并集,001={a3a_{3}a3?},011={a2,a3a_{2},a_{3}a2?,a3?}依次類(lèi)推)

    注:這個(gè)代碼還沒(méi)寫(xiě)過(guò)目測(cè)可寫(xiě),但是疫情期間有點(diǎn)懶,日后如果能記起來(lái)就寫(xiě)

    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à)代碼量會(huì)很大,所以我決定不寫(xiě)代碼,簡(jiǎn)單的將思路寫(xiě)一下,畢竟后續(xù)中基本不可能用蠻力法來(lái)實(shí)現(xiàn))

    總結(jié)

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

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