【数据结构】笔记(1)——计算和算法

来源:互联网 发布:httpclient 默认端口 编辑:程序博客网 时间:2024/06/06 16:49

计算

“人与动物的根本区别在于理性,计算则是理性的一种重要而具体的形式.”

计算机是人类从事计算的工具,是抽象计算模型的具体物化,是人脑思维的拓展和延伸

Q:如何求解实际问题?
典型流程和不二法门:
1. 经过深入思考和分析获得对问题本质的透彻理解
2. 按照长期积淀而成的框架和模式设计出合乎问题内在规律的算法
3. 选用、改进或者定制足以支撑算法高效实现的数据结构
4. 在真实的应用环境中充分测试、调教和改进


计算相关的基本概念:
[ ] 算法构成的基本要素
[ ] 算法效率的衡量尺度
[ ] 计算复杂度的分析方法和界定技巧
[ ] 算法设计的基本框架和经典模式


算法

学习数据结构的目的就是实现高效而低耗的计算

计算=信息处理
借助某种工具,按照一定规则,以明确而机械的形式进行

算法:在特定的计算模型下,旨在解决特定问题的指令序列

输入:待处理的信息
输出:经过处理的信息
正确性:的确可以解决实际问题
确定性:任意算法都可以描述为一个由基本操作组成的序列
可行性:每一基本操作都可以实现
有穷性:对于任何输入,经过有穷次操作,都可以的到输出
……

算法有穷性的反例

int hailstone(int n){                 int length = 1;                cout << "Hailstone[0]=" << n << endl;                 while (1<n )                {                                ( n % 2==0) ? (n /= 2):(n = 3 * n + 1);                                cout << "Hailstone[" << length << "]=" << n << endl;                                length++;                }                 return length;}

还不能证明,对于任何数,得到的结果都是有穷的,o(╯□╰)o
事实上,程序≠算法
例如:死循环或者栈退出

如何设计优化?
Q:什么事好算法/好的计算过程?
1 正确性:

2 健壮性(鲁棒性):在不正常的输入时,确保程序的正确退出
3 可读性:结构化+命名准确+注释……
4 效率:速度尽可能快,存储空间尽可能少

Algorithms + Data Structures = Programs
( Algorithms + Data Structures ) * Efficiency = Computation


To measure is to know.
If you cannot measure it, you can not improve it.
—— lord Kelvis

算法分析

1 正确性:算法功能与问题的要求是否一致?&数学证明 ……
2 成本:运行时间+所需要的存储空间
如何度量?度和比较?

划分等价类
通常问题规模接近,相应的计算成本也比较接近
随着问题规模的增加,计算成本通常也相应增加

实验统计不太可行,原因:

为了给出客观的评价,需要抽象除一个理想的平台或者模型
不再依赖上述种种具体的因素,从而直接准确地进行描述和测俩

理想模型之图灵机

无限的纸带、无限的字符、有限的状态

Transition Function(q, c, d, L/R, p)
@param q:当前状态
@param c:当前字符
@param d:将要填入的字符
@param L/R:填入后向左移或者向右移
@param p:下一个状态

通过指定特定的规则,可完成特定的操作

理想模型之RAM模型

无论是算法的初始输入、中间结果还是最终输出,在计算机中都可以以数据的形式表示。对于数据的存储、组织、转移及变换等操作,不同的计算模型和平台环境所支持的具体形式不尽相同,其执行效率将直接影响和决定算法的整体效率。
数据结构这一学科正是以”数据“这一信息的表现形式为研究对象,旨在建立支持高效算法的数据信息处理策略、技巧和方法。要做到根据实际的应用需求自如地设计、实现和选用适当的数据结构,必须首先对算法设计的技巧以及相应的数据结构的特性了然于心。

0 0
原创粉丝点击