当前课程知识点:计算思维导论 > 第八单元 > 8.1 算法与程序 > Video
大家好 这一节讲算法与程序
在具体讲算法和程序之前
我们先弄清楚他们与计算思维
到底是什么关系
大家知道计算思维
可分为广义计算思维和狭义计算思维
从这个角度来说我们认为
算法更偏向于广义计算思维
程序则属于狭义计算思维
或者换个说法
算法属于计算思维
程序则属于计算机思维
那么什么是算法
什么是程序呢 简单的说
算法就是解决问题的方法和步骤
我们知道面对同一个问题
可以有多种不同的求解方法
不同的方法求解的步骤自然也不一样
针对某一个方法
把求解步骤描述出来得到的就是算法
从计算思维的角度
可以把算法分为广义和狭义两类
前者广泛应用于工作和生活方方面面
后者则是程序的灵魂
生活中广义的算法很多
比如做一个色香味俱佳的菜
你找来这么一个菜谱对着做
这个菜谱就是广义的算法
该算法的执行者是人
再比如公司的客户投诉流程图
也可以看做一个广义的算法
因为他明确的描述了
客户投诉的处理办法和步骤
由于广义算法的执行者是人
所以算法中有可能出现一些不确定内容
比如菜谱中的少许 少量 适当的等等
那么什么是狭义的算法呢
狭义的算法面对的是机器
也就是计算机
算法的每一个步骤
必须明确无误
不能出现大概也许
差不多
这样模糊或者模拟两可的内容
否则机器就理解不了
另外狭义算法通常用一种
简洁明了的方法来表示
先看一个简单的例子
比如现有一瓶红墨水
一瓶蓝墨水
要求把两瓶墨水交换一下
也就是把原来红墨水的瓶子改成蓝墨水
把原来装蓝墨水的瓶子
改装红墨水
我们该怎么做呢
方法很简单
找一个空瓶子来倒它就可以了
具体的步骤如下
这个算法我们是用自然语言来描述的
大家容易理解
但显得有点啰嗦
如果我们用电量a表示红墨水瓶
里面装有红墨水
用电量b表示蓝墨水瓶
里面装有蓝墨水
用变量t表示一个空瓶
用这么个符号
表示把一个变量的值
放到另外一个变量之中
那么上述算法可以这样来表示
这就是狭义的算法
再看一个例子
假设要求1+2+3+4一直加到100
等于多少
这个题看起来比较麻烦
但实际上它可以通过重复做一个
加法运算也就是循环来完成
这就是对应的算法
这个算法很简单
首先给变量n赋初值100
然后给变量sum赋初值0
然后再给变量i赋初值1
然后就执行一个循环
在这个循环里边
首先把i的值累加进sum
然后i的值加1
如果i还小于n就继续循环
一直循环一百次
最后我们就得到了计算结果
那么什么是程序呢?
程序就是计算机语言
把求解特定问题的算法描述出来
的指令或语句的有穷序列
因此程序有两个重要的特点
一是必须严格遵守宿主语言的语法
错一个标点符号都不行
二是能被计算机执行
因此要用计算机求解问题
必须学会算法设计
掌握一门计算机语言
比如c或c++语言
然后用计算机语言来描述算法
得到程序最后交给计算机执行
才能得到想要的解
这就是产生一百个随机数
并进行排序的c语言程序
如果您还没有学习c语言
现在看不懂没有关系
先大致了解下有个印象
以便以后学习
那么最后我们关注下算法和程序的关系
这个是解决同一个问题的算法和程序
相对比一遍先有个直观感性的认识
如果我们把一颗枝繁叶茂的大树
看成是一个程序的话
那么把它的树叶摘掉
把一些细小的树枝砍掉
剩下来树的主干部分
就可以看成是算法了
不妨再看一个比喻
在绘画艺术领域
有写实和写意之分
写实就是尽量按照绘画对象来画
画的越像越好
写意主要体现绘画对象的特点或者特征
典型的漫画就充分体现了写意的特点
在这里程序有点像写实
而算法就更像写意
再说明算法和程序的关系时
美国计算科学基础一书
简明的指出
算法代表对问题的解
而程序则是算法在计算上的特定的实现
由此可见
一个有效的程序首先要求
有一个有效的算法
评价程序质量的标准
诸如清晰 高效 可读性
可修改性和可维护性等
无一不受到算法的影响
所以算法设计实际上可说是
程序设计的核心必须给予足够的重视
另外算法独立于任何具体程序设计语言
一个算法可以用多个程序设计语言来实现
好这一节就介绍到这
谢谢大家
-1.1 计算思维及其教育
--Video
-2.1 计算是什么
--Video
-2.2 计算与自动计算
--Video
-2.3 计算机及其计算本质特征(I)
--Video
-2.4 计算机及计算的本质特征(II)
--Video
-3.1 数的表示与模拟计算
--Video
-3.2 数的表示与数字计算
--Video
-3.3 二进制加法运算的机器化
--Video
-3.4 “九九归一”的加法运算
--Video
-3.5 二进制之优越性及问题与代价
--Video
-4.1 从数学危机到图灵机
--Video
-4.2 图灵机的计算能力
--Video
-4.3 什么问题都能计算吗?
--Video
-4.4 冯•诺依曼机及其发展与演化
--Video
-4.5 从算盘到图灵机——机械计算的本质
--Video
-4.6 电子计算机——透过现象看本质
--Video
-5.1 思维可机械计算吗(I)
--Video
-5.2 思维可机械计算吗(II)
--Video
-6.1 量子理论
--Video
-6.2 量子计算机
--Video
-7.1 人类求解问题之过程
--Video
-7.2 基于计算(机)的问题求解过程
--Video
-7.3 面向过程的结构化设计方法学
--Video
-7.4 面向对象之方法学
--Video
-7.5 面向对象技术
--Video
-7.6 抽象
--Video
-7.7 计算学科中的抽象
--Video
-7.8 时间与空间及其相互转换
--Video
-7.9 技术层面的其他方法学
--Video
-7.10 认知层面的其他方法学
--Video
-8.1 算法与程序
--Video
-8.2 算法设计方法——枚举
--Video
-8.3 算法设计方法——递推
--Video
-8.4 算法设计方法——递归
--Video
-8.5 算法设计方法——分治
--Video
-8.6 算法设计方法——仿生
--Video
-9.1 机器间的通信方式
--Video
-9.2 数据转发方法
--Video
-9.3 网络分层体系结构
--Video
-9.4 有趣的对称加密技术
--Video
-9.5 难解的非对称加密技术
--Video
-9.6 数字签名及其应用
--Video
-9.7 从自然智能到人工智能
--Video
-9.8 符号主义的基本思想
--Video
-9.9 连接主义Ⅰ
--Video
-9.10 连接主义Ⅱ
--Video
-9.11 行为主义的基本思想
--Video
-9.12 机器翻译的愿景与困难
--Video
-9.13 峰回路转的自然语言处理
--Video
-9.14 信息传输中的问题与挑战
--Video
-9.15 重复传输与冗余编码
--Video
-9.16 校验与校验和
--Video
-9.18 自纠错技术及应用
--Video
-9.19 两种简单的数据压缩方法
--Video
-9.20 哈夫曼编码
--Video
-9.21 数据压缩极限与LZ压缩方法
--Video
-9.22 大海捞针的搜索引擎
--Video
-9.23 网页排序方法(PageRank)
--Video
-10.1 计算文化
--Video
-期末考试--作业