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/n/132133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
NCQE的头像NCQE
上一篇 2024-10-03 23:50
下一篇 2024-10-03 23:50

相关推荐

  • java强转,java强转double

    本文目录一览: 1、在java中什么是强制类型转换! 2、Java中的强制类型转换是如何转换的? 3、java 强制类型转换的规则是什么? 4、JAVA如何进行强制类型转换 5、J…

    编程 2024-12-02
  • 提高Python代码运行效率的技巧:使用整数缓存

    一、什么是整数缓存 Python中的整数是不可修改的对象,每次对整数进行重新赋值时,都会创建一个新的对象,浪费了内存,降低了程序的执行效率。为了解决这个问题,Python引入了整数…

    编程 2024-11-24
  • Python List Sorting: 提高数据检索效能的方法

    一、Python List排序的应用场景 Python是一门强大的编程语言,广泛应用于各行各业。其中,List是Python中最常用的数据结构之一,并且Python的List拥有强…

    编程 2024-12-03
  • 详解sqrtm函数

    一、sqrt命令 sqrt命令是MATLAB中用于计算给定数字的平方根的函数。该命令可以用于以下两种方式: 1.对普通数字的开方运算,例如:sqrt(4)的结果是2。 2.对数组元…

    编程 2024-12-03
  • java中的常用语句,java中!的用法

    本文目录一览: 1、JAVA语句 2、JAVA有哪些实用的基本语法 3、什么是java基本语句? 4、Java的常用输入输出语句? JAVA语句 String : 字符串类型 一、…

    编程 2024-10-04
  • 深入理解GroupJoin

    GroupJoin是LINQ用于实现两个序列之间的查询的操作符。它将两个序列中的元素按照指定的键或多个键关联起来,生成一个负责的结果序列。本文将从多个方面对GroupJoin进行详…

    编程 2024-10-04
  • Oracle毫秒:从多个方面详解

    一、Oracle毫秒数 在Oracle数据库中,日期类型使用毫秒数(以1970年1月1日为基准点,即UNIX_TIMESTAMP)作为存储方式。因此,我们可以通过获取时间的毫秒数来…

    编程 2024-12-04
  • Git修改邮箱

    一、为什么需要修改邮箱? Git是分布式版本控制系统,它记录了每次提交代码的作者信息,包括作者的邮箱地址。当我们合作开发一个项目时,对于不同的开发者,他们的邮箱地址是不同的,在代码…

    编程 2024-10-31
  • 关于php钉钉sdk使用方法的信息

    本文目录一览: 1、php 使用钉钉机器人推送消息 2、thinkphp怎么引用钉钉配置文件包 3、钉钉群会话怎么用php实现,用text消息 4、如何使用sdk来快速开发app …

    编程 2024-11-05
  • 关于java程序设计精编教程第1章的信息

    本文目录一览: 1、JAVA自学看什么书好? 2、java大学实用教程(习题讲解答案) 3、JAVA程序设计这门课一共有多少章节? JAVA自学看什么书好? 1、《Head Fir…

    编程 2024-12-08

发表回复

登录后才能评论