c语言算法设计初步,c语言程序设计 算法初步.ppt

c语言程序设计 算法初步

第3讲 算法初步 一、解题方法 二、算法举例---穷举法 三、算法举例---递推与迭代法 四、良好的编程风格 一、解题方法 分析问题,想出策略;自顶向下,逐步求精。 例如,编写一个通讯录程序 通讯录需要存储什么数据?存在什么地方? 程序的功能 输入一个新名字 删除一个名字 显示整个通讯录 搜索一个名字 进入、退出程序等 ……。具体到每一项功能 菜单,将这些功能分类别设计 用计算机解决问题的步骤 分析问题 选择解决方案 编写程序 调试程序 测试程序 数据结构 数据对象:分析所研究问题,提炼出性质相同的数据元素。 对象之间的关系 通讯录数据 用于管理的数据 在此基础上,想出处理的方法---算法 算法 算法是指用计算机解决问题的程序或步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之内完成。 算法的特征: 确定性 逻辑性 有穷性 用程序流程图描述算法 描述算法的方法有很多 程序流程图:图形化的描述程序执行过程(图是工程师的语言) 使得思想集中于算法设计,不受语言细节干扰 再依据算法,用语言编写程序 程序流程图的图形符号:P60 例:求一元二次方程ax2+bx+c=0 的解 #include #include main( ) { int a, b, c,t; printf( "Input a,b,c:" ); scanf( "%d%d%d", &a, &b, &c ); t = b*b - 4*a*c; if (t<0) printf( "No solution\n" ); else if ( t==0 ) printf( "X = %lf\n", -b/(2.0*a) ); else { double t0; t0 = sqrt( (double)t ); printf( "X1 = %lf, X2= %lf\n", (-b+t0)/(2*a), (-b-t0)/(2*a) ); } } 二、算法举例---穷举法 列出所有可能情况,逐个排查,从中找出符合条件的解。 关键是明确问题所有可能性,注意可能情况是有限的。 用什么基本控制结构? 优点?缺点? 例:判断给定整数是否是素数 问题分析 利用素数的定义来判别。对于给定整数x,用2~x-1之间的每个整数试除,若都不能整除则是素数,否则不是素数。 一次试除成功(不能整除),并不能说明x是素数,只有所有试除都成功,才能断定x是素数;但一次试除失败(能整除),则可断定x不是素数 例:判断给定整数是否是素数 解决方案 数据结构设计 整型变量存储素数:int x ; 算法设计 穷举的范围---循环开始和结束:2~x-1 数据元素的关系---循环的步进:1 逐个排查的过程---循环的内容:试除 #include main( ) { int x, t; printf( "Enter an integer: " ); scanf( "%d", &x ); for (t = 2; t main( ) { int x, y, z;/* 公鸡、母鸡、小鸡的个数 */ for( x=0; x<=100/5; x++ ) for( y=0; y<=100/3; y++ ) for( z=0; z<=100; z++ )

算法设计与分析》目录: 第一篇引入篇 第1章算法概述1.1用计算机求解问题与算法 1.1.1用计算机求解问题的步骤 1.1.2算法及其要素和特性 1.1.3算法设计及基本方法 1.1.4从算法到实现 1.2算法描述 1.2.1算法描述简介 1.2.2算法描述约定 1.2.3一个简单问题的求解过程 1.3现代常用算法概览* 1.3.1压缩算法 1.3.2加密算法 1.3.3人工智能算法 1.3.4并行算法 1.3.5其他实用算法 第2章算法分析基础 2.1算法分析体系及计量 2.1.1算法分析的评价体系 2.1.2算法的时间复杂性 2.1.3算法的空间复杂性 2.1.4NP完全性问题 2.2算法分析实例 2.2.1非递归算法分析 2.2.2递归算法分析 2.2.3提高算法质量 第二篇基础篇 第3章算法基本工具和优化技巧3.1循环与递归 3.1.1循环设计要点 3.1.2递归设计要点 3.1.3循环与递归的比较 3.2算法与数据结构 3.2.1原始信息与处理结果的对应存储 3.2.2数组使信息有序化 3.2.3数组记录状态信息 3.2.4大整数存储及运算 3.2.5构造趣味矩阵 3.3优化算法的基本技巧 3.3.1算术运算的妙用 3.3.2标志量的妙用 3.3.3信息数字化 3.4优化算法的数学模型 3.4.1杨辉三角形的应用 3.4.2最大公约数的应用 3.4.3公倍数的应用 3.4.4斐波那契数列的应用 3.4.5递推关系求解方程 习题 第三篇核心篇 第4章基本的算法策略4.1迭代算法 4.1.1递推法 4.1.2倒推法 4.1.3迭代法解方程 4.2蛮力法 4.2.1枚举法 4.2.2其他范例 4.3分治算法 4.3.1分治算法框架 4.3.2二分法 4.3.3二分法变异 4.3.4其他分治方法 4.4贪婪算法 4.4.1可绝对贪婪问题 4.4.2相对或近似贪婪问题 4.4.3贪婪策略算法设计框架 4.5动态规划 4.5.1认识动态规划 4.5.2动态规划算法设计框架 4.5.3突出阶段性的动态规划应用 4.5.4突出递推的动态规划应用 4.6算法策略间的比较 4.6.1不同算法策略特点小结 4.6.2算法策略间的关联 4.6.3算法策略侧重的问题类型 习题 第5章的搜索算法 5.1搜索概述 5.1.1及其术语 5.1.2搜索及其术语 5.2广度优先搜索 5.2.1算法框架 5.2.2广度优先搜索的应用 5.3深度优先搜索 5.3.1算法框架 5.3.2深度优先搜索的应用 5.4回溯法 5.4.1认识回溯法 5.4.2回溯法算法框架 5.4.3应用1——基本的回溯搜索 5.4.4应用2——排列及排列树的回溯搜索 5.4.5应用3——最优化问题的回溯搜索 5.5分支限界法 5.5.1分支搜索算法 5.5.2分支限界搜索算法 5.5.3算法框架 5.6 的搜索算法小结 习题 第四篇应用篇 第6章算法设计实践6.1循环赛日程表 6.2求3个数的最小公倍数 6.3猴子选大王 6.4最大子段和问题 6.5背包问题 6.5.1与利润无关的背包问题 6.5.2与利润有关的背包问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值