计算机科学与Python编程导论_MIT 学习笔记(一)

课程目标
学会用计算机的算法机械表达来完成挑战
学会计算机思维
找到方法论
分解为机械式的步骤
转化为计算机可执行的步骤

计算机的能力
计算
存储

计算机可以完成的计算:
内置函数
我们自己创造的函数

即使计算机能够高速运行、大量储存,仍然需要好的算法来优化计算。

计算机的局限:
在非常局部、微观的问题上(如:预测接下来1小时的天气),需要非常大的运算量来建模,这反过来也能帮助实现加密。
图灵停机问题(类似理发师悖论),说明存在无法在有限时间内通过计算机计算的问题。

什么是计算?
什么是知识?
事实陈述:给与已有知识,但不能给与新知识
方法论:不能给与已有知识,但可以给与新知识

一个程序性知识(方法论)的例子:
x 的平方根 y 是满足 yy=x 的数”
这是一个事实陈述,可以用来验证数 y 是否是 x 的平方根,但不能教我们如何寻找 x 的平方根。
公元前一世纪Herion of Alexanderia创造了一个算法:
1 初始猜测 g
2 如果 gg x 足够接近,则停止,且说 g 就是答案
3 如果 g 不满足上述条件,则取 g=average(g,xg)
4 重复2、3直到停止

def root(x):
    y=1
    for i in range(1000):
        if y*y-x<0.001 and y*y-x>0:
            break
        else:
            y=(y+x/y)/2
    print(y)

如何实现算法?
1 为算法制造一个机器——“固定程序计算机”
例如:
计算器
1941年,Atanasoff和Berry为解线性方程制造的计算机
1940s,图灵为破译密码制造的bombe计算机
2 既能计算又能存储的计算机——“存储程序计算机”

存储程序计算机的构造
预先定义的原语指令
简单的数学和逻辑
简单的数字字符检测
在机器内移动数据的能力
存储好后
翻译器
按顺序浏览指令并执行
通过检测,在任务完成时使指令流停止
下图中的计算机由以下三部分组成:
内存(存储程序和数据)
控制单元(对已执行的命令计数)
算术逻辑单元(检测特定值的大小是否符合停止或跳转程序的条件)
计算机科学与Python编程导论_MIT 学习笔记(一)_第1张图片

什么是原语?
图灵完备性(Turing complete):6种原语

语言三要素:
基本元素(数字、字符、简单运算)
语法
语义:告诉我们表达式的意思
静态语义:例如:123/’abc’是不符合语义的运算
形式语义(全语义):同时满足语法和静态语义有效的句子的意义(没有歧义)

好的程序语言会发现错误(bug)并指导你改正
但当程序满足语法和语义有效时,就不会报错,并拥有一定意义,但不一定是我们想要的意义。
这类问题通常这样出现:
计算机停止运作
计算机一直运作直到我们主动停止
计算机给出非我们预期的答案

总结:
我们的目标是学习程序语言的语法和语义,构造合法的程序来用计算机做有趣的事
本质上是将方法论翻译为计算机可以理解的语句,来使计算机为我们服务
优化方法论的思维

你可能感兴趣的:(学习笔记,算法)