算法与程序

在之前我们给大家科普过了,算法 = 控制流程 + 数据结构

数据结构是数据的组织形式。在描述算法的时候,我们并不知道实际要用这个算法来处理的数据是什么(其实也本没有必要知道),我们只需要知道将来要处理的数据是如何组织的就可以了。

基于数据的组织形式,定义一个运算/操作的历程,这就是算法的实现。算法实现的结果,就是程序。

当我们有了具体的数据要处理的时候,就要:

1)运行已经编写好的,实现了算法的程序(静态); 2)将具体数据按照既定的数据结构组织好,作为输入传输给运行时程序(动态)。

运行时程序会按照既定的步骤处理接收到的输入数据,产生运算结果,并输出。

如此说来,也可说算法是静态程序的内容,而算法 + 数据 = 动态程序

算法与编程

算法和编程,又是怎样的关系呢? 其实,很简单一句话就能给大家说明白 那就是所谓编程,就是实现算法的过程!!!

对编程的误解

很多同学在开始有意向学习编程的时候,很粗糙的认为学习编程就是学编程语言,以为学会了编程语言的句法、语法就会 编程了。

NO!这样想就错了,这里有一个很重大的误解,就是简单地把编程语言等同于自然语言了。

大家都有学习外语的经历吧,回头想想,中小学学英语的时候,我们要做的事情不过就是:认字母,背单词,记语法——什么时态、语态、主格、宾格、定语从句、状语从句等等。

每每被动词变形、虚拟语气,和英语阅读时半篇儿不认识的单词搞得七荤八素的时候,就觉得:记住了足够多的单词和语法,自然就会用英语听说读写了。

至于听说读写的内容,我们并不用操心,反正我们每天中文也要说话、阅读、写作,学会了英语,不过就是用哇哩哇啦的发音和曲里拐弯的字母来代替声韵母、方块字做同样的事情罢了。

中文英文(或者任何一种自然语言)最基础的部分都是用来应对日常生活的。我们每个人都对自己的日常生活十分熟悉,对于需要输入(听、读)输出(说、写)的内容早已掌握。而自然语言的形式又特别复杂,所以在学习外语的初中级阶段,大都会将绝大部分精力放在词汇语法上。

但是编程语言这种东西,它的作用不是用来日常聊天或者生活用语的。

虽然不管那种语言第一个程序都是 “Hello World” ,但那是运行环境因为自己能够正常实现功能而对世界发出的欢呼,并不是人与人之间打招呼。

那么多编程语言,无论学其中哪一种,我们都不是为了去问邻居“吃了吗”,跟超市导购讨价还价,或者撩哪个心仪的妹子/汉子……

点击了解更多《编程算法同步入门》

学习编程的目的

那我们学编程是用来干什么的呢?

从微观角度说,计算机能够处理的“物料”是数据,所有计算机能做的事情,都要通过数据的变化来体现。因此,如果我们编写程序的目的不是为了让数据发生变化那就毫无意义。

让数据发生变化就需要运算,而运算的过程就是算法。

从宏观角度说,算法是对解决某类问题/完成某类任务的方法的描述。人类发明计算机是用来解决问题的,如果写出来的程序不能解决问题,这个程序就不应该存在。

因此,任何有存在价值程序,必然都实现了算法。我们学编程就是为了实现算法的。

算法是编程的核心!

经典算法

说到这里,有些人可能要抬杠了:

人类要解决的问题无穷无尽,我堆砌一些符合编程语言词法句法的代码,让它们能在运行时跑起来。然后就说这个程序解决的就是让我能写出一个程序的问题,它不也是个算法吗?

人生苦短,文字游戏在这里玩不通,也没必要去制造悖论~

固然人类要解决的问题千奇百怪,有些问题事到临头也许确实要做点明知徒劳也不得不为之的处理。但毕竟我们现在是在学习阶段嘛,学习阶段就应该珍惜时光,尽量在最短的时间内学会能处理计算机世界中最常遇到的问题的算法

计算机从被发明出来到现在半个多世纪的时间里,虽然它能够提供的服务日益翻新,但其实有一些逻辑层面的基础问题,在大多数应用领域都会用到。许多应用层繁多的花样,最终对应的都是共同的基础问题

计算机领域的科研人员、开发者,在几十年的工作中,针对一些历史悠久,应用广泛,经常高频出现的问题,研发出了对应的精致、高效的算法。这些算法我们称为经典算法

