何为算法
笔者曾在今年三月末复试面试时被问到:什么是算法?当时一脸懵逼,完全不知道该如何回答。最后是用自己所想的即兴发挥乌拉乌拉说了一通。“算法是通过一些规则运算整理后后使得计算机能够读懂,从而可以与人进行交互的一种规则”,说真的,我当时也不知道我在说什么。对自己的回答很不满意,大概面试官也认为马马虎虎吧!经常挂在嘴边的术语竟让我们如此不堪,那么何为算法吗?
算法在数据结构中时这样定义的:算法可以理解为由基本运算及规定的运算顺序所构成的完整的解题步骤,或者看成按照要求设计好的有限的确切的计算序列。
这种定义读者就很绕口,理解起来也不容易,给人感觉看过之后没啥感觉。最近看到一种比较容易理解的说法,与大家分享。
引例:计算平方根的方法之一是牛顿方法。假设你想要知道a的平方根。如果以任意一个估计值x开始,可以使用方程 y=(x+a/x)/2 获得一个更好的估计值。
如:
def squareRoot(x,a):
while True:
print("打印测试:",x)
y=(x+a/x)/2
if y==x:
break
else:
x=y
return x
s=squareRoot(x=25,a=64)
print(s)
#测试结果:
牛顿方法是算法的一个例子:它是解决一类问题的机械化化过程。
要理解算法是什么,从一个算不上算法的东西开始可能更简单。我们在学习个位数相乘时,都背诵过乘法表。实际上,这种知识不算是算法,你只是记住了许多个特别的答案。
但是,在一些运算过程中,我们可以使用一些小技巧来偷懒。如:计算 n 和 9 的乘积,这时可以让 n-1 作为十位数,10-n 作为个位数。这个小技巧是就算任意个位数和9的乘积的通用方法。这算是个算法。
相似的,我们学过的进位加法、借位减法以及长除法都是算法。算法的特点之一就是它们不需要任何聪明才智就能执行。它们是一个机械化的过程,其中每一步都依照一组简单的规则接着上一步进行。
也即,算法可以作为形式语言(形式语言是人们为了某种用途而设计的语言);
但是我们自然而然、或者下意识所做的事情,用算法表达却很困难。我们都能理解自然语言,但是至今还没有人能够结束我们是怎么做到的,至少没办法用算法解释。
注: 自然语言是指人们所说的语言,如英语、法语。它们不是由人设计而来的,而是自然演化而来。
上述部分内容引用:ThinkPyhton:How to think like a Computer Scientist
从一名不羁的码农开始,欢迎关注我的公号