gs算法c語言,GSC算法

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
NCQE的頭像NCQE
上一篇 2024-10-03 23:50
下一篇 2024-10-03 23:50

相關推薦

  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python實現爬樓梯算法

    本文介紹使用Python實現爬樓梯算法,該算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Harris角點檢測算法原理與實現

    本文將從多個方面對Harris角點檢測算法進行詳細的闡述,包括算法原理、實現步驟、代碼實現等。 一、Harris角點檢測算法原理 Harris角點檢測算法是一種經典的計算機視覺算法…

    編程 2025-04-29
  • 數據結構與算法基礎青島大學PPT解析

    本文將從多個方面對數據結構與算法基礎青島大學PPT進行詳細的闡述,包括數據類型、集合類型、排序算法、字符串匹配和動態規劃等內容。通過對這些內容的解析,讀者可以更好地了解數據結構與算…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 瘦臉算法 Python 原理與實現

    本文將從多個方面詳細闡述瘦臉算法 Python 實現的原理和方法,包括該算法的意義、流程、代碼實現、優化等內容。 一、算法意義 隨着科技的發展,瘦臉算法已經成為了人們修圖中不可缺少…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29

發表回復

登錄後才能評論