算法——程序的灵魂

通过前面的学习,了解到C语言的特点,看到了简单的C语言程序。现在从程序的内容方面进行讨论,也就是一个程序中应该包含什么信息,或者说为了实现解题的要求,程序应当向计算机发送什么信息。

一个程序主要包括以下两方面的信息:

(1)、对数据的描述。在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式,这就是数据结构。

(2)、对操作的描述。即要求计算机进行操作的步骤,也就是算法。

数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。打个比方,厨师制作菜肴,需要有菜谱,菜谱上一般应说明:a、所用配料,指出为了做出顾客所指定的菜肴,应该使用那些材料;b、操作步骤,指出有了这些原料,应按什么样的步骤进行加工,才能做出所需的菜肴。

没有原料是无法加工成所需菜肴的,而对同一些原料可以加工出不同风味的菜肴。作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法)。著名计算机科学家沃斯(Nikiklaus Wirth)提出一个公式:

算法+数据结构=程序

直到今天,这个公式对于过程化程序来说依然是适用的。

实际上,一个过程化的程序除了以上两个主要要素之外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示。因此,算法、数据结构、程序设计方法和语言工具4个方面是一个程序设计人员所应当具备的知识,在设计一个程序时要综合运用这几方面的知识。

算法是解决“做什么”和“怎么做”的问题。程序中的操作语句,实际上就是算法的体现。显然,不了解算法就谈不上程序设计。

什么是算法?

做任何事情都有一定的步骤,例如你想从北京去天津开会,首先要去买火车票,然后按时乘坐地铁到北京站,登上火车,到天津站后坐汽车到会场参加会议;你要买电视机,先要选好货物,然后开票、付款、拿发票、取货、打车回家;要考大学,首先要填志愿表,交报名费,拿到准考证,按时参加考试,得到录取通知书,到指定学校报到注册等。这些步骤都是按一定的顺序进行的,缺一不可,次序错了也不行。从事各种工作和活动,都必须事先想好进行的步骤,然后按部就班地进行,才能避免产生错乱。实际上,在日常生活中,由于已养成习惯,所以人们并没有意识到每件事都需要事先设计出“行动步骤”。例如吃饭、上学、打球和做作业等,事实上都是按照一定的规律进行的,只是人们不必每次都重复考虑它而已。

不要认为只有“计算”的问题才有算法。广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。例如描述太极拳动作的图解,就是“太极拳的算法”。一首歌曲的乐谱,也可以称为该歌曲的算法,因为它指定了演奏该歌曲的每一个步骤,按照它的规定就能演奏出预定的曲子。

对同一个问题,可以有不同的解题方法和步骤。例如,求1+2+3+……+100。有人可能先进行1+2,再加3,再加4,一直加到100,而有人采取这样的方法:100+(1+99)+(2+98)+……+(49+51)+50=100+49×100+50=5050.还可以有其他方法。当然方法有优劣之分。有的方法只须进行很少的步骤,而有些方法则需要较多的步骤。一般来说,希望采用方法简单、运算步骤少的方法。因此,为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。

计算机算法可分为两大类:数值运算算法和非数值运算算法。数值运算的目的是求数值解,例如求方程的根、求一个函数的定积分等,都属于数值运算范围。非数值运算包括的面十分广泛,最常见的是用于事务管理领域,例如对一批职工按姓名排序、图书检索、人事管理和行车调度管理等。目前计算机在非数值运算方面的应用远远超过了在数值运算方面的应用。

由于数值运算往往有现成的模型。可以运用数值分析方法,因此对数值运算的算法的研究比较深入,算法比较成熟。对各种数值运算都有比较成熟的算法可供选用。人们常常把这些算法汇编成册,或者将这些程序存放在磁盘或光盘上,供用户调用。例如有的计算机系统提供“数学程序库”,使用起来十分方便。

非数值运算的种类繁多,要求各异,难以做到全部都有现成的答案,因此只有一些典型的非数值运算算法(如排序算法、查找搜索算法等)有现成的、成熟的算法可供使用。许多问题往往需要使用者参考已有的类似算法的思路,重新设计解决特定问题的专门算法。

 

搜索微信公众号【balayihuier】或扫描下方二维码关注微信公众号,资深软件工程师带你手把手撸代码,从此走上人生巅峰,迎娶白富美!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值