Lecture 1. What is computation?
文章目录
随堂阅读资料
- Chapter 1 and 2.1
- PPT Lecture 1
作业
- Problem Set 0
正式笔记
Topics 课程主题
- 理解数据结构 data structure
- represent knowledge with datastructures
- iteration and recursionas computational metaphors
- 优化代码风格
- abstractionof procedures and data types
- organize and modularize systems using object classes and methods
- 如何评估代码性能
- different classes of algorithms, searching and sorting
- complexity of algorithms
What does a computer do 计算机功能
- 基本性能
- 计算
- 存储
- 计算分类
- 已有语言:C、汇编
- 自行编程计算
- computer only knows what you tell them
不同类型的知识
Declarative Knowledge 陈述性知识
陈述性知识描述了一个事实。如:我会在课程结束前赢得纸牌游戏。
Imperative Knowledge 程序性知识
程序性知识描述了具体的步骤、算法
如:
- 先放盐
- 在放葱
- 再爆炒
- 出锅装盘
更具体的例子
陈述性知识
x的平方根是y,代表着 y ∗ y = x y*y=x y∗y=x
程序性知识
要求x的平方根y:
- 先猜一个数,g
- 如果g*g足够接近x,停止计算,并返回g为答案
- 否则,做一次新猜测,新猜测的值是g和x/g的平均
- 用新猜测再次尝试,循环直至答案足够接近。
What is a recipe? 怎样才算一个配方(程序性知识)?
- 拥有有序(线性)的步骤(控制流flow)
- 能够明确执行到任一步骤(控制流的进度)时,是否需要repeat/continue/loop
- 一个明确的量化指标,用于评定程序何时停止
计算机的特性
计算机的作用
- 装有固定程序的计算机
- 计算器
- 可存储的计算机
- 存储和执行指令的机器
计算机的结构
-
存储模块、控制单元、逻辑计算单元
-
输入、输出
-
control unit用于计算程序执行次数(c语言for循环中常用的i参数)
-
arithmetic logic unit 执行具体操作,如加减乘除
Stored Program Computer 内储程序计算机
- 有明确的指令存储在电脑中
- 根据已定义的基础运算进行编程
- 算数计算与逻辑计算
- 简单测试(用于判断)
- 移动数据、赋值数据
- 根据已定义的基础运算进行编程
- 按特定指令执行的程序
- 用test测试来控制程序执行进度(repeat/continue/loop)
- 完成后结束程序
程序的基本原则
-
图灵提出的6大原则
- Right: Move the Machine’s head to the right of the current square
- Left: Move the Machine’s head to the left of the current square
- Print: Print a symbol on the current square
- Scan: Identify any symbols on the current square
- Erase: Erase any symbols presented o the current square
- Nothing/HALT: Do nothing
-
现代的计算组合更加丰富,可以通过抽象化一些已有步骤来形成新计算原则
-
任何在某个语言中的计算可以在其他程序语言中被完整还原
-
所有语言的计算能力是等价的
-
硬件资源调用和执行时间可能会有区别
-
创建一个recipe的要素
- 一个程序语言提供了基本操作命令(加减乘除等)
- 表达式:指利用基本命令组合实现的内容
- 无论是表达式,还是计算过程,在程序语言中都有其价值或意义
关于编程语言
基本数据结构/元素
- 英语:以单词为元素
- 程序语言:以数字、字符串、简单操作符为基本元素
语法问题
- 二者都有语法规范性
- 很容易检测语法错误
Static Semantics 静态语义规则
- 语法没问题,但没有意义/解释不通
- 有些软件可以检查出来
- 可能会导致意料之外的操作
歧义性
- 英语有歧义性,但程序语言不能有。
- 但程序语言可能会出现执行情况与预想情况截然不同的可能
- 程序中断
- 程序不停止
- 程序给出非期望结果
关于Python
Program 程序
- 程序:指一系列的定义和命令
Objects 对象
- 程序主要针对数据对象进行操作
- 对象的类型决定了可对其进行的操作
- 对象分为标量和非标量
- 标量如数字、字符
- int
- float
- boo
- NoneType
- 可用type()函数查看对象类型
- 可用int()/float()对数据类型进行强制转换
- 非标量如数组
- 标量如数字、字符
Print 输出
print()
Expressions 表达式/语句
-
表达式将对象和操作符结合在一起,形成表达式
-
表达式有其值,该值有数据类型
-
基本表达式格式
<object><operator><object>
-
基本的操作符(算子)
- 加减乘除
- %取余
- **次方
-
算子优先级
- **次方
- *乘号
- /除号
- 加减乘除,由左到右
变量的定义
- 等号在程序中是赋值命令
- 赋值语句执行后,该变量和值之间有了联系
- 可通过使用变量来调用所设值
- 为什么要定义变量?
- 方便重复使用
- 方便调整程序(如修改参数)
- 增强程序可读性
pi=3.1415926
编程和数学的差别
- 主要在于等号的用法,编程中等号用于赋值,数学中的等号=在编程里为双等号==
- 编程中还可以用i=i+1更新i值,在这个过程中,i变量与原来的值x的联系被取消,与原来的值x+1建立了新联系