Day 01:什麽是演算法?

演算法这个名字给人一种充满艰深、繁复计算的感觉,不像我们生活中可以或需要学会的东西。

但其实演算法在生活中无所不在。

广义的演算法用白话来说,就是完成任务的一套步骤或规则

也就是说它的重点不是问题或答案本身的描述,而是解决问题的方法。从这点来看,一份食谱、修理机器的说明、任何申请流程,也都是演算法,因为它一步一步让你完成任务。

或者日常生活中可能有类似这样的情境:我们可能会说,某件事A用了很笨的方法花了一天才完成,B可能换个方式一小时就完成了。虽然很白话,但这种关於做事情方法的描述其实跟演算法的讨论很接近。

演算法的确切定义...尚在讨论中?!

不过要说演算法听起来跟数学计算很有关系也没错。

很久很久以前,久到西元以前,世界各地都开始出现演算法的纪录:各种做除法、求出公因数、圆周率等等的规则。後来英文演算法(algorithm)一词的出现也跟九世纪一位数学家有关。

乃至於现在,如果上维基百科查询演算法,它的基本定义还是着重在数学或电脑科学上:演算法是一套定义明确、电脑可施行的有限指示。如果再多翻看几本教科书或科普书籍,会看到演算法的一些特点反覆出现:

输入(input):可以接收值作为输入,也就是像完成任务所需要的原料。

输出(output):可以产出结果,例如一个问题的解法。

精确性:步骤与结果的定义明确,没有歧义。

有限性:会在一定步骤内结束。

可实现:在生活中具体可行,不是抽象或设想的方法。

有了那麽多定义、正当感觉越来越了解演算法在干嘛的时候,却又会看到惊人的事实:维基百科在写完一堆演算法的历史、范例、应用之後,最後写到「目前各方仍在努力把演算法的定义修正得更精确,关於演算法的更多定义请见algorithm characterizations」,而这页一开头就说,演算法还没有一个普遍接受的正式定义,学者们还在努力中...

也就是说,当我们正为演算法的定义头痛的时候,科学家们也正在烦恼同样的事。

回到我们眼前的演算法

有人可能会想,姑且不论最最精确的定义是什麽,根据已经讲到的这些定义,那我们平常写的好多程序码也都是透过一些规则、将输入转输出、一步一步在完成任务,那也可以称作是演算法吗?其实是的。

那要研究各种程序码才能学会演算法吗?

打开很多书籍或课程,虽然有些陌生的符号和表达,但会发现演算法的研究往往更倾向於想法上的讨论而非特定程序语言的执行细节,一方面是不用因琐碎的细节失焦,另一方面也体现同样的演算法概念,基本上可以在任何程序语言中实现。

所以作为程序和数学的初级学徒,虽然每天的文章只能思考一两个问题、离在程序中实践演算法可能还有一大段距离,但这30天希望能透过不要太深奥的例子,来看看一些因为有效、有趣等等原因,而无所不在的演算法。


<<:  30天轻松学会unity自制游戏-关卡场景制作

>>:  不只懂 Vue 语法: 在 Vue 2 为何无法直接修改物件型别资料里的值?

HTML

之前上了一个课程关於网页程序的(HTML+CSS)然後呢想写一点小网页 可是写到一半发现了一个问题,...

Day 2【Project 分析、Metamask】Why is Microsoft Word the best IDE for programming?

【前言】 这篇文章要来分析我负责的整个项目,并且准备所有我需要的东西! 【(使用者看见的)前端与(...

DAY10 - 如何挑选自学的教材

前言 今天是铁人赛的第十天,要来开始说说大叔的前端之路 并且说明我都看那些教学文件或影片 我是去年中...

Day 21 中场休息,来做点酷东西(重构 class)

今天做了 重构程序码,写了一个基本的 component class 让 ProjectInput ...

总结与心得

经过漫长的环境设定与软件安装後 终於把 SQL Server Failover Cluster 基本...