- 6
- 0
- 约1.08万字
- 约 25页
- 2018-06-03 发布于福建
- 举报
c语言经典算法的设计方法
c语言经典算法设计方法
经典算法设计方法
一、什么是算法
算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。算法常常含有重复的步骤和一些比较或逻辑判断。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模n的函数f(n),算法执行的时间的增长率与f(n)的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。时间复杂度用O(数量级)来表示,称为阶。常见的时间复杂度有:O(1)常数阶;O(log2n)对数阶;O(n)线性阶;O(n2)平方阶。
算法的空间复杂度是指算法需要消耗的空间资源。其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。
二、算法设计的方法
1.递推法
递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。设要求问题规模为N的解,当N=1时,解或为已知,或能非常方便地得到解。能采用递推法构造算法的问题有重要的递推性质,即当得到问题规模为i-1的解后,由问题的递推性质,能从已求得的规模为1,2,…,i-1的一系列解,构造出问题规模为I的解。这样,程序可从i=0或i=1出发,重复地,由已知至i-1规模的解,通过递推,获得规模为i的解,直至得到规模为N的解。
【问题】阶乘计算
问题描述:编写程序,对给定的n(n≦ 100),计算并输出k的阶乘k!(k=1,2,…,n)的全部有效数字。
由于要求的整数可能大大超出一般整数的位数,程序用一维数组存储长整数,存储长整数数组的每个元素只存储长整数的一位数字。如有m位成整数N用数组a[]存储:
N=a[m]×10m-1+a[m-1]×10m-2+…+a[2]×101+a[1]×100
并用a[0]存储长整数N的位数m,即a[0]=m。按上述约定,数组的每个元素存储k的阶乘k!的一位数字,并从低位到高位依次存于数组的第二个元素、第三个元素…。例如,5!=120,在数组中的存储形式为:
3 02 1…
首元素3表示长整数是一个3位数,接着是低位到高位依次是0、2、1,表示成整数120。计算阶乘k!可采用对已求得的阶乘(k-1)!连续累加k-1次后求得。例如,已知4!=24,计算5!,可对原来的24累加4次24后得到120。细节见以下程序。
#include stdio.h
#include malloc.h
#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[0]?a[i]+b[i]:a[i])+carry;
a[i]=r;
carry=r/10;
}
if(carry)
a[++m]=carry;
}
free(b);
a[0]=m;
}
void write(int*a,int k)
{
int i;
printf(M!=,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();
}
}
2.递归
递归是设计和描述算法的一种有力的工具,由于它在复杂算法的描述中被经常采用,为此在进一步介绍其他算法设计方法之前先讨论它。能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1时,能直接得解。
【问题】编写计算斐波那契(Fibonacci)数列的第n项函数fib(n)。
斐波那契数列为:0、1、1、2、3、…,即:
fib(0)=0;
fib(1)=1;
….
fib(n)=fib(n-1)+fib(n-2)(当n 1时)。
写成递归函数有:
int fi
您可能关注的文档
- “眼球对眼球的权利”——对质权制度比较研究_民法论文_法律论文__5414.doc
- “铁屋子”或“家”的民族寓言——论中国电影的一个原型叙事结构及其变形_电视电影论文_艺术论文__4563.doc
- 《催醒术》——1909年发表的“狂人日记”_现当代文学论文_文学论文__264.doc
- 《春望》五种英译文的比较研究,英语翻译学论文-_3168【论文全集】.doc
- “整理国故运动”与国学研究的学科重建_国学论文_哲学论文__3348.doc
- 侦查程序的正当化是我国法治建设发展的需要,侦查论文-_182【论文大全】.doc
- 从文化视角研究《红楼梦》中委婉语的翻译,英语翻译学论文-_194【论文大全】.doc
- 中国左翼文学、京海派文学及其在当下的意义_现当代文学论文_文学论文__195.doc
- 信息技术与教育相整合的进程,教育管理论文.doc
- 大学语文课程建设的一些建议,语文教育论文-_577【论文大全】.doc
最近下载
- 移动通信作业及答案.pdf VIP
- 2025年湖南劳动人事职业学院高职单招笔试语文试题库含答案解析(5套共100道单选合辑).docx VIP
- 10KV与以下架空配电线路工程施工与验收-规范.pdf VIP
- 2023年4月哈尔滨市哈三中2023届高三高考三模英语试题卷及答案-(word精校版).docx VIP
- 兄弟系列一体机拆卸重组与润滑操作指南.pdf VIP
- 2026年度江苏建筑职业技术学院单招《数学》试题附完整答案详解(全优).docx VIP
- 【高考物理】回归课本:基础知识填空(含答案)8.1静电场.pdf VIP
- 2026年春季湘教版小学六年级下册信息科技教学计划含进度表.docx VIP
- PyTorch与深度学习实战-全套PPT课件.pptx
- 教科版科学四年级下册全册教学课件(2025年4月修订).ppt
原创力文档

文档评论(0)