程序与算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序与算法相关的知识,希望对你有一定的参考价值。
一、程序的本质
程序是为了实际的问题而存在从本质上而言,程序是解决问题的步骤描述。
数据结构起源
计算机从解决数值计算问题到解决生活中的问题
现实生活中的问题涉及不同个体间的复杂联系
需要在计算机程序中描述生活中个体间的联系
数据结构主要研究非数值计算程序问题中的操作对象以及它们之间的关系
数据结构中的概念:
数据 – 程序的操作对象,用于描述客观事物
数据的特点:可以输入到计算机;可以被计算机程序处理
数据元素 – 组成数据的基本单位
数据项:一个数据元素由若干数据项组成
数据对象 – 性质相同的数据元素的集合
数据的逻辑结构
集合结构:数据元素之间没有特别的关系,仅同属相同集合
线性结构:数据元素之间是一对一的关系
树形结构:数据元素之间存在一对多的层次关系
图形结构:数据元素之间是多对多的关系
数据存储的物理结构
物理结构:逻辑结构在计算机中的存储形式
顺序存储结构:将数据存储在地址连续的存储单元里
链式存储结构:将数据存储在任意的存储单元里,通过保存地址的方式找到相关联的数据元素
二、程序的灵魂-算法
数据结构只是静态的描述了数据元素之间的关系
高效的程序需要在数据结构的基础上设计和选择算法
算法的定义:
算法是特定问题求解步骤的描述
在计算机中表现为指令的有限序列
算法是独立存在的一种解决问题的方法和思想。
算法的特性:
输入:算法具有0个或多个输入
输出:算法至少有1个或多个输出
有穷性:算法在有限的步骤之后会自动结束而不会无限循环
确定性:算法中的每一步都有确定的含义,不会出现二义性
可行性:算法的每一步都是可行的
算法设计的准则:
正确性
算法对于合法数据能够得到满足要求的结果
算法能够处理非法输入,并得到合理的结果
算法对于边界数据和压力数据都能得到满足要求的结果
正确性是算法最需要满足的基本的准则,但是作为计算机程序,不可能无限制的满足这条准则。
可读性
算法要方便阅读,理解和交流
健壮性
算法不应该产生莫名其妙的结果
高性价比
利用最少的时间和资源得到满足要求的结果
算法效率的度量
大O表示法
算法效率严重依赖于操作(Operation)数量
在判断时首先关注操作数量的最高次项
操作数量的估算可以作为时间复杂度的估算
算法的空间复杂度:
算法的空间复杂度通过计算算法的存储空间实现
S(n) = O(f(n))
其中,n为问题规模,f(n)为在问题规模为n时所占用存储空间的函数
大O表示法同样适用于算法的空间复杂度
当算法执行时所需要的空间是常数时,空间复杂度为O(1)
空间与时间的策略
多数情况下,算法执行时所用的时间更令人关注
如果有必要,可以通过增加空间复杂度来降低时间复杂度
同理,也可以通过增加时间复杂度来降低空间复杂度
以上是关于程序与算法的主要内容,如果未能解决你的问题,请参考以下文章