高中数学在算法设计中的应用

来源 :数学学习与研究·教研版 | 被引量 : 0次 | 上传用户:skylfy
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
   随着计算机技术的高速发展,数学知识在计算机技术发展中,尤其是在算法设计中处于极其重要的地位.同时,用数学的思维解决各种程度算法难题也是十分重要的. 在计算机程序设计中,采用高效而简洁的算法可以提高程序的稳定性和可读性,不同的算法中蕴涵着不同的数学思想,将数学思想融入到算法构造以及程序设计中是十分重要的.
   1. 算法描述
   算法概念是计算机科学的基础. 许多通用问题都有算法,而设计高效的算法对于开发大型计算机系统起着至关重要的作用. 简单地说,所谓算法就是定义良好的计算过程,它取一个或一组值作为输入,并产生一个或一组值作为输出. 亦即,算法就是一系列的计算步骤,用来将输入数据转换成输出结果.
   数学是自然科学的基础,计算机科学实际上是数学的一个分支. 计算机理论其实是很多数学知识的融合,算法更是数学知识的合理和巧妙的运用. 高中数学作为数学的基础,其基本思想也在算法中得以体现和应用.
   2. 算法性能分析
   算法的空间复杂性和时间复杂性是评价算法的主要指标. 程序的空间复杂性是程序从开始执行到完成所需的存储空间的数量;程序的时间复杂性是程序从开始执行到完成所需的计算时间.
   程序所需的存储空间包括固定的空间需求和可变的空间需求. 任意程序的总的空间需求S(p) = c + Sp(I). 其中,c是一个常数,表示固定的存储空间需求,在分析程序的空间复杂性时,通常只关心可变的空间需求.
   程序p所需时间T(p)是其编译时间和运行时间的总和. 其中编译时间不依赖于问题实例的特征.因此,真正关注的只是程序的执行时间Tp. 例如,假定有一个进行数字加法和减法的简单程序,令n表示该程序的实例特征,可将Tp(n)表示为Tp(n) = CaADD(n) + CsSUB(n) + ClLDA(n) + CstSTA(n),其中,Ca,Cs,Cl,Cst是常数,表示执行每个操作所需的时间,而ADD,SUB,LDA,STA表示执行实例特征为n的程序时所需的加法,减法,读取数,存入数操作的次数.
   3. 数学的应用
   在时间复杂度中,定义f(n) = O(g(n)),当且仅当存在正的常数c和 n0,使得对于所有的n,当n ≥ n0时,有f(n) ≤ cg(n). 我们通过数学证明,来分析一些算法的复杂性.
   定理1 如果f(n) = amnm + … + a1n + a0,则f(n) = O(nm) .
   对于所有的n ≥ 2,都有3n + 2 ≤ 4n,所以有3n + 2 = O(n). 对于所有的100n + 6 ≤ 101n,所以100n + 6 = O(n). 对于所有的n ≥ 5,都有10n2 + 4n + 2 ≤ 11n2,所有10n2 + 4n + 2 = O(n2). 由于对于任意常数c和所有的n ≥ n0, 3n + 2大于c,所有3n + 2 = O(1). 同样的,10n2 + 4n + 2 ≠ O(n2) . 我们通过数学证明来验证定理1.
   证明 f(n)≤ |ai|ni ≤ nm |ai|ni-m ≤nm |ai|,当n ≥ 1 时,f(n) = O(nm) .
   由定理1可知,对于任意c1,c2,c3都为非负常数,f1(n) = c1n2 + c2n + c3 = O(n2),f2(n) = c1n + c2 = O(n) . 一般情况下,复杂度为O(n2)比复杂度为O(n)的程序执行得快. 对于小的n值,两个程序可能执行得都比较快. 当n ≤ 97时,有n2 + 2n + 1<100n,而当n > 97时,n2 + 2n + 1>100n,我们把n = 97称为平衡点. 可以证明,如果平衡点为0,那么复杂性为O(n)的程序相比于复杂性为O(n2)的程序,总以较快的速度运行. 据此,我们得出如下结论.
   推论1 复杂性为O(ni)的程序比复杂性为O(nj)的程序运行得快,其中i和j为非负数,且i < j .
   4. 实际问题
   在互联网和手机搜索,如果要找附近的咖啡馆,那么搜索引擎该怎么处理这个请求呢?最简单的办法就是把整个城市的咖啡馆都找出来,然后计算出它们的所在位置与你之间的距离,再进行排序,然后返回最近的结果. 算法的伪代码如下:
   FindNearestCoffeeBar(n)
   near = 1;
   For i = 2 to n
   Do calculate distance between searcher and coffee bar i
   If coffee bar i is nearer than coffer bar near
   Then near = i;
  Coffee bar near is search result.
   此时对于每次搜索,都需要找到每个咖啡馆,因此整个算法的复杂度为O(n) .
   这么做也许是最直观的,但绝对不是最迅速的. 如果一个城市只有为数不多的咖啡馆,那么这么做应该没什么问题,反正计算量不大. 但如果一个城市里有很多咖啡馆,又有很多用户都需要类似的搜索,那么服务器所承受的压力就大多了. 在这种情况下,我们该怎样优化算法呢?
   首先,我们可以把整个城市的咖啡馆做一次“预处理”. 比如,把一个城市分成若干个“格子(grid)”,格子数目为m,每个咖啡馆唯一分布在一个格子中. 此时搜索算法的伪代码如下:
   FindNearestCoffeeBar(n)
   near_grid= 1;
   For i = 2 to m
   Do calculate distance between searcher and grid i
   If coffee bar i is nearer than grid near_grid
   Then near_grid = i;
   grid near_grid is found grid.
   find the nearest coffee bar in the found grid
   near = 1;
   For i = 2 to n
   Do calculate distance between searcher and coffee bar i
   If coffee bar i is nearer than coffer bar near
   Then near = i;
   Coffee bar near is search result.
   我们先在大范围内搜索,将问题域缩小,然后在小范围内求解. 如何划分格子才能使我们的运算量最小呢?
   假设总共有n个咖啡店,咖啡店均匀分布,我们将咖啡店划分为m个格子,则每个格子内的咖啡店数目为 ,则算法的运行次数为 m +.
   根据数学知识,sum ≥ 2 ,当且仅当m =时,即m =时,取等号,此时我们算法的复杂度为O( ). 根据推论1,优化的算法比原算法运行速度快.
   5. 结语
   算法既是计算机理论和实践的核心,也是数学的最基本内容之一. 高中数学作为我们学习数学的基础,其不仅在算法中不断体现和应用,同时,更是组合数学、密码学、计算机图形学等计算机课程的基础. 很多数学基础很好的人,一旦熟悉了某种计算机语言,他可以很快地理解一些算法的精髓,使之能够运用自如,并可能写出时间与空间复杂度都有明显改善的算法. 因此,我们在高中阶段就应该形成“算法思维”,培养自己的数学修养.
  
  注:“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”
