C++数据结构学习笔记(一)

计算机科学 = 计算科学?

计算机只是工具,计算才是最终的目的。(即如何有效和高效的计算) 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)//复位

点赞