【数据结构】笔记(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模型
无论是算法的初始输入、中间结果还是最终输出,在计算机中都可以以数据的形式表示。对于数据的存储、组织、转移及变换等操作,不同的计算模型和平台环境所支持的具体形式不尽相同,其执行效率将直接影响和决定算法的整体效率。
数据结构这一学科正是以”数据“这一信息的表现形式为研究对象,旨在建立支持高效算法的数据信息处理策略、技巧和方法。要做到根据实际的应用需求自如地设计、实现和选用适当的数据结构,必须首先对算法设计的技巧以及相应的数据结构的特性了然于心。
- 【数据结构】笔记(1)——计算和算法
- 数据结构和算法笔记
- 数据结构和算法 笔记
- 数据结构和算法笔记
- 数据结构与算法——笔记(1)概念
- 数据结构笔记—从头开始理解KMP算法(1)
- 数据结构与算法分析笔记(1)第1章-数据结构和算法
- 0042算法笔记——【随机化算法】计算π值和计算定积分
- 0042算法笔记——【随机化算法】计算π值和计算定积分
- 数据结构与算法学习笔记--计算模型
- 数据结构和算法学习笔记——图论
- 求职系列笔记(1)---数据结构和算法
- 数据结构和算法学习笔记-1
- 1 数据结构和算法笔记目录
- 学习笔记1 数据结构和算法绪论
- Python 数据结构与算法——图出度和入度的计算
- Java 数据结构和算法 计算表达式问题
- 数据结构与算法分析笔记(7)——栈和队列
- 使用JDBC实现分页查询
- Hadoop学习笔记—19.Flume框架学习
- ORACLE常用命令
- B样条函数
- Web项目开发流程 PC端
- 【数据结构】笔记(1)——计算和算法
- ubuntu14.04 server的配置和杂项
- 基于RecyclerView的表情键盘滑动性能卡顿问题
- linux下调用mysql_query产生SIGSEGV段错误
- 装配Bean基于XML
- struts2,spring整合中使用spring 管理struts2的action,springaop 常见问题
- ANR爬坑
- 生物信息学习——bowtie实例解析
- Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