其他文献
目的观察依那普利与倍他乐克联合治疗扩张型心肌病合并心力衰竭患者的临床疗效与安全性。方法95例扩张型心肌病心衰患者随机分为两组:A组采用常规治疗,B组采用依那普利和倍他乐
对于带有不完全椭球约束的生长曲线模型Y=XBZ+ε,ε~(0,σ2VI),X(B-B0)Z′NZ(B-B0)′X′≤σ^2In,本文在矩阵损失函数(d-KBL)(d-KBL)′下给出了KBL在类齐次线性估计类LH与非齐次线性估
目的探讨中西医结合治疗膝骨性关节炎的临床观察总结。方法对本院56例患骨性关节炎患者治疗方法及效果进行回顾性总结分析。结果门诊膝骨性关节炎56例,总有效率为85.8%。结论中
学困生的成因是多方面的:有家庭的,有社会的,有智力方面的,也有非智力方面的,有先天的,也有后天的. 但大部分学困生都是后天形成的,下面就对后天形成的学困生问题谈谈自己的看法. 初中数学学困生的形成主要表现在以下几个方面:   1. 基本概念、定理模糊不清:不能用数学语言再现概念、公式、定理. 不看课本,不能说明概念的体系,概念与概念之间联系不起来. 例如:轴对称与轴对称图形,他们分不清哪个概念是探
根据各类农作物遗传变异特点和繁育方式的不同,介绍育种家种子的不同生产方法以及田间种植保存方法.并对育种家种子的室内保存技术进行了探讨.
1999年5月,国务院决定南方小麦和劣质米退出保护价敞开收购,从此拉开了调整稻米结构的序幕.两年多过去了,我省调整稻米结构的实践和经验应该总结和思考,笔者仅此提出一些不成
目的探讨糖尿病患者血清T3、FT3水平的变化及其临床意义。方法用放射免疫法测定受试者血清T3、FT3的水平,用己糖激酶法测定血糖。结果糖尿病患者,尤其是有并发症者,血清T3、FT3
揭示了二阶变系数线性微分方程和Riccati方程之间的内在联系,证明了在对这两类方程求解时可以相互转化,从而对二阶变系数线性微分方程和Riccati方程的求解提供更多的思路和途径
从辅助课堂教学和开设数学实验两个方面,探讨了数学软件在高职高等数学教学中的应用.在教学过程中恰当借助数学软件,既激发了学生学习数学的兴趣,又培养了学生的创新精神,可
新一轮的课改将学科综合课程提到非常重要的环节。学科综合课程可以打破分科课程单一学科的桎梏,将不同的学科综合起来,使学生对同一知识可以有比分科课程时更多的角度来理解