簡析窮舉演算法,及其簡單應用

2021-07-23 05:50:01 字數 3335 閱讀 7707

首先我們來看乙個經典的例子:

百雞百錢問題:

已知:公雞5元乙隻,母雞3元乙隻,小雞一元3只。現用100元錢買了100隻雞。

問:公雞母雞小雞各幾隻?(請考慮盡可能高效的方法)

實際上上面的問題直接用數學的方法是不容易解出來的,因為未知數的個數多餘方程的個數。這時就可以用到窮舉法,列出所有的可能性。

分析:假設0只公雞,0只母雞,0只小雞。結果???

假設0只公雞,0只母雞,1只小雞。結果???

假設0只公雞,0只母雞,2只小雞。結果???

......

假設0只公雞,1只母雞,0只小雞。結果???

假設0只公雞,1只母雞,1只小雞。結果???

假設0只公雞,1只母雞,2只小雞。結果???

......

......

假設1只公雞,0只母雞,1只小雞。結果???

假設1只公雞,0只母雞,2只小雞。結果???

假設1只公雞,0只母雞,3只小雞。結果???

......

......

......

假設100只公雞,100只母雞,100只小雞。結果???

以上共有101*101*101(即1030301)種可能情況。

這種思想,就是窮舉思想,適合:問題的答案可能沒有很直接的邏輯推理,但可以將所有「可能答案」都羅列出來,並且具有一定的規律性。

//原始思路:(窮舉)

$count1 = 0;

for($gongji = 0; $gongji

<= 100; ++ $gongji)只,母雞有只,小雞有只。";

}++ $count1; //計算的次數}}

}echo

"總共計算了次"; //1030301次,即101^3

echo

"";

雖然對於計算機來說計算1030301次並不困難,但我們可以對上面的**進行優化,盡可能的提高效率。

//優化1:

$count2 = 0;

for($gongji = 0; $gongji

<= 100/5; ++ $gongji)只,母雞有只,小雞有只。";

}++ $count2; //計算的次數

//}}

}echo

"總共計算了次"; //714次,優化了不少

echo

"";

//優化2:

$count3 = 0;

for($gongji = 0; $gongji

<= 100/5; ++ $gongji)只,母雞有只,小雞有只。";

}++ $count3; //計算的次數

//}}

}echo

"總共計算了次"; //364次

echo

"";

//優化3:

$count4 = 0;

for($gongji = 0; $gongji

<= 100/5; ++ $gongji)

$zongjia = ($gongji * 5) + ($muji * 3) + ($xiaoji / 3);

if( $zongjia == 100 )只,母雞有只,小雞有只。";

}++ $count4; //計算的次數

//} }

}echo

"總共計算了次"; //121次

再來看下面乙個例子:

數學問題:

有i,j,k,m,n五個字母分別代表0~9的數字,滿足下面條件:

求i,j,k,m,n的實際值

i  j  k  m  n

* i

------------------------

n n n n n n

divdiv

span

style>

window.onload = function

(){var ap = document.getelementsbytagname('p');

var aspan1 = ap[0].getelementsbytagname('span');

var aspan2 = ap[1].getelementsbytagname('span');

var aspan3 = ap[2].getelementsbytagname('span');

for(var i=1;i<=9;i++){

for(var j=0;j<=9;j++){

for(var k=0;k<=9;k++){

for(var m=0;m<=9;m++){

for(var n=0;n<=9;n++){

var a = 10000*i + 1000*j + 100*k + 10*m + n;

var b = i;

var c = n*111111;

if(a*b==c){

aspan1[0].innerhtml = i;

aspan1[1].innerhtml = j;

aspan1[2].innerhtml = k;

aspan1[3].innerhtml = m;

aspan1[4].innerhtml = n;

aspan2[0].innerhtml = i;

for(var x=0;xscript>

head>

style="margin-left:35px;">

ispan>

jspan>

kspan>

mspan>

nspan>

p>

*

style=" position:absolute; top:30px; left:180px;">ispan>

p>

nspan>

nspan>

nspan>

nspan>

nspan>

nspan>

p>

div>

body>

執行結果為:

7  9  3  6  5

* 7

------------------------

5 5 5 5 5 5

也就是i=7, j=9, k=3, m=6, n=5.

即79365*7=555555.

簡析遞迴思想及其典型演算法

遞迴 也就是在執行過程中自己呼叫自己 乙個過程或 函式在其定義或說明中有直接或間接呼叫自身的一種方法。它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算。它可以用有限的 語句來定義物件的 無限集合 一般來說,遞迴需...

User Agent分析及其價值簡析

user agent,使用者 使用者在上網訪問的時候會作為http的包頭的一部分向伺服器傳送,用於識別使用者的當前環境,如瀏覽器及版本號 作業系統等資訊。在chrome中可以在訪問 的時候按下f12檢視。user agent也是使用者識別的重要部分,通過分析,能知道使用者使用的是什麼裝置 什麼瀏覽器...

cartographer演算法簡析

1 魯棒性好,尤其在沒有imu的輔助下,應對旋轉速度高的突然轉向,沒有出現建圖錯誤。由於採用了回環檢測,可以消除積累誤差,建圖效果比較穩定。3 介面封裝得很簡潔,給人的感覺是一款穩定,可靠,易用的軟體包。主要 1.1 real time loop closure in 2d lidar slam i...