浅谈算法--像计算机人一样思考算法

浅谈算法--像计算机人一样思考算法

算法?

听到算法,有的人先想到的是recipe(菜谱),有些人想的是计算方法(解题策略),还有些人更直接的想到一个字–难。那么,算法的正确打开姿势是什么呢?先来看看百度百科和维基百科对算法的额定义:

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。—百度百科

算法(algorithm),在数学(算学)和计算机科学之中,为任何一系列良定义的具体计算步骤,常用于计算、数据处理(英语:Data processing)和自动推理。—维基百科

百度百科的说法完美对应了recipe,维基百科则完美对应了计算方法。这恰恰是当我们作为不同身份的时候两种看待方法:作为使用者的时候,算法就像是recipe;作为学习者的时候,算法则是计算方法。

例如,求最大公因数的欧几里得算法,当我们在计算GCD的时候,算法的步骤就如同菜谱一样,我们只需要按部就班的一步步的计算;当我们在学习的时候,他就是得出问题解的方法,我们需要知道为什么这么做以及它的正确性,可行性,有穷性。因此才引发了所谓的NP-hard问题的讨论。

基础?

你会发现,几乎所有的算法书的开始都是讲数学基础,可是学到正儿八经的算法的时候,你发现除了复杂性分析偶尔用到简单的计算以外,几乎没有用到任何数学知识。这又是为什么呢?

当你问一个程序员或者老师,学习算法最好的教材是什么?你有90%的可能性得到《算法导论》这个名字,还有9%的可能性得到《计算机程序设计艺术》这个名字。毋庸置疑,这两个就是计算机领域如圣经一般存在的大部头,但是也都有个共性,那就是大家对算法的印象—难。因为这两本书中对算法的论述不在像平时看到的recipe了,它更像是对一个问题的计算方法的全面阐述,用到大量的数学知识,这就是数学之于算法的重要性之一。

我们都知道计算机科学的核心就是算法和数据,而算法的基础是数学,这也就是为什么计算机科学依旧是数学的分支,著名的计算机科学家、全世界最伟大的程序员之一的高德纳也为计算机科学的数学基础特地写了一本书《具体数学》来阐述数学在计算机科学中的应用,包括集合论,逻辑学,函数论等等都是算法分析的基础。

由来?

就历史而言,算法最早出现在《周髀算经》、《九章算术》。特别是《九章算术》,给出四则运算、最大公约数、最小公倍数、开平方根、开立方根、求素数的埃拉托斯特尼筛法,线性方程组求解的算法。三国时代的刘徽给出求圆周率的算法:刘徽割圆术。这些都是最早时期的算法,所以我们可以看到,对于算法并不是像我们这样,学习某一些算法后,然后去解决问题,而是碰到了某些问题,才会去思考如何解决这个问题,由此衍生的算法。所以说算法源自于问题,这就又牵扯到一个我们耳熟能详的数学建模了。如果说算法是数学方法,那么它能解决的问题一定也是数学问题。这就需要一个转换,那就是把生活的问题转变为数学问题。

布尔代数的强大之处就在于他把对错的逻辑变成了二进制的问题,在有后来的晶体管问世,这就造就了今天计算机科学的发展。所以抽象思维就是计算机思维的重要部分。而抽象思维就是数学建模,如何把生活中的问题变成图灵机可计算的问题才是最重要的一步。

在谈及编程亦如此,把题目中说的实际情况变成一个你知道的,或者不知道的数学模型,这样再和你知道的或者不知道的算法去对应,最后变成一条条的高级语言或者低级语言的指令。这一步步的抽象就是代码生成的过程。

算法!

提高读者的问题求解能力,使读者能够理解算法设计的过程和思想:一是强调算法设计的创造性过程,注重算法设计背后的创造性思想,而不拘泥于某个具体算法的详细讨论;二是将算法设计类比于定理归纳证明,揭示了算法设计的基本思想和本质。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值