本门课程要学习的就是这些算法中的一部分。

经典算法著作

计算机专业讲述算法的经典书籍主推下面这两部:

1. 《编程的艺术》

《编程的艺术》,书名英文 The Art of Computer Programming,简称为TAOCP。

作者Donald Knuth,中译高德纳,是1974年图灵奖得主。目前隐居深山,专注写作本书。

本书预计出版七卷,到目前为止只出版了前三卷(各一册),和第四卷的 A 分卷(第四卷计划分为ABCD四个分卷),A分卷又包括0-4五个分册。

第一卷首次出版于1968年,第四A卷的五个分册已经在2005- 2011陆续出版。目前只有第一卷有中译本。

这是一本算法的集大成之作,虽然还未完成,但已经被列为20世纪最佳12部学术专著之一, 与“量子力学”、 “相对论”、 “博弈论”等重要著作并列经典。

如果立志研究计算机算法,这部著作是经典中的经典无疑。即使是职业程序员,能够通读第一卷也是凤毛麟角,真能把第一卷读下来,都学会,在工业界差不多就可以算是算法大拿了。

这部书对于初学者并不合适,不过既然要学习计算算法,总要知道它。

关于本书还有个有意思的事情:

高德纳宣布任何发现书上的错误并写信告知他的人,都能得到256美分——刚好是十六进制的一美元 (one hexadecimal dollar)。

高德纳确实履行了他的诺言,每位发现错误并指出的读者,都能得到一张2.56美元(或其倍数,如果能同时发现不止一个错误的话),有高德纳签名的支票。

在现今已经50岁往上的那代程序员里,高德纳的支票是一种很酷的收藏品,也是自身能力的背书。作者的一位前老板就有这样一张支票,他把它放在一个镜框里,摆在自己办公桌上。

2.《算法导论》

《算法导论》,英文名 Introduction to Algorithms,首次出版于1990年,此后又出版了第二版(2001)和第三版(2009)。

三版都有中译本:

原本预计2014年要出第四版,不过被推迟到了2019年。

本书在首版发行后的二十多年中 ,迅速成为了美国许多大学算法课的课本,并在学术论文中被引用了超过万次!

第一版的作者是三个人: Cormen , Leiserson , Rivest ,再版时又加上了第四位作者Stein,他们的姓氏首字母缩写CLRCLRS已经成了一个业界术语,专门用来指代本书的作者。

《算法导论》不仅讲解了经典算法,算法的数学性质,还介绍了这些算法的设计技术和应用领域。具体的算法过程用伪代码书写,避免了和某一种编程语言的绑定。

无论是用做学习算法的教材,还是在实际工作中应用算法的参考,都是极好的。

不过原版1300多页,中译本780页——这样的砖头读一遍还是蛮辛苦的。另外,正是因为没有和具体的编程语言绑定,如果要实现其中算法,则需要能够自己编写实际的代码,也就是要预先具备编码能力再读本书为好。

对于编程和算法都是零基础的入门者,本书还是有些艰深。

小贴士:虽然本书各章自成体系,可以作为独立的学习单元,但如果一个人能够直接选出基础重点章节进行自学,那就不是零基础了,是吧~

点击了解更多《编程算法同步入门》

分享交流

我们为本课程付费读者创建了微信交流群,以方便更有针对性地讨论课程相关问题。入群方式请到第 2-1 课末尾添加小助手的微信号,并注明「同步入门」。

阅读文章过程中有任何疑问随时可以跟其他小伙伴讨论,或者直接向作者提问(作者看到后抽空回复)。你的分享不仅帮助他人,更会提升自己。

