本文目錄一覽:
- 1、C語言高斯-塞德爾迭代法
- 2、c語言中什麼是算法?有哪些描述算法的例子?
- 3、求遺傳算法(GA)C語言代碼
- 4、c語言常用算法有哪些
- 5、C語言的算法描述是什麼?
- 6、c語言題目,算法看不懂,還有裡面的sigh和sum等都是什麼意思啊~!希望一步一步的說清楚,先謝啦~!
C語言高斯-塞德爾迭代法
#include stdio.h
int main()
{
double x[4] = {0, 0, 0, 0};
double a[4][4] = {1, 2, 4, 8, 1, 3, 9, 27, 1, 4, 16, 64, 1, 5, 25, 125};
double y[4] = {10, 26, 58, 112};
double d[4][4], g[4];
int round = 5, i,j;
for (i=0; i4; ++i) {
g[i] = y[i] / a[i][i];
for (j=0; j4; ++j) {
d[i][j] = i==j ? 0 : -a[i][j]/a[i][i];
}
}
while (round–) {
for (i=0; i4; ++i) {
x[i] = g[i];
for (j=0; j4; ++j) {
x[i] += d[i][j] * x[j];
}
printf(“%lf ” , x[i]);
}
printf(“\n”);
}
}
c語言中什麼是算法?有哪些描述算法的例子?
c語言中的算法是指:一系列解決問題的清晰指令,用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。通俗說就是解決問題的方法和步驟。
描述算法的例子:
問題:從上海去到北京。
其中的算法:做汽車、做飛機、或者徒步。
問題:喝茶。
其中的算法:先找到茶葉,再燒一壺開水,然後將茶葉放到杯子里,將開水倒入杯中,等茶葉泡好。
問題:開車。
其中的算法:首先要打開車門,駕駛員坐好,插上車鑰匙,發動汽車。
算法的五個重要的特徵:有窮性(Finiteness)、確切性(Definiteness)、輸入項(Input)、輸出項(Output)、可行性(Effectiveness)。
算法的時間複雜度:算法的時間複雜度是指執行算法所需要的計算工作量。一般來說,計算機算法是問題規模n 的函數f(n),算法的時間複雜度也因此記做。T(n)=Ο(f(n))因此,問題的規模n 越大,算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間複雜度(Asymptotic Time Complexity)。
算法的空間複雜度:算法的空間複雜度是指算法需要消耗的內存空間。其計算和表示方法與時間複雜度類似,一般都用複雜度的漸近性來表示。同時間複雜度相比,空間複雜度的分析要簡單得多。可以從正確性、可讀性、健壯性(容錯性)來分析。
求遺傳算法(GA)C語言代碼
x=220;
for(i=0;i12;i++)
{
y=202+i*16;
for(j=bits [ i][0];j=bits [ i][1];j++)
if(g[j]==0)
g_text(x+(j-bits [ i][0])*16,y,4,”0″);
else
g_text(x+(j-bits [ i][0])*16,y,4,”1″);
}
}
}
void g_disp_char(x,y,x1,y1,x2,y2,v)
int x,y,x1,y1,x2,y2;
unsigned char v;
{
char c[10];
if(x=x1 x=x2-8 y=y1 y=y2-10)
{
switch(v)
{
case 0: strcpy(c,”0″);break;
case 1: strcpy(c,”+”);break;
case 2: strcpy(c,”-“);break;
case 3: strcpy(c,”x”);
}
g_text(x,y,15,c);
}
}
void remove_life(n) /* 消除第n個個體 */
int n;
{
iflg[n]=0;
world[iatr[n][0]][iatr[n][1]]=0;
g_disp_unit(iatr[n][0],iatr[n][1],0);
if(food_size+1=MAX_FOOD)
{
food_size++;
fatr[food_size-1][0]=iatr[n][0];
fatr[food_size-1][1]=iatr[n][1];
fatr[food_size-1][2]=1;
fatr[food_size-1][3]=0;
fflg[food_size-1]=1;
world[iatr[n][0]][iatr[n][1]]=5;
g_disp_unit(iatr[n][0],iatr[n][1],5);
}
}
void remove_food(n) /* 消除第n個食物 */
int n;
{
fflg[n]=0;
world[fatr[n][0]][fatr[n][1]]=0;
g_disp_unit(fatr[n][0],fatr[n][1],0);
}
void make_lives_and_foods() /* 設置虛擬環境中生物與食物 */
{
int x,y,i,j;
pop_size=0;
food_size=0;
for(y=0;ywy;y++)
for(x=0;xwx;x++)
{
if(world[x][y]==1||world[x][y]==2)
{
if(pop_size+1=MAX_POP)
{
pop_size++;
/* 生成遺傳因子 */
gene[pop_size-1][0]=world[x][y]-1;
for(i=1;iG_LENGTH;i++)
gene[pop_size-1] [ i]=random(2);
/* 設定屬性 */
iatr[pop_size-1][0]=x;
iatr[pop_size-1][1]=y;
iatr[pop_size-1][2]=70+random(30);
iatr[pop_size-1][3]=random(SL_MIN);
}
}
if(world[x][y]==3||world[x][y]==5)
{
if(food_size+1=MAX_FOOD)
{
food_size++;
/* 設定屬性 */
fatr[food_size-1][0]=x;
fatr[food_size-1][1]=y;
if(world[x][y]==3)
fatr[food_size-1][2]=0;
else
fatr[food_size-1][2]=1;
fatr[food_size-1][3]=random(TL1-1)+1;
}
}
}
}
void find_empty(x,y) /* 尋找虛擬環境中的空處,返回坐標 */
int *x,*y;
{
int ok;
ok=0;
while(ok==0)
{
*x=random(wx);*y=random(wy);
if(world[*x][*y]==0) ok=1;
}
}
void make_world() /* 隨機設定人工環境 */
{
int i,j,k,num,x,y;
int ok,overlap;
char choice[3];
double size;
wx=0;
while(wx10||wxMAX_WX)
{
setcolor(15);
disp_hz16(“虛擬環境長度(10-60)”,10,210,20);
gscanf(300,210,4,0,3,”%s”,choice);
wx=atoi(choice);
}
wy=0;
while(wy10||wyMAX_WY)
{
setcolor(15);
disp_hz16(“虛擬環境寬度(10-32)”,10,240,20);
gscanf(300,240,4,0,3,”%s”,choice);
wy=atoi(choice);
}
for(i=0;iwy;i++)
for(j=0;jwx;j++)
if(i==0||i==wy-1||j==0||j==wx-1)
world[j] [ i]=4;
else world[j] [ i]=0;
/* 設定障礙物 */
size=(double)(wx*wy);
num=(int)(size/40.0);
if(numMAX_POP) num=MAX_POP;
for(i=0;inum;i++)
{
find_empty(x,y);
world[x][y]=4;
}
num=(int)(size/5.0);
if(numMAX_FOOD) num=MAX_FOOD;
for(i=0;inum;i++)
{
ok=0;
while(ok==0)
{
x=random(wx);y=random(wy);
if((world[x][y]!=4)
(world[x][y-1]==4 || world[x][y+1]==4 ||
world[x-1][y]==4 || world[x+1][y]==4))
{ world[x][y]=4;
ok=1;
}
}
}
for(y=0;ywy;y++)
for(x=0;xwx;x++)
if(world[x][y]==0)
{
num=0;
for(i=-1;i=1;i++)
for(j=-1;j=1;j++)
if(get_world(x+j,y+i)==4)
num++;
if(num=6) world[x][y]=4;
}
/* 設定生物 */
num=(int)(size*R_LIFE);
for(i=0;inum;i++)
{ find_empty(x,y);
world[x][y]=random(2)+1;
}
/* 設定食物 */
num=(int)(size*R_FOOD);
for(i=0;inum;i++)
{
find_empty(x,y);
world[x][y]=3;
}
}
void load_world_file() /* 讀取虛擬環境數據文件設定 */
{
FILE *fopen(),*fpt;
char st[100],c;
int i,j;
if((fpt=fopen(“\ga\world”,”r”))==NULL) exit(-1);
else
{
fscanf(fpt,”%d”,wx);
fscanf(fpt,”%d”,wy);
for(i=0;iwy;i++)
for(j=0;jwx;j++)
fscanf(fpt,”%d”,world[j] [ i]);
fclose(fpt);
c語言常用算法有哪些
0) 窮舉法
窮舉法簡單粗暴,沒有什麼問題是搞不定的,只要你肯花時間。同時對於小數據量,窮舉法就是最優秀的算法。就像太祖長拳,簡單,人人都能會,能解決問題,但是與真正的高手過招,就頹了。
1) 貪婪算法
貪婪算法可以獲取到問題的局部最優解,不一定能獲取到全局最優解,同時獲取最優解的好壞要看貪婪策略的選擇。特點就是簡單,能獲取到局部最優解。就像打狗棍法,同一套棍法,洪七公和魯有腳的水平就差太多了,因此同樣是貪婪算法,不同的貪婪策略會導致得到差異非常大的結果。
2) 動態規划算法
當最優化問題具有重複子問題和最優子結構的時候,就是動態規划出場的時候了。動態規划算法的核心就是提供了一個memory來緩存重複子問題的結果,避免了遞歸的過程中的大量的重複計算。動態規划算法的難點在於怎麼將問題轉化為能夠利用動態規划算法來解決。當重複子問題的數目比較小時,動態規劃的效果也會很差。如果問題存在大量的重複子問題的話,那麼動態規劃對於效率的提高是非常恐怖的。就像斗轉星移武功,對手強它也會比較強,對手若,他也會比較弱。
3)分治算法
分治算法的邏輯更簡單了,就是一個詞,分而治之。分治算法就是把一個大的問題分為若干個子問題,然後在子問題繼續向下分,一直到base cases,通過base cases的解決,一步步向上,最終解決最初的大問題。分治算法是遞歸的典型應用。
4) 回溯算法
回溯算法是深度優先策略的典型應用,回溯算法就是沿着一條路向下走,如果此路不同了,則回溯到上一個
分岔路,在選一條路走,一直這樣遞歸下去,直到遍歷萬所有的路徑。八皇后問題是回溯算法的一個經典問題,還有一個經典的應用場景就是迷宮問題。
5) 分支限界算法
回溯算法是深度優先,那麼分支限界法就是廣度優先的一個經典的例子。回溯法一般來說是遍歷整個解空間,獲取問題的所有解,而分支限界法則是獲取一個解(一般來說要獲取最優解)。
C語言的算法描述是什麼?
有很多種形式,比如用偽代碼來敘述你的編程思想.
主要包含內部邏輯,數據流處理.
c語言題目,算法看不懂,還有裡面的sigh和sum等都是什麼意思啊~!希望一步一步的說清楚,先謝啦~!
看來這個問題難住你的不是算法本身,而是英文, 程序員需要良好的英語基礎和數學基礎。
sign:
中文含義 為符號, 用來代表這個算法裡面的當前 正負號;
sum:
中文含義為總和, 用來代表求和的和。
deno:
denominator 的縮寫,denominator中文含義為分母。
有了上面的解釋,這個算法的偽代碼相信就很容易懂了
1-1/2+1/3-1/4+…..1/99-1/100
= 1 + (-1)(1/2)+ 1/3 + (-1)(1/4) + … + 1/99 + (-1)(1/100)
S1: 設為正數
S2: 和 = 1 //加上第一個數
S3: 分母為2 // 為了接着計算 (-1)(1/2)
S4: 正負變號//對應上面的算式每項輪流反號
S5:讓term 為當前項 //現在是 (-1)(1/2)
S6: 這步寫錯了,應該是sum = sum + term, 即在和上加上當前項(-1)(1/2),於是計算出了 1 + (-1)(1/2)的值了,目前
S7: 分母+1//為了計算 後面的1/3
S8: 如果分母小於等於100, 返回S4,這樣可以繼續計算並累加後面的項; 否則,當前的sum里已經包含了所有項的和了,結束。
原創文章,作者:NCQE,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/132133.html