2、算法(Algorithm)是指完成一个任务所需要的具体步骤和方法。也就是说给定初始状态或输入数据,能够得出所要求或期望的终止状态或输出数据。算法常常含有重复的步骤和一些比较或逻辑判断。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
c语言中的算法是指:一系列解决问题的清晰指令,用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。通俗说就是解决问题的方法和步骤。
描述算法的例子:
问题:从上海去到北京。
其中的算法:做汽车、做飞机、或者徒步。
问题:喝茶。
其中的算法:先找到茶叶,再烧一壶开水,然后将茶叶放到杯子里,将开水倒入杯中,等茶叶泡好。
问题:开车。
其中的算法:首先要打开车门,驾驶员坐好,插上车钥匙,发动汽车。
算法的五个重要的特征:有穷性(Finiteness)、确切性(Definiteness)、输入项(Input)、输出项(Output)、可行性(Effectiveness)。
算法的时间复杂度:算法的时间复杂度是指执行算法所需要的计算工作量。一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做。T(n)=Ο(f(n))因此,问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。
算法的空间复杂度:算法的空间复杂度是指算法需要消耗的内存空间。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。可以从正确性、可读性、健壮性(容错性)来分析。
/*Bezier曲线的Casteljau算法*/float decas(degree,codff,t)
float coeff[]
float t
int degree
{
int r,i
float t1
float codffa[10]
t1=1.0-t
for(i=0i<=degreei++)
coeffa[i]=coeff[i]
for(r=1r<degreer++)
for(i=0i<=degree-ri++)
{
coeffa[i]=t1*coeffa[i]+t*coeffa[i+1]
}
return (coeffa[0])
}
/*B样条曲线—deBoor分割算法*/
float deboor(degree,coeff,knot,u,i)
float coeff[],knot[]
float u
int degree,i
{
int k,j
float t1,t2
float coeffa[30]
for(j=i-degree+1j<=i+1j++)
coeffa[j]=coeff[j-i+degree-1]
for(k=1i<=degreek++)
forj=i+1j>=i-degree+k+1j--)
{
t1=(knot[j+degree-k]-u)/(knot[j+degree-k]-knot[j-1])
t2=1.0-t1
coeffa[j]=t1*coeffa[j-1]+t2*coeffa[j]
}
return (coeffa[i+1])
}
/*Bezier曲线的Horner算法*/
float hornbez(degree,coeff,t)
int degree
float coff[]
float t
{
int i,n
float fact,t1,aux
t1=1.0-tfact=1.0n=1
aux=coeff[0]*t1
for(i=1i<degreei++)
{
face=fact*t
n=n*(degree-i+1)/i
aux=(aux+fact*n*coeff[i])*t1
}
aux=aux+fact*t*codff[degree]
return aux
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)