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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? data structor.txt

?? 常用的經(jīng)典算法源代碼
?? TXT
?? 第 1 頁 / 共 5 頁
字號:
在網(wǎng)上找到這篇《常用算法設(shè)計方法》,雖然代碼是C的,但是算法的原理都一樣吧。
常用算法設(shè)計方法 

要使計算機能完成人們預定 的工作,首先必須為如何完成預定的工作設(shè)計一個算法,然后再根據(jù)算法編寫程序。計算機程序要對問題的每個對象和處理規(guī)則給出正確詳盡的描述,其中程序的數(shù) 據(jù)結(jié)構(gòu)和變量用來描述問題的對象,程序結(jié)構(gòu)、函數(shù)和語句用來描述問題的算法。算法數(shù)據(jù)結(jié)構(gòu)是程序的兩個重要方面。
算法是問題求解過程的精確描述,一個算法由有限條可完全機械地執(zhí)行的、有確定結(jié)果的指令組成。指令正確地描述了要完成的任務和它們被執(zhí)行的順序。計算機按算法指令所描述的順序執(zhí)行算法的指令能在有限的步驟內(nèi)終止,或終止于給出問題的解,或終止于指出問題對此輸入數(shù)據(jù)無解。
通常求解一個問題可能會有多種算法可供選擇,選擇的主要標準是算法的正確性和可靠性,簡單性和易理解性。其次是算法所需要的存儲空間少和執(zhí)行更快等。
算法設(shè)計是一件非常困難的工作,經(jīng)常采用的算法設(shè)計技術(shù)主要有迭代法、窮舉搜索法、遞推法、貪婪法、回溯法、分治法、動態(tài)規(guī)劃法等等。另外,為了更簡潔的形式設(shè)計和藐視算法,在算法設(shè)計時又常常采用遞歸技術(shù),用遞歸描述算法。

一、迭代法 

