袁海根
摘 要:计算机编程与数学算法有直接的关系,通过数学理论、数学算法构建合适的数学模型,使不同的类能够转化为统一的数学模型,不断优化该数学模型的算法,设计合理的编程逻辑,通过逻辑继承解决复杂的问题,能够最大限度优化计算机编程,提高编程效率和程序运行效率。文章研究了数学算法对计算机编程的优化。
关键词:数学算法;计算机编程;优化;数学模型
数学算法是一种以数学模型为基础的理论知识,能够对计算机编程中的问题进行归纳总结和统一计算,以提高逻辑应用的效率,它是计算机编程的基础。计算机编程是从数学模型开始的,首先要根据具体问题进行抽象,以建立一个合理的数学模型,根据此模型设计一个算法,最后进行编程与调试,直至获得最终的正确解答,通过算法和数据结构组成了一个计算机程序。数学算法是对数学模型的计算,选择何种算法解决数学模型,直接关系到基于数学模型而建立的程序是否更为高效而准确,数学算法是优化计算机编程的关键环节[1]。
1 数学算法的含义
数学算法是一种归纳算法,在严格遵循相应数学原则与步骤的基础上,计算工作量,通过挖掘数学模型的规律,以最小的代价、最少的计算工作量、最快速的方法获得准确的结果。其根本思想在于研究并总结事物规律,最大限度减少工作量。计算机编程可以利用数学建模的思想,通过数学算法的选择以达到优化编程的目的,也可以通过数学算法精简代码程序来优化编程,提高程序运行效率[2]。
2 数学算法对于计算机编程的优化
2.1 运用数学算法简化C语言编程
C语言是计算机编程语言的基础,有广泛的应用范围,也是计算机高级编程语言的扩展基础,重复编译是C语言编程中的一个多发性问题,由于C语言是一种过程性程序语言,编程时,需要着重考虑代码逻辑运行过程的问题,但在编译时,会受自身性质的局限。数学算法能够对这一逻辑局限进行优化。通过数学算法对代码进行精简,达到精简代码程度的目的,进而提高过程中的效率。在算法编程前,逻辑分析是首要的工作,分析程序设计流程图,以体现程序运行的逻辑。如在C语言编程中,设计计算机的闰年程序是一个有代表性的编程工作,闰年包括了两个判断标准,即一年有366天或者2月份有29天。在指定一个年份时,要如何直接得知这个年份是否为闰年,就可以通过编译代码程序的形式来实现,并且需要运用数学算法来优化这一代码程序。数学算法中,不能被100整除而能够被4整除的数字就代表是闰年年份,也可以是100或400的倍数,对闰年的相应数学算法进行归类,直接编写为一个程序,以判断是否为闰年。在C语言编程中,数学算法能够将编程语言流程简化,利用数学算法的归纳、抽象思想将流程简单化,使这种面向过程的语言能够避免重复编译,防止时间冗余[3]。
2.2 引入数学模型思想优化面向对象语言的编程
面向对象语言即C++语言,这是一种基于C语言发展而来的编程语言。面向对象程序的设计语言是对对象进行封装,转变C语言在面向过程设计时的语言弊端,提高计算机编程效率的一种语言方式。这种语言利用了类模仿,并将封装原理融入其中,进一步提高了编程效率,类的继承与对象的封装都可以通过數学算法优化,以优化编程效率。设计面向对象的程序时,需要定义类、不同类的嵌套、封装和继承,当程序涉及继承处理时,会使编程工作量变得极为庞大。数学算法中建模思想则为精简工作量提供了有效的途径,利用数学模型进行统一计算,以解决问题。建立数学模型就能够将不同的类以统一模型来分类,再利用逻辑继承完成不同模型之间的程序设计,既优化了编程效率,又提高了程序实效性[4]。
3 数学建模与数学算法在优化高级语言编程时的应用
3.1 数学算法在优化计算机编程时的意义
在编写一个高级语言程序时,为减少运行消耗的时间,需要考虑几个问题:数学算法选择的策略、问题的规模、程序编译时生成的计算机代码质量、计算机执行指令时的速度。编译程序不同、计算机不同,都会影响到程序运行效率,因此,程序效率是无法用绝对时间单位来衡量的。除了程序运行相关的计算机软硬件等客观因素外,选择的算法就成了影响程序运行工作量的最大决定因素,通过优化算法达到减少程序运行时间、提高程序执行效率的目的,是一种适用性更高的方法。因此,数学算法是编程优化的关键步骤,为提高程序效率,必须选择合适的算法。评价一个算法的质量需要考虑到时间复杂性与空间复杂性,一个问题有多种算法,在选择算法时,首要考虑的是算法效率,基于算法效率再精简程序,使算法能够和程序有效结合,找出程序简单化与算法合理化之间的最大平衡,寻找最优算法,确保程序中的算法能够满足实际运算的目的[5]。
3.2 利用数学算法优化计算机编程的实例
如,要解决如下问题:1×2×3×……×n(1 000 首先,可以直接从1到n相乘,每次乘完观察一次结果数,将结果数后面的0全部去掉,并计下这些被去掉的0的个数,因为只求后面的0的个数,而不必考虑前面的数值,可以把前面和0没有关系的数字全部省略掉,保留所有有效数字,再相乘n次就能够得出0的个数。根据这种算法编写核心代码即可进行运算,这种算法能够解决问题,但可以看出,需要运算的次数很多,且这个乘法数列中,有很多数字无法生成0,因此,可以直接不考虑这些数字,而直接考虑会对0的生成个数产生影响的2与5的倍数,可以看出,这种算法并非最优化算法。 其次,根据第一种算法中的分析可以得出,1~9的所有位数中只有包含2×5、4×5、6×5、8×5这几个算式的能够生成0,因此,对0的计算个数能够产生的影响的只有5的倍数,含有2的分解数多于含有5的分解数,为简化程序,可以直接考虑这个数列中能够分解出多少个5,就代表能够产生多少个0,以这种算法编写程序较第一种算法减少了80%,较前一种算法更为优化,但从这一种算法的分析可以进一步观察,该数列中包含的5的个数就是相乘后结果末尾0的个数,因此,仍然可以继续对算法进行优化。
再次,直接求解含5的个数即可求解0的个数,采取层层剥皮法,第一次剥皮以5为步长作一次循环,即可求得含5的个数,这样就能将数列从5,10,15,……变为1,2,3,4,……。第二次剥皮以52为步长作二次循环,求解含有52的个数,将15,20,75,100,……通过一次剥皮变为5,10,15,20,……,再通过二次剥皮变成1,2,3,4,……。第三次剥皮则以53为步长作二次循环,求解含有53的个数,直至步长≥n时,就可以退出循环,将包含有5的方数的个数相加,就是0的个数。这种算法也就是最优算法,根据该算法编译核心程序如下:
Long num,i,n;
cout<<”please input n:”< cin>>n; i=n; num=0; while(i>=5) { I=i/5; num+=I; } cout<<”1*2*3*4*…*”< cout<<”the number of 0 is”< < 这3种算法每一次均有一定的优化,第一种方法需要100次外循环求解,而第二种方法则仅需要20次,第一种方法则仅为3次循环,只需要一层循环就能够求解,充分表明数学算法对于编程优化和程序运行效率的重要性[6]。 3.3 重视数据结构的设计,减少算法的空间复杂度 数学算法效率的提高与数据结构的合理性有重要的作用,能够提高算法对于变量访问的效率,降低变量所需存储空间。如,在稀疏矩阵中,当矩阵中存在过多元素时,就可以通过压缩矩阵存储空间来提高算法效率,利用行号、列号和元素三元组存储矩阵,能够大量压缩存储空间,避免二元组存储时对于矩阵中零元素的多余存储,并且能够在遍历矩阵时,降低遍历次数,算法将更为高效。还可以通过变量共享和联合体等方式,多个变量就能够共享同一段存储空间,这样就大大减少了算法的空间复杂度,依次编译程度,将会使程序运算更为高效,空间占用更为简单[7]。 4 结语 计算机的学习离不开数学理论与知识的学习和运用,当编程人员受限于计算机软硬件等客观条件限制时,要提高程序运行效率,就可以通过优化数学算法来优化编程,能够以很小的代价提高程序运行效率。通过数学模型的建立,利用数学算法对编程逻辑进行分析设计,不断优化数学算法,降低其时间复杂度、空间复杂度,最大限度解决重复编译的情况,提高编程效率。 [参考文献] [1]方建卫,何静.数学算法对计算机编程优化的分析与研究[J].赤峰学院学报,2014(21):84. [2]韩顶军.数学算法对计算机编程优化的分析与研究[J].电子制作,2014(24):84. [3]魏连秋.数学算法对计算机编程优化的分析与研究[J].科技创新导报,2010(30):3-4. [4]姚玉阁.数学算法对计算机编程优化的研究[J].電子技术与软件工程,2013(16):208. [5]曾镇东.数学算法对计算机编程优化的分析与研究[J].电脑知识与技术(学术交流),2016(7X):245-246. [6]欧阳玉峰,周莹莹.数学算法对计算机编程优化的研究[J].黑龙江科技信息,2016(6):146. [7]叶文婷.数学算法对计算机编程的优化[J].通讯世界,2015(9):234-235.