数据结构与算法

1.1 使用计算机求解问题

1.1.1 开发(设计、编写)一个程序,通常是为了解决一类问题,程序每次执行时能够解决该问题的一个实例

1.1.2 程序的开发过程:

  • 需求分析(深入分析情况和细节,得到一个尽可能严格表述的问题表述)

  • 数据组织和算法设计

  • 编码

  • 检查编译

  • 调试测试(关键在于设计一套出色的测试用例)

  • 维护

1.2 算法和算法设计

1.2.1 问题是需要解决的一类具体需求,而问题实例是所属问题的一个具体例子。算法则是解决问题的计算过程的严格描述,是一系列解决问题的清晰指令。程序则是算法的实现

1.2.2 算法的性质:

  • 有穷性(算法描述应该由有限条指令或语句组成)

  • 能行性(能够被设计成为具体的机械计算过程)

  • 确定性(对于一个给定的初始数据,将产生一个唯一的确定的数据或输出结果)

  • 终止性(算法产生的动作序列是有穷的)

  • 输入输出(有明确的输入和输出)

1.2.3 算法的描述:采用自然语言描述、采用严格的形式化计发描述、采用伪代码描述。

1.2.4 常见的算法设计模式:

  • 枚举法(利用计算机的速度优势)
  • 贪心法(首先尽可能做出部分解,再逐步扩充得到完整解)
  • 分治法(将复杂问题分解为相对简单的子问题,分而治之再组合)
  • 回溯法(逐步探索所有可能的选择和步骤,一旦遇到无法前进则退回到前面的步骤,这一过程称为回溯
  • 动态规划法(在前面的步骤中收集信息,在后续步骤中动态选择最好的路径)
  • 分支界限法(在不断搜索过程中将无用的选择不断删除)

1.2.5 算法的设计要求:正确性、可读性、健壮性、高效率与低存储量

1.3 算法代价和度量分析

1.3.1 在具体算法中,以其计数数值作为空间开销的基本度量,以其执行次数作为时间开销的基本度量。

1.3.2 代价分析分为事前分析(复杂度分析)和事后分析(测量执行时间和空间开销)。

1.3.3 复杂度分析的"大O记法":对于单调的整数函数 f ( n ) f(n) f(n),如果存在一个整数函数 g ( n ) g(n) g(n)和常数 c > 0 c>0 c>0,使得对于充分大的n总有 f ( n ) < = c × g ( n ) f(n)<=c \times g(n) f(n)<=c×g(n),就说函数 g ( n ) g(n) g(n) f ( n ) f(n) f(n)的一个渐近函数(忽略常量因子),记为 f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n))

1.3.4 常用复杂度:常量复杂度: O ( 1 ) O(1) O(1) O ( l o g n ) O(log n) O(logn) O ( n ) O(n) O(n) O ( n l o g n ) O(n logn) O(nlogn) O ( n 2 ) O(n^{2}) O(n2) O ( 2 n ) O(2^{n}) O(2n)

1.4 数据结构

1.4.1 一个具体的数据结构可以表达为一个二元组 D = ( E , R ) D=(E,R) D=(E,R), D D D是某个数据集合的一个有穷子集,而 R ∈ E × E R\in E \times E RE×E 表示元素之间的某种关系。数据结构就是研究数据的逻辑结构物理结构以及它们之间相互关系

1.4.2 逻辑结构,数据之间的相互关系:

  • 集合 结构中的数据元素除了同属于一种类型外,别无其它关系
  • 线性结构 数据元素之间一对一的关系
  • 树形结构 数据元素之间一对多的关系
  • 图状结构或网状结构 结构中的数据元素之间存在多对多的关系

1.4.3 物理结构(存储结构),数据在计算机中的表示:

  • 顺序结构
  • 链式结构
  • 索引结构
  • 哈希结构

1.4.3 数据的逻辑结构和物理结构是数据结构的两个密切相关的方面,同一逻辑结构可以对应不同的存储结构。算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值