資源描述:
《窮舉算法分析報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、窮舉算法分析報(bào)告一.什么是窮舉算法窮舉算法:窮舉算法就是將一個(gè)事件所有可能的結(jié)果全部列舉出來,直到得到自己所需要的正確結(jié)果。又叫枚舉法。對(duì)于我們計(jì)算機(jī)運(yùn)行,窮舉算法是一個(gè)很好的算法設(shè)計(jì)方法,其運(yùn)用循環(huán)的方式解決問題,但是運(yùn)用窮舉算法解決問題缺點(diǎn)就是當(dāng)問題較為復(fù)雜的時(shí)候,使用的時(shí)間過長。二.窮舉算法存在的主要問題及其優(yōu)化方案1.主要問題:窮舉算法具有準(zhǔn)確性、全面性和算法簡單的優(yōu)點(diǎn);但是也存在一定缺點(diǎn),比如說計(jì)算時(shí)間長就是致命缺點(diǎn)。2.優(yōu)化方案:窮舉算法要將事件的結(jié)果一一列舉出來,那就勢(shì)必要用到循環(huán)結(jié)構(gòu)。那么我們就可以經(jīng)過初步判斷之后減少循環(huán)的次數(shù)這樣就大大的縮小了運(yùn)算的時(shí)間,減少運(yùn)行的次數(shù)。
2、三.窮舉算法設(shè)計(jì)一般流程提出問題→窮舉可能的結(jié)果→篩選結(jié)果→得出正確答案四.窮舉算法運(yùn)用舉例例一:運(yùn)用窮舉算法解決百元買百雞的問題流程圖:百元買百雞→列舉出一百元能買到雞的所有結(jié)果→篩選共買到一百只雞的結(jié)果→得出正確答案源代碼:#include#includeintmain(){clock_tt1=clock();floatx,y,z;for(x=0;x<=100;x++)for(y=0;y<100;y++)for(z=0;z<=100;z++)if(x+y+z==100&&5*x+3*y+z/3==100)printf("%.0f%.0f%.0f",
3、x,y,z);clock_tt2=clock();printf("%d",t2-t1);return0;}運(yùn)行結(jié)果:優(yōu)化后的窮舉算法:源代碼:#include#includeintmain(){clock_tt1=clock();floatx,y,z;for(x=0;x<=20;x++)for(y=0;y<33;y++)for(z=3;z<=99;z++)if(x+y+z==100&&5*x+3*y+z/3==100)printf("%.0f%.0f%.0f",x,y,z);clock_tt2=clock();printf("%d",t2-t1
4、);return0;}運(yùn)行結(jié)果:結(jié)果分析:1.優(yōu)化后的次數(shù)比優(yōu)化前的次數(shù)少。優(yōu)化前共運(yùn)行1000000次,優(yōu)化后運(yùn)行65000次。2.從時(shí)間上比較,第一次用時(shí)15毫秒,第二次用時(shí)0.例2:木棒任意分三份構(gòu)成三角形的問題。流程圖:十米長木棒分三份→所有能分成三份的結(jié)果→篩選可構(gòu)成三角形的結(jié)果→得到正確答案數(shù)學(xué)知識(shí):三角形構(gòu)成依據(jù):兩邊之和大于第三邊,兩邊之差小于第三邊。源程序:#include#include#includeclock_tt1=clock();intmain(){intx,y,z;for(x=1;x<=10;x++)for(y
5、=1;y<=10;y++)for(z=1;z<=10;z++)if(x>=y&&y>=z&&x+y+z==10&&x+y>z&&abs(x-y)#include#includeclock_tt1=clock();intmain(){intx,y,z;for(x=1;x<=5;x++)for(y=1;y<=4;y++)for(z=1;z<=3;z++)i
6、f(x>=y&&y>=z&&x+y+z==10&&x+y>z&&abs(x-y)