亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? data structor.txt

?? 常用的經典算法源代碼
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
}
遞 歸算法的執行過程分遞推和回歸兩個階段。在遞推階段,把較復雜的問題(規模為n)的求解推到比原問題簡單一些的問題(規模小于n)的求解。例如上例中,求 解fib(n),把它推到求解fib(n-1)和fib(n-2)。也就是說,為計算fib(n),必須先計算fib(n-1)和fib(n- 2),而計算fib(n-1)和fib(n-2),又必須先計算fib(n-3)和fib(n-4)。依次類推,直至計算fib(1)和fib(0),分 別能立即得到結果1和0。在遞推階段,必須要有終止遞歸的情況。例如在函數fib中,當n為1和0的情況。
在回歸階段,當獲得最簡單情況的解后,逐級返回,依次得到稍復雜問題的解,例如得到fib(1)和fib(0)后,返回得到fib(2)的結果,……,在得到了fib(n-1)和fib(n-2)的結果后,返回得到fib(n)的結果。
在編寫遞歸函數時要注意,函數中的局部變量和參數知識局限于當前調用層,當遞推進入“簡單問題”層時,原來層次上的參數和局部變量便被隱蔽起來。在一系列“簡單問題”層,它們各有自己的參數和局部變量。
由 于遞歸引起一系列的函數調用,并且可能會有一系列的重復計算,遞歸算法的執行效率相對較低。當某個遞歸算法能較方便地轉換成遞推算法時,通常按遞推算法編 寫程序。例如上例計算斐波那契數列的第n項的函數fib(n)應采用遞推算法,即從斐波那契數列的前兩項出發,逐次由前兩項計算出下一項,直至計算出要求 的第n項。
【問題】 組合問題
問題描述:找出從自然數1、2、……、n中任取r個數的所有組合。例如n=5,r=3的所有組合為: (1)5、4、3 (2)5、4、2 (3)5、4、1
(4)5、3、2 (5)5、3、1 (6)5、2、1
(7)4、3、2 (8)4、3、1 (9)4、2、1
(10)3、2、1
分 析所列的10個組合,可以采用這樣的遞歸思想來考慮求組合函數的算法。設函數為void comb(int m,int k)為找出從自然數1、2、……、m中任取k個數的所有組合。當組合的第一個數字選定時,其后的數字是從余下的m-1個數中取k-1數的組合。這就將求m 個數中取k個數的組合問題轉化成求m-1個數中取k-1個數的組合問題。設函數引入工作數組a[ ]存放求出的組合的數字,約定函數將確定的k個數字組合的第一個數字放在a[k]中,當一個組合求出后,才將a[ ]中的一個組合輸出。第一個數可以是m、m-1、……、k,函數將確定組合的第一個數字放入數組后,有兩種可能的選擇,因還未去頂組合的其余元素,繼續遞 歸去確定;或因已確定了組合的全部元素,輸出這個組合。細節見以下程序中的函數comb。
【程序】
# include
# define MAXN 100
int a[MAXN];
void comb(int m,int k)
{ int i,j;
for (i=m;i>=k;i–)
{ a[k]=i;
if (k>1)
comb(i-1,k-1);
else
{ for (j=a[0];j>0;j–)
printf(“%4d”,a[j]);
printf(“\n”);
}
}
} 