1-4课:程序、编程和算法之间到底有什么三角关系?相关推荐

  1. 极客新闻——18、领导和下属之间到底是什么样的关系?

    本文笔记全部来自<极客新闻>--新鲜的技术资讯.权威的趋势剖析.别样的技术洞察 有的人说,上下级之间是一种指挥和执行的关系,也有的人说是协商和落实的关系.要想搞清楚领导与下属之间的最佳关系 ...

  2. 程序员与算法的羁绊,是几世以前就定下的

    程序员 与算法 本章的标题既然是"程序员与算法",就必然要涉及一个基本问题,那就是"程序员是否必须会算法". 这是一个充满争议的问题,虽然并不像"生存 ...

  3. AI一分钟 | 教育部公布高中新课标,编程、算法思维成必修内容;李彦宏否认百度会“All in AI”

    一分钟AI 李彦宏表示自己做事一向留有余地,否认百度会"All in AI". 教育部发布最新高中课程改革方案,对学生在编程.算法.人工智能和开源硬件方面的要求大幅度提升. 罗永浩 ...

  4. 视频教程-程序员必备算法课!(揭秘淘宝购物车算法)-机器学习

    程序员必备算法课!(揭秘淘宝购物车算法) CSDN讲师名下集合了诸多业界知名讲师的公开课内容,内容涵盖人工智能.大数据.区块链等诸多热门技术领域的最佳技术实践,聚合美团.滴滴.AWS.科大讯飞等知名企 ...

  5. 学习QGIS Python API(应用程序编程接口)

    目录 前言 说明 API (Application Programming Interface) 摘要 关于QGIS Python API 解密C ++文档 组织QGIS Python库 qgis.c ...

  6. C语言13567星号如何输出,c语言程序编程心得

    c语言程序设计 本课介绍c语言程序设计的基本方法和基本的程序语句. 从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构.分支结构.循环结构.这三种基本结构可以组成所有的各种复杂程序.c语言提供 ...

  7. 程序员面试算法_程序员的前20个搜索和排序算法面试问题

    程序员面试算法 大家好,如果您正在准备编程工作面试或正在寻找新工作,那么您知道这不是一个容易的过程. 在您职业的任何阶段,您都必须幸运地接到电话并进行第一轮面试,但是在初学者方面,当您寻找第一份工作时 ...

  8. Python小白的数学建模课-17.条件最短路径算法

    条件最短路径问题,指带有约束条件.限制条件的最短路径问题.例如: 顶点约束,包括必经点或禁止点的限制: 边的约束,包括必经路段.禁行路段和单向路段:无权路径长度的限制,如要求经过几步或不超过几步到达终 ...

  9. python六十七课——网络编程(基础知识了解)

    网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...

  10. 让你提前认识软件开发(14):程序中的算法

    第1部分 又一次认识C语言 程序中的算法 [文章摘要]         算法(Algorithm),是程序的灵魂.著名计算机科学家.图灵奖获得者沃思曾提出过一个公式:数据结构+算法=程序. 可见,算法 ...

最新文章

  1. [Mongodb]删除指定字段
  2. python好学吗 老程序员-使用 Python 会降低程序员的编程能力吗?
  3. 记录一次无聊的(经历了Nodejs - Shell - C)的探索问题过程
  4. 信息学奥赛一本通 1965:【14NOIP普及组】珠心算测验 | 洛谷 P2141 [NOIP2014 普及组] 珠心算测验
  5. 拓扑排序 Codeforces Round #290 (Div. 2) C. Fox And Names
  6. 论window10如何获得最高权限
  7. php error unexpected,PHP异常Parse error: syntax error, unexpected错误解决方法
  8. 在计算机中汉字能否排序,你不得不知的Excel表格中汉字多种排序方法
  9. uni-table单元格中预览图片:阻止冒泡
  10. raptor流程图编程
  11. appium的安装+连接夜神模拟器控制app
  12. java 简单的聊天室_Java简单聊天室
  13. #高级语言 各种开发软件介绍
  14. 今年职高计算机数学高考试题,2018-2019高职高考数学试题
  15. 使用FFmpeg实现rtmp播放和音视频同步
  16. “顾客至上,服务至上”??
  17. WPS excel VBA 常用功能代码
  18. Excel·VBA统计表生成函数及应用实例
  19. 树莓派4b 安装摄像头
  20. 力软快速开发平台推荐功能之APP开发

热门文章

  1. hog特征的matlab实现
  2. ios虚拟服务器降级,iOS降级教程
  3. shiro+springMVC文档
  4. php时间戳转换成日期格式,PHP时间戳和日期格式相互转换
  5. 草图大师su安装程序无法进行的解决办法。
  6. matlab进化树的下载,mega(进化树构建软件)下载 v7.0.14免费版
  7. 生信软件的下载与使用方法总结
  8. realtek是什么意思_Realtek高清晰音频管理器 全解析
  9. JAVA-生命游戏多线程
  10. linux命令行 teamview,linux centos 命令行 安装 teamviewer 启动 停止