计算机科学 = 计算科学?
计算机只是工具,计算才是最终的目的。(即如何有效和高效的计算) by Dijkstra
计算 = 信息处理
借助某种工具,遵循一定的规则,以明确而机械的形式进行
计算模型 = 计算机 = 信息处理工具
实例1
Hailstone(n) 序列具有以下性质
{1} n<=1
{n}U Hailstones(n/2) n偶
{n}U Hailstone(3n+1) n奇
我们来计算Hailstione这个序列的长度
int Hailstone(int n)
{
int length = 1;
while(1<n)
{
(n%2)? n=3*n:n/=2;
length++;
}
return length;
}
DSA : 数据结构和算法
DSA分析:
正确性:算法功能与要求一致?
成本:运行时间+所需存储空间
TA(P)=算法A求解问题实例P的计算成本
因为实例过多,因此需要归纳概括
划分等价类:问题实例的规模,往往是决定计算成本的主要因素
TA(n)=用算法求解某一问题规模为n的实例,所需要的计算成本
讨论特定算法A,计作T(n)
T(n) = max{T(p)| |p| = n}
在规模同为n的所有实例中,只关注成本最高者
图灵机模型
TM:Turing Machine
Tape(带) 一次均匀划分为单元格,各注有某一字符,默认为‘#’
Alphabet(字符表) 字符有限
Head(读写头) 总是对准某一单元格,并可读取和改写其中的字符,每经过一个节拍,可转向左侧或右侧的邻格
State TM总是处于有限状态中的某一种,每经过一个节拍,可(根据规则)转向另一种状态
Transition Function : (q,c;d,L/R,p) 若当前状态q且当前字符为c,则将当前字符改写成d;转向左侧/右侧的邻格;转入p状态,一旦转入特定的状态‘h’,则停机
实例2
使用图灵机将二进制非负整数+1
算法:
全‘1’的后缀反转为全‘0’
原最低位的‘0’或‘#’反转为‘1’
# # x x x 0 1 1 1 1 # #
# # x x x 0 0 0 0 0 # #
# # x x x 1 0 0 0 0 # #
(<,1,0,L,<) //左行,1->0
(<,0,1,R,>) //掉头,0->1
(<,#,1,R,>)//进位
(>,0,0,R,>)//右行
(>,#,#,L,h)//复位