void main()
{ a[0]=3;
comb(5,3);
}
【問題】 背包問題
問題描述:有不同價值、不同重量的物品n件,求從這n件物品中選取一部分物品的選擇方案,使選中物品的總重量不超過指定的限制重量,但選中物品的價值之和最大。
設n 件物品的重量分別為w0、w1、…、wn-1,物品的價值分別為v0、v1、…、vn-1。采用遞歸尋找物品的選擇方案。設前面已有了多種選擇的方案,并 保留了其中總價值最大的方案于數組option[ ],該方案的總價值存于變量maxv。當前正在考察新方案,其物品選擇情況保存于數組cop[ ]。假定當前方案已考慮了前i-1件物品,現在要考慮第i件物品;當前方案已包含的物品的重量之和為tw;至此,若其余物品都選擇是可能的話,本方案能達 到的總價值的期望值為tv。算法引入tv是當一旦當前方案的總價值的期望值也小于前面方案的總價值maxv時,繼續考察當前方案變成無意義的工作,應終止 當前方案,立即去考察下一個方案。因為當方案的總價值不比maxv大時,該方案不會被再考察,這同時保證函數后找到的方案一定會比前面的方案更好。
對于第i件物品的選擇考慮有兩種可能:
(1) 考慮物品i被選擇,這種可能性僅當包含它不會超過方案總重量限制時才是可行的。選中后,繼續遞歸去考慮其余物品的選擇。
(2) 考慮物品i不被選擇,這種可能性僅當不包含物品i也有可能會找到價值更大的方案的情況。
按以上思想寫出遞歸算法如下:
try(物品i,當前選擇已達到的重量和,本方案可能達到的總價值tv)
{ /*考慮物品i包含在當前方案中的可能性*/
if(包含物品i是可以接受的)
{ 將物品i包含在當前方案中;
if (i
try(i+1,tw+物品i的重量,tv);
else
/*又一個完整方案,因為它比前面的方案好,以它作為最佳方案*/
以當前方案作為臨時最佳方案保存;
恢復物品i不包含狀態;
}
/*考慮物品i不包含在當前方案中的可能性*/
if (不包含物品i僅是可男考慮的)
if (i
try(i+1,tw,tv-物品i的價值);
else
/*又一個完整方案,因它比前面的方案好,以它作為最佳方案*/
以當前方案作為臨時最佳方案保存;
}
為了理解上述算法,特舉以下實例。設有4件物品,它們的重量和價值見表:
物品 0 1 2 3
重量 5 3 2 1
價值 4 4 3 1 

并設限制重量為7。則按以上算法,下圖表示找解過程。由圖知,一旦找到一個解,算法就進一步找更好的佳。如能判定某個查找分支不會找到更好的解,算法不會在該分支繼續查找,而是立即終止該分支,并去考察下一個分支。 

按上述算法編寫函數和程序如下:
【程序】
# include
# define N 100
double limitW,totV,maxV;
int option[N],cop[N];
struct { double weight;
double value;
}a[N];
int n;
void find(int i,double tw,double tv)
{ int k;
/*考慮物品i包含在當前方案中的可能性*/
if (tw+a[i].weight<=limitW)
{ cop[i]=1;
if (i
else
{ for (k=0;k
option[k]=cop[k];
maxv=tv;
}
cop[i]=0;
}
/*考慮物品i不包含在當前方案中的可能性*/
if (tv-a[i].value>maxV)
if (i
else
{ for (k=0;k
option[k]=cop[k];
maxv=tv-a[i].value;
}
} 

void main()
{ int k;
double w,v;
printf(“輸入物品種數\n”);
scanf((“%d”,&n);
printf(“輸入各物品的重量和價值\n”);
for (totv=0.0,k=0;k
{ scanf(“%1f%1f”,&w,&v);
a[k].weight=w;
a[k].value=v;
totV+=V;
}
printf(“輸入限制重量\n”);
scanf(“%1f”,&limitV);
maxv=0.0;
for (k=0;k find(0,0.0,totV);
for (k=0;k
if (option[k]) printf(“%4d”,k+1);
printf(“\n總價值為%.2f\n”,maxv);
}
作 為對比,下面以同樣的解題思想,考慮非遞歸的程序解。為了提高找解速度,程序不是簡單地逐一生成所有候選解,而是從每個物品對候選解的影響來形成值得進一 步考慮的候選解,一個候選解是通過依次考察每個物品形成的。對物品i的考察有這樣幾種情況:當該物品被包含在候選解中依舊滿足解的總重量的限制,該物品被 包含在候選解中是應該繼續考慮的;反之,該物品不應該包括在當前正在形成的候選解中。同樣地,僅當物品不被包括在候選解中,還是有可能找到比目前臨時最佳 解更好的候選解時,才去考慮該物品不被包括在候選解中;反之,該物品不包括在當前候選解中的方案也不應繼續考慮。對于任一值得繼續考慮的方案,程序就去進 一步考慮下一個物品。
【程序】
# include
# define N 100
double limitW;
int cop[N];
struct ele { double weight;
double value;
} a[N];
int k,n;
struct { int ;
double tw;
double tv;
}twv[N];
void next(int i,double tw,double tv)
{ twv[i].=1;
twv[i].tw=tw;
twv[i].tv=tv;
}
double find(struct ele *a,int n)
{ int i,k,f;
double maxv,tw,tv,totv;
maxv=0;
for (totv=0.0,k=0;k
totv+=a[k].value;
next(0,0.0,totv);
i=0;
While (i>=0)
{ f=twv[i].;
tw=twv[i].tw;
tv=twv[i].tv;
switch(f)
{ case 1: twv[i].++;
if (tw+a[i].weight<=limitW)
if (i
{ next(i+1,tw+a[i].weight,tv);
i++;
}
else
{ maxv=tv;
for (k=0;k
cop[k]=twv[k].!=0;
}
break;
case 0: i–;
break;
default: twv[i].=0;
if (tv-a[i].value>maxv)
if (i
{ next(i+1,tw,tv-a[i].value);
i++;
}
else
{ maxv=tv-a[i].value;
for (k=0;k
cop[k]=twv[k].!=0;
}
break;
}
}
return maxv;
} 

void main()
{ double maxv;
printf(“輸入物品種數\n”);
scanf((“%d”,&n);
printf(“輸入限制重量\n”);
scanf(“%1f”,&limitW);
printf(“輸入各物品的重量和價值\n”);
for (k=0;k
scanf(“%1f%1f”,&a[k].weight,&a[k].value);
maxv=find(a,n);
printf(“\n選中的物品為\n”);
for (k=0;k
if (option[k]) printf(“%4d”,k+1);
printf(“\n總價值為%.2f\n”,maxv);
} 

五、回溯法 

回 溯法也稱為試探法,該方法首先暫時放棄關于問題規模大小的限制,并將問題的候選解按某種順序逐一枚舉和檢驗。當發現當前候選解不可能是解時,就選擇下一個 候選解;倘若當前候選解除了還不滿足問題規模要求外,滿足所有其他要求時,繼續擴大當前候選解的規模,并繼續試探。如果當前候選解滿足包括問題規模在內的 所有要求時,該候選解就是問題的一個解。在回溯法中,放棄當前候選解,尋找下一個候選解的過程稱為回溯。擴大當前候選解的規模,以繼續試探的過程稱為向前 試探。
1、回溯法的一般描述
可用回溯法求解的問題P,通常要能表達為:對于已知的由n元組(x1,x2,…,xn)組成的一個狀態空間 E={(x1,x2,…,xn)∣xi∈Si ,i=1,2,…,n},給定關于n元組中的一個分量的一個約束集D,要求E中滿足D的全部約束條件的所有n元組。其中Si是分量xi的定義域,且 |Si| 有限,i=1,2,…,n。我們稱E中滿足D的全部約束條件的任一n元組為問題P的一個解。
解問題P的最樸素的方法就是枚舉法,即對E中的所有n元組逐一地檢測其是否滿足D的全部約束,若滿足,則為問題P的一個解。但顯然,其計算量是相當大的。
我 們發現,對于許多問題,所給定的約束集D具有完備性,即i元組(x1,x2,…,xi)滿足D中僅涉及到x1,x2,…,xi的所有約束意味著j (jj。因此,對于約束集D具有完備性的問題P,一旦檢測斷定某個j元組(x1,x2,…,xj)違反D中僅涉及x1,x2,…,xj的一個約束,就可以 肯定,以(x1,x2,…,xj)為前綴的任何n元組(x1,x2,…,xj,xj+1,…,xn)都不會是問題P的解,因而就不必去搜索它們、檢測它 們。回溯法正是針對這類問題,利用這類問題的上述性質而提出來的比枚舉法效率更高的算法。
回溯法首先將問題P的n元組的狀態空間E表示成一棵高為n的帶權有序樹T,把在E中求問題P的所有解轉化為在T中搜索問題P的所有解。樹T類似于檢索樹,它可以這樣構造:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩在线观看| 欧美激情在线看| 一本高清dvd不卡在线观看 | 一区二区在线观看视频在线观看| 国产精品欧美一区二区三区| av一区二区三区四区| 亚洲视频一区二区在线| 色婷婷综合久久久久中文 | 91一区一区三区| 欧美日韩精品综合在线| 国产一区二区导航在线播放| 亚洲影院免费观看| 欧美国产国产综合| 久久久久久久久久久电影| 欧美精品日韩一本| 7777精品伊人久久久大香线蕉 | 欧美成人aa大片| 亚洲自拍偷拍麻豆| 精品影视av免费| 亚洲卡通欧美制服中文| 国产欧美日韩麻豆91| 欧美一区二区三区喷汁尤物| 91丨九色丨尤物| 一本一道久久a久久精品| 国产+成+人+亚洲欧洲自线| 国产在线视视频有精品| 国产老妇另类xxxxx| 国产一区二区三区免费看| 国产在线不卡一卡二卡三卡四卡| 男人的天堂久久精品| 男女性色大片免费观看一区二区| 免费不卡在线视频| 国产麻豆成人精品| 成人精品免费网站| 欧美无砖砖区免费| 日韩欧美一二三| 国产精品免费aⅴ片在线观看| 国产精品网曝门| 亚洲最大色网站| 老司机午夜精品| 99国产欧美另类久久久精品| 91美女蜜桃在线| 精品国产一区二区三区久久影院| 亚洲精品一区二区三区蜜桃下载 | 在线影视一区二区三区| 日韩一区二区三区免费看| 久久精品男人天堂av| 日韩精品亚洲专区| 国产精品综合视频| 7777精品伊人久久久大香线蕉的| 欧美成人欧美edvon| 亚洲尤物在线视频观看| 国产精品原创巨作av| 91成人免费在线视频| 久久男人中文字幕资源站| 婷婷久久综合九色国产成人| 99精品热视频| 国产日韩影视精品| 国产精品88av| 欧美成人精品1314www| 一区二区三区在线视频播放| 白白色亚洲国产精品| 日本一区二区免费在线观看视频| 五月激情综合色| 在线这里只有精品| 亚洲精品ww久久久久久p站| 成人毛片视频在线观看| 久久精品人人做人人爽97| 日本午夜精品一区二区三区电影| 在线观看国产日韩| 亚洲综合激情网| 欧美三级韩国三级日本一级| 亚洲精品菠萝久久久久久久| 99久久精品99国产精品| 亚洲男人的天堂在线观看| 91在线无精精品入口| 夜夜爽夜夜爽精品视频| 欧美日韩综合在线免费观看| 午夜激情一区二区三区| 欧美高清激情brazzers| 韩国三级中文字幕hd久久精品| 亚洲视频免费看| 在线看日韩精品电影| 亚洲丶国产丶欧美一区二区三区| 精品视频免费在线| 久久国产精品色| 国产精品美女久久久久aⅴ | 午夜国产精品影院在线观看| 欧美日韩国产另类不卡| 秋霞电影网一区二区| 久久久不卡影院| 91免费看`日韩一区二区| 亚洲成人av电影在线| 日韩片之四级片| 91丨porny丨蝌蚪视频| 日本一道高清亚洲日美韩| 精品理论电影在线观看 | 日韩欧美在线123| 成人黄色网址在线观看| 亚洲一二三四区| 久久久久久麻豆| 欧美男人的天堂一二区| 国产成人精品1024| 日韩高清不卡一区| 亚洲日本在线天堂| 欧美激情在线一区二区三区| 91精品婷婷国产综合久久| 不卡的av中国片| 国产.欧美.日韩| 久久精品国产免费看久久精品| 一区二区三区中文在线| 久久精品夜色噜噜亚洲a∨| 欧美一区二区三区免费视频| 91丨九色丨蝌蚪丨老版| 成人免费毛片嘿嘿连载视频| 另类小说综合欧美亚洲| 亚洲国产日韩a在线播放性色| 欧美国产日本韩| 国产精品网曝门| 国产精品女上位| 国产精品午夜在线观看| 国产日产欧美一区| 26uuu久久天堂性欧美| 91麻豆精品国产综合久久久久久 | 欧美这里有精品| 91高清视频在线| 欧美日韩精品欧美日韩精品一| 色婷婷av一区| 8v天堂国产在线一区二区| 欧日韩精品视频| 91麻豆精品国产91| 亚洲精品一区二区精华| 亚洲精品在线观| 最新不卡av在线| 亚洲五码中文字幕| 免费高清成人在线| 国产一区二区三区综合| 成人免费视频app| 色婷婷av一区二区三区大白胸| 欧美日韩在线免费视频| 日韩美一区二区三区| 中文字幕中文在线不卡住| 一区二区三区在线免费观看| 日韩国产精品久久久| 国产一区欧美日韩| 91久久精品日日躁夜夜躁欧美| 欧美精品丝袜久久久中文字幕| 日韩美女视频一区二区在线观看| 国产亚洲精品超碰| 亚洲妇熟xx妇色黄| 国产一区在线观看视频| 欧美在线播放高清精品| 亚洲精品在线观| 亚洲图片欧美综合| 成人性生交大合| 91精品国产一区二区人妖| 国产精品理伦片| 久久国内精品视频| 欧美精品一卡两卡| 亚洲欧美日韩国产成人精品影院 | 丁香婷婷综合激情五月色| 欧美三级电影精品| 亚洲视频在线观看三级| 国内欧美视频一区二区 | 国产亚洲福利社区一区| 麻豆精品视频在线观看视频| 91成人看片片| 一区二区三区在线观看国产| 国产高清不卡一区二区| 91精品国产麻豆国产自产在线| 亚洲人午夜精品天堂一二香蕉| 国产成人精品免费一区二区| 91精品国产麻豆国产自产在线 | 日韩av一区二| 制服丝袜亚洲网站| 麻豆精品国产传媒mv男同| 欧美一区二区三区免费大片| 婷婷丁香久久五月婷婷| 欧美精三区欧美精三区| 天堂久久一区二区三区| 欧美一区二区女人| 国产一区二区三区视频在线播放| 欧美mv日韩mv国产网站| 韩国一区二区三区| 国产三级精品三级| 色偷偷久久一区二区三区| 亚欧色一区w666天堂| 4438x成人网最大色成网站| 秋霞电影一区二区| 国产欧美1区2区3区| 成人白浆超碰人人人人| 亚洲黄色免费电影| 欧美一区二区三区不卡| 豆国产96在线|亚洲| 亚洲综合激情小说| 国产日本欧美一区二区| 国产精品系列在线播放| www.视频一区| 天堂av在线一区| 亚洲免费av在线|