数据结构与算法##1.绪论

数据结构与算法##1.绪论

教程来源于mooc 数据结构与算法


1.问题的抽象

编写计算机程序的目的是解决实际的应用问题
任务需求 -> 问题模型
数据结构 -> 数学模型
设计算法
数据结构+算法 = 程序设计

农夫过河问题–最短路径问题
问题抽象:抽象出几个约束条件
数据抽象:图模型
数据结构:相邻矩阵
算法:最短路径

2.数据结构

结构 = 实体 + 关系
数据结构是按照逻辑关系组织起来的一批数据,按一定的存储方法把它存储在计算机中,在这些数据上定义了一个运算的集合。
图 -> 树 -> 二叉树 -> 线性表
表,栈,队列,串,二叉树,Huffaman树,有向图,无向图

2.1存储结构

逻辑结构到物理存储空间的映射
计算机主存储器(内存) 非负整数地址编码,相邻单元的集合,基本单位是字节,随机访问(到不同地址花费时间相同)
对每个逻辑结构都建立一个唯一的连续存储区域
顺序、链接、索引、散列

2.2抽象数据类型ADT

数学模型,与物理存储结构无关,不关心存储细节,实现面向对象
隐藏运算实现的细节和内部数据结构,实现软件复用
结构二元组: <数据对象D,数据操作P>
逻辑结构+运算
e.g. 栈:线性表+限制访问端口
可以用不同模板来描述ADT

3.算法

3.1 定义

算法是对特定问题求解过程的描述,是指令的有限序列。
程序是算法在计算机程序设计语言中的实现。

3.2 算法的特性

  • 通用性:对参数化输入进行问题求解,保证计算结果的正确性
  • 有效性:有限条指令,又一系列步骤组成
  • 确定性:步骤没有歧义
  • 有穷性:有限步内结束

3.3 算法的分类

  • 穷举法 顺序找k值
  • 回溯、搜索
  • 递归分治 二分法找K值
  • 贪心法
  • 动态规划

3.4 算法的复杂性分析

大O表示法

存在c和n0,对任意n>n0,有f(n)<=c*g(n)
则f(n)=O(g(n))
表示函数增长率的下限

单位时间:

  • 简单的布尔或算数运算
  • 简单I/O
  • 函数返回

加法规则:只看大的那个
乘法规则:全部保留

大Ω表示法

存在c和n0,对任意n>n0,有f(n)>=c*g(n)
则f(n)=Ω(g(n))
表示增长率下界
最要要有最紧下限

大Θ表示法

在这里插入图片描述

顺序找k值 O(n)
二分法找k值 O(logn)

空间和时间复杂度一般相互制衡

数据结构和算法的选择

  • 仔细分析所要解决的问题 数据结构的初步设计往往先于算法设计
  • 注意数据结构的可扩展性 考虑当输入数据的规模发生改变时,数据结构是否能够适应求解问题的演变和扩展
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值