迭代法是用于求方程或方程組近似根的一種常用的算法設(shè)計方法。設(shè)方程為f(x)=0,用某種數(shù)學方法導出等價的形式x=g(x),然后按以下步驟執(zhí)行:
(1) 選一個方程的近似根,賦給變量x0;
(2) 將x0的值保存于變量x1,然后計算g(x1),并將結(jié)果存于變量x0;
(3) 當x0與x1的差的絕對值還小于指定的精度要求時,重復步驟(2)的計算。
若方程有根,并且用上述方法計算出來的近似根序列收斂,則按上述方法求得的x0就認為是方程的根。上述算法用C程序的形式表示為:
【算法】迭代法求方程的根
{ x0=初始近似根;
do {
x1=x0;
x0=g(x1); /*按特定的方程計算新的近似根*/
} while ( fabs(x0-x1)>Epsilon);
printf(“方程的近似根是%f\n”,x0);
}
迭代算法也常用于求方程組的根,令
X=(x0,x1,…,xn-1)
設(shè)方程組為:
xi=gi(X) (I=0,1,…,n-1)
則求方程組根的迭代算法可描述如下:
【算法】迭代法求方程組的根
{ for (i=0;i
x[i]=初始近似根;
do {
for (i=0;i
y[i]=x[i];
for (i=0;i
x[i]=gi(X);
for (delta=0.0,i=0;i
if (fabs(y[i]-x[i])>delta) delta=fabs(y[i]-x[i]);
} while (delta>Epsilon);
for (i=0;i
printf(“變量x[%d]的近似根是 %f”,I,x[i]);
printf(“\n”);
}
具體使用迭代法求根時應注意以下兩種可能發(fā)生的情況:
(1) 如果方程無解,算法求出的近似根序列就不會收斂,迭代過程會變成死循環(huán),因此在使用迭代算法前應先考察方程是否有解,并在程序中對迭代的次數(shù)給予限制;
(2) 方程雖然有解,但迭代公式選擇不當,或迭代的初始近似根選擇不合理,也會導致迭代失敗。 

二、窮舉搜索法 

窮舉搜索法是對可能是解的眾多候選解按某種順序進行逐一枚舉和檢驗,并從眾找出那些符合要求的候選解作為問題的解。
【問題】 將A、B、C、D、E、F這六個變量排成如圖所示的三角形,這六個變量分別取[1,6]上的整數(shù),且均不相同。求使三角形三條邊上的變量之和相等的全部解。如圖就是一個解。
程 序引入變量a、b、c、d、e、f,并讓它們分別順序取1至6的證書,在它們互不相同的條件下,測試由它們排成的如圖所示的三角形三條邊上的變量之和是否 相等,如相等即為一種滿足要求的排列,把它們輸出。當這些變量取盡所有的組合后,程序就可得到全部可能的解。細節(jié)見下面的程序。
【程序1】
# include
void main()
{ int a,b,c,d,e,f;
for (a=1;a<=6;a++)
for (b=1;b<=6;b++) {
if (b==a) continue;
for (c=1;c<=6;c++) {
if (c==a)||(c==b) continue;
for (d=1;d<=6;d++) {
if (d==a)||(d==b)||(d==c) continue;
for (e=1;e<=6;e++) {
if (e==a)||(e==b)||(e==c)||(e==d) continue;
f=21-(a+b+c+d+e);
if ((a+b+c==c+d+e))&&(a+b+c==e+f+a)) {
printf(“%6d,a);
printf(“%4d%4d”,b,f);
printf(“%2d%4d%4d”,c,d,e);
scanf(“%*c”);
}
}
}
}
}
}
按窮舉法編寫的程序通常不能適應變化的情況。如問題改成有9個變量排成三角形,每條邊有4個變量的情況,程序的循環(huán)重數(shù)就要相應改變。
對 一組數(shù)窮盡所有排列,還有更直接的方法。將一個排列看作一個長整數(shù),則所有排列對應著一組整數(shù)。將這組整數(shù)按從小到大的順序排列排成一個整數(shù),從對應最小 的整數(shù)開始。按數(shù)列的遞增順序逐一列舉每個排列對應的每個整數(shù),這能更有效地完成排列的窮舉。從一個排列找出對應數(shù)列的下一個排列可在當前排列的基礎(chǔ)上作 部分調(diào)整來實現(xiàn)。倘若當前排列為1,2,4,6,5,3,并令其對應的長整數(shù)為124653。要尋找比長整數(shù)124653更大的排列,可從該排列的最后一 個數(shù)字順序向前逐位考察,當發(fā)現(xiàn)排列中的某個數(shù)字比它前一個數(shù)字大時,如本例中的6比它的前一位數(shù)字4大,這說明還有對應更大整數(shù)的排列。但為了順序從小 到大列舉出所有的排列,不能立即調(diào)整得太大,如本例中將數(shù)字6與數(shù)字4交換得到的排列126453就不是排列124653的下一個排列。為了得到排列 124653的下一個排列,應從已經(jīng)考察過的那部分數(shù)字中選出比數(shù)字大,但又是它們中最小的那一個數(shù)字,比如數(shù)字5,與數(shù)字4交換。該數(shù)字也是從后向前考 察過程中第一個比4大的數(shù)字。5與4交換后,得到排列125643。在前面數(shù)字1,2,5固定的情況下,還應選擇對應最小整數(shù)的那個排列,為此還需將后面 那部分數(shù)字的排列順序顛倒,如將數(shù)字6,4,3的排列順序顛倒,得到排列1,2,5,3,4,6,這才是排列1,2,4,6,5,3的下一個排列。按以上 想法編寫的程序如下。
【程序2】
# include
# define SIDE_N 3
# define LENGTH 3
# define VARIABLES 6
int A,B,C,D,E,F;
int *pt[]={&A,&B,&C,&D,&E,&F};
int *side[SIDE_N][LENGTH]={&A,&B,&C,&C,&D,&E,&E,&F,&A};
int side_total[SIDE_N];
main{}
{ int i,j,t,equal;
for (j=0;j
*pt[j]=j+1;
while(1)
{ for (i=0;i
{ for (t=j=0;j
t+=*side[i][j];
side_total[i]=t;
}
for (equal=1,i=0;equal&&i
if (side_total[i]!=side_total[i+1] equal=0;
if (equal)
{ for (i=1;i
printf(“%4d”,*pt[i]);
printf(“\n”);
scanf(“%*c”);
}
for (j=VARIABLES-1;j>0;j–)
if (*pt[j]>*pt[j-1]) break;
if (j==0) break;
for (i=VARIABLES-1;i>=j;i–)
if (*pt[i]>*pt[i-1]) break;
t=*pt[j-1];* pt[j-1] =* pt[i]; *pt[i]=t;
for (i=VARIABLES-1;i>j;i–,j++)
{ t=*pt[j]; *pt[j] =* pt[i]; *pt[i]=t; }
}
}
從上述問題解決的方法中,最重要的因素就是確定某種方法來確定所有的候選解。下面再用一個示例來加以說明。
【問題】 背包問題
問題描述:有不同價值、不同重量的物品n件,求從這n件物品中選取一部分物品的選擇方案,使選中物品的總重量不超過指定的限制重量,但選中物品的價值之和最大。
設(shè)n 個物品的重量和價值分別存儲于數(shù)組w[ ]和v[ ]中,限制重量為tw。考慮一個n元組(x0,x1,…,xn-1),其中xi=0 表示第i個物品沒有選取,而xi=1則表示第i個物品被選取。顯然這個n元組等價于一個選擇方案。用枚舉法解決背包問題,需要枚舉所有的選取方案,而根據(jù) 上述方法,我們只要枚舉所有的n元組,就可以得到問題的解。
顯然,每個分量取值為0或1的n元組的個數(shù)共為2n個。而每個n元組其實對應了一個長度為n的二進制數(shù),且這些二進制數(shù)的取值范圍為0~2n-1。因此,如果把0~2n-1分別轉(zhuǎn)化為相應的二進制數(shù),則可以得到我們所需要的2n個n元組。
【算法】
maxv=0;
for (i=0;i<2n;i++)
{ B[0..n-1]=0;
把i轉(zhuǎn)化為二進制數(shù),存儲于數(shù)組B中;
temp_w=0;
temp_v=0;
for (j=0;j
{ if (B[j]==1)
{ temp_w=temp_w+w[j];
temp_v=temp_v+v[j];
}
if ((temp_w<=tw)&&(temp_v>maxv))
{ maxv=temp_v;
保存該B數(shù)組;
}
}
} 

三、遞推法 

遞 推法是利用問題本身所具有的一種遞推關(guān)系求問題解的一種方法。設(shè)要求問題規(guī)模為N的解,當N=1時,解或為已知,或能非常方便地得到解。能采用遞推法構(gòu)造 算法的問題有重要的遞推性質(zhì),即當?shù)玫絾栴}規(guī)模為i-1的解后,由問題的遞推性質(zhì),能從已求得的規(guī)模為1,2,…,i-1的一系列解,構(gòu)造出問題規(guī)模為 I的解。這樣,程序可從i=0或i=1出發(fā),重復地,由已知至i-1規(guī)模的解,通過遞推,獲得規(guī)模為i的解,直至得到規(guī)模為N的解。
【問題】 階乘計算
問題描述:編寫程序,對給定的n(n≦100),計算并輸出k的階乘k!(k=1,2,…,n)的全部有效數(shù)字。
由于要求的整數(shù)可能大大超出一般整數(shù)的位數(shù),程序用一維數(shù)組存儲長整數(shù),存儲長整數(shù)數(shù)組的每個元素只存儲長整數(shù)的一位數(shù)字。如有m位成整數(shù)N用數(shù)組a[ ]存儲:
N=a[m]×10m-1+a[m-1]×10m-2+ … +a[2]×101+a[1]×100
并用a[0]存儲長整數(shù)N的位數(shù)m,即a[0]=m。按上述約定,數(shù)組的每個元素存儲k的階乘k!的一位數(shù)字,并從低位到高位依次存于數(shù)組的第二個元素、第三個元素……。例如,5!=120,在數(shù)組中的存儲形式為:
3 0 2 1 ……
首元素3表示長整數(shù)是一個3位數(shù),接著是低位到高位依次是0、2、1,表示成整數(shù)120。
計算階乘k!可采用對已求得的階乘(k-1)!連續(xù)累加k-1次后求得。例如,已知4!=24,計算5!,可對原來的24累加4次24后得到120。細節(jié)見以下程序。
# include
# include
# define MAXN 1000
void pnext(int a[ ],int k)
{ int *b,m=a[0],i,j,r,carry;
b=(int * ) malloc(sizeof(int)* (m+1));
for ( i=1;i<=m;i++) b[i]=a[i];
for ( j=1;j<=k;j++)
{ for ( carry=0,i=1;i<=m;i++)
{ r=(i
a[i]=r%10;
carry=r/10;
}
if (carry) a[++m]=carry;
}
free(b);
a[0]=m;
} 

void write(int *a,int k)
{ int i;
printf(“%4d!=”,k);
for (i=a[0];i>0;i–)
printf(“%d”,a[i]);
printf(“\n\n”);
} 

void main()
{ int a[MAXN],n,k;
printf(“Enter the number n: “);
scanf(“%d”,&n);
a[0]=1;
a[1]=1;
write(a,1);
for (k=2;k<=n;k++)
{ pnext(a,k);
write(a,k);
getchar();
}
} 

四、遞歸 

遞歸是設(shè)計和描述算法的一種有力的工具,由于它在復雜算法的描述中被經(jīng)常采用,為此在進一步介紹其他算法設(shè)計方法之前先討論它。
能 采用遞歸描述的算法通常有這樣的特征:為求解規(guī)模為N的問題,設(shè)法將它分解成規(guī)模較小的問題,然后從這些小問題的解方便地構(gòu)造出大問題的解,并且這些規(guī)模 較小的問題也能采用同樣的分解和綜合方法,分解成規(guī)模更小的問題,并從這些更小問題的解構(gòu)造出規(guī)模較大問題的解。特別地,當規(guī)模N=1時,能直接得解。
【問題】 編寫計算斐波那契(Fibonacci)數(shù)列的第n項函數(shù)fib(n)。
斐波那契數(shù)列為:0、1、1、2、3、……,即:
fib(0)=0;
fib(1)=1;
fib(n)=fib(n-1)+fib(n-2) (當n>1時)。
寫成遞歸函數(shù)有:
int fib(int n)
{ if (n==0) return 0;
if (n==1) return 1;
if (n>1) return fib(n-1)+fib(n-2);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
这里只有精品免费| 99久久夜色精品国产网站| 春色校园综合激情亚洲| 亚洲精品一区二区三区精华液 | 成人av手机在线观看| 在线这里只有精品| 蜜桃视频在线一区| 精品少妇一区二区三区视频免付费 | 日本美女一区二区三区视频| av欧美精品.com| 亚洲综合一区二区| 精品区一区二区| 丝袜美腿亚洲色图| 91电影在线观看| 毛片av中文字幕一区二区| 亚洲国产精品成人综合 | 欧美色网站导航| 国产精品一区二区在线观看网站| 国产精品视频观看| 欧美日本一区二区三区四区| 秋霞国产午夜精品免费视频| 久久免费视频色| 欧美日本在线播放| 国产激情一区二区三区| 亚洲国产毛片aaaaa无费看 | 午夜成人免费电影| 亚洲人成精品久久久久| 欧美一区二区三区四区五区 | 亚洲婷婷在线视频| 欧美精品一区二区久久婷婷| 欧美伊人久久久久久午夜久久久久| 老司机精品视频在线| 亚洲一二三四区| 亚洲欧洲精品天堂一级 | 精品国产髙清在线看国产毛片| 国产福利不卡视频| 国产精品资源网| 国产乱子伦一区二区三区国色天香| 日韩黄色免费电影| 亚洲丝袜美腿综合| 国产精品久久久久久久第一福利 | 亚洲一区二区三区四区在线 | 亚洲日本在线a| 亚洲免费成人av| 五月婷婷久久综合| 婷婷国产v国产偷v亚洲高清| 午夜久久久久久久久| 亚洲成人手机在线| 九一九一国产精品| 国产久卡久卡久卡久卡视频精品| 欧美aaa在线| 精品一区二区国语对白| 国产精品伊人色| 91色视频在线| 欧美va亚洲va国产综合| 欧美国产一区二区在线观看 | 91在线视频播放地址| 处破女av一区二区| 欧美一级在线免费| 中文字幕亚洲一区二区av在线| 一区二区三区久久| 国产一区二区三区免费| 欧亚一区二区三区| 日韩一区二区免费电影| 中文字幕在线不卡一区| 首页亚洲欧美制服丝腿| 99视频精品免费视频| 欧洲亚洲精品在线| 国产精品成人在线观看| 日韩影院免费视频| 欧美日韩国产精品成人| 日本一二三四高清不卡| 麻豆国产精品777777在线| 色婷婷精品久久二区二区蜜臂av | 国产揄拍国内精品对白| 99这里都是精品| **欧美大码日韩| 免费三级欧美电影| 精品免费一区二区三区| 免费一级片91| 久久久国产精品不卡| 久久精品99国产精品日本| 日韩精品一区二区三区视频播放 | 99久久精品免费观看| 中文字幕乱码久久午夜不卡| 国产福利一区二区三区视频在线| 欧美大片在线观看一区| 久久99精品国产91久久来源| 欧美一级高清片| 国产一本一道久久香蕉| 亚洲人成小说网站色在线| 成人免费毛片aaaaa**| 久久精品亚洲麻豆av一区二区 | 亚洲bt欧美bt精品777| 国产精品亚洲午夜一区二区三区| 色综合久久综合网97色综合 | 色婷婷亚洲精品| 亚洲另类中文字| 成人涩涩免费视频| 色婷婷av一区二区三区之一色屋| 亚洲国产经典视频| 成人综合婷婷国产精品久久| 欧美电影免费提供在线观看| 日韩激情视频在线观看| 久久午夜电影网| 日本精品裸体写真集在线观看 | 九九精品视频在线看| 欧美不卡视频一区| 激情五月播播久久久精品| 一区二区中文视频| 欧美成人在线直播| 色8久久人人97超碰香蕉987| 韩国欧美国产1区| 亚洲v精品v日韩v欧美v专区| 一区二区在线观看视频| 国产视频一区在线观看| 日本一区二区电影| 最新高清无码专区| 国产精品女主播av| 国产精品嫩草影院av蜜臀| 亚洲欧洲日韩综合一区二区| 国产亚洲女人久久久久毛片| 国产免费久久精品| 中文字幕在线观看不卡| 亚洲欧美国产77777| 日韩美女啊v在线免费观看| 中文字幕在线一区| 香蕉影视欧美成人| 激情五月播播久久久精品| 丁香激情综合国产| 91国产精品成人| 久久九九全国免费| 最新国产成人在线观看| 日韩成人一级大片| 丁香天五香天堂综合| 精品视频色一区| 久久久久国产精品免费免费搜索| 自拍偷拍亚洲综合| 久久精品av麻豆的观看方式| 成人夜色视频网站在线观看| 欧美系列亚洲系列| 久久精品一区八戒影视| 欧美a级理论片| 欧美色图12p| 最新国产精品久久精品| 六月婷婷色综合| 欧美日韩中文字幕精品| ●精品国产综合乱码久久久久 | 国产麻豆一精品一av一免费| 91视频观看免费| 中文字幕亚洲精品在线观看| 黑人巨大精品欧美一区| 日韩色视频在线观看| 日韩成人午夜精品| 欧洲一区二区av| 亚洲成人资源网| 黄色资源网久久资源365| 欧美日本在线播放| 亚洲宅男天堂在线观看无病毒| 成人黄色综合网站| 成人免费在线观看入口| 成人激情开心网| 中文字幕制服丝袜一区二区三区| 丰满少妇久久久久久久| 国产午夜精品美女毛片视频| 久久电影国产免费久久电影| 欧美一级在线免费| 国产激情一区二区三区| 日本一区二区三区国色天香 | 国产精品女上位| 欧美三级三级三级爽爽爽| 秋霞成人午夜伦在线观看| 精品国产1区2区3区| 成人免费看的视频| 亚洲1区2区3区4区| 久久噜噜亚洲综合| 欧美亚洲一区三区| 国内偷窥港台综合视频在线播放| 日本一区二区三区国色天香 | 成人一区二区三区视频 | 亚洲一区在线观看免费| 制服丝袜成人动漫| 成人ar影院免费观看视频| 日韩精品成人一区二区三区| 国产精品入口麻豆原神| 91麻豆精品秘密| 强制捆绑调教一区二区| 国产精品免费aⅴ片在线观看| 欧美色网一区二区| 国产成人亚洲综合a∨婷婷图片| 亚洲乱码国产乱码精品精98午夜 | 91福利视频网站| 国产91清纯白嫩初高中在线观看| 亚洲成av人片一区二区| 亚洲女人的天堂| 国产喷白浆一区二区三区| 精品国产91亚洲一区二区三区婷婷| 色久综合一二码| 91理论电影在线观看| 色综合婷婷久久|