数据结构与算法-概述

程序=数据结构+算法数据结构与算法

00x1 重要性

  • 名企必考
  • 竞赛重点
  • 应用范围广

 

00x2 数据结构

数据结构是数据之间的一种或多种特定关系的集合

数据结构分为逻辑结构(数据对象中数据元素之间的相互关系)和物理结构(数据结构在计算机中的存储形式)

逻辑结构

  • 集合结构:数据与数据彼此之间无关联
  • 线性结构:数据与数据之间一对一
  • 树形结构:数据与数据之间一对多
  • 图形结构:数据与数据之间多对多

物理结构:如何把数据元素存储到存储器(主要是内存)中

 

00x3 存储结构

  • 顺序存储结构:数据存放在连续的存储单元,必须连续;逻辑关系与物理关系一致;开销小
  • 链式存储结构:数据存放在任意存储单元,不必连续;逻辑关系和物理关系不一致;需通过指针;灵活

00x4 算法

解决特定问题的求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作

特征:输入、输出、有穷性、确定性、可行性

要求:正确性、可读性、健壮性、时间效率高且存储量低

 

00x5 算法效率的度量方法

事后统计法

  通过设计后的测试程序和数据,利用计算机计时器对不同算法编程的运行时间进行比较,从而确定算法效率的高低

  缺陷:费时费力,受测试环境影响大

事前分析法

在编写计算机程序之前,依据统计方法对算法进行估算

影响效率的因素

  • 算法采取的策略、方案
  • 编译产生的代码质量
  • 问题的输入规模
  • 机器执行指令的速度

如果精确地研究执行次数是很累的,我们侧重研究的是算法随着输入规模扩大增长量的一个抽象,重要的是把基本操作的数量和输入模式关联起来

函数的渐近增长

给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么我们说f(n)的增长渐近快于g(n)

常数不会影响算法的变化曲线,最高次项的系数也不重要,最重要的是最高次项的次数

 

00x6 时间复杂度

在进行算法分析是,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量 T(n)=O(f(n)) 

推导大O阶:

  1. 用1取代运行时间中的所有常数项
  2. 只保留最高次项
  3. 令最高次项的系数为1

大O阶的分类:

  • 常数阶:O(1)
  • 线性阶:O(n)
  • 平方阶:O(n^2)
  • 对数阶:O(\log(2) n)
  • nlog阶:O(nlog)
  • 立方阶:O(x^3)
  • 指数阶:O(x^n)

另外地,O(循环)=循环运行次数n ^  复杂度

排列顺序:O(1)<O(\log(2) n)<O(n)O(nlog)<O(n^2)<O(x^3)<O(x^n)

平均运行时间:期望的运行时间

最坏运行时间:所给的运行时间

00x7 空间复杂度

在一个算法运行过程中临时占用存储空间大小的度量,S(n)=O(f(n))

复杂度默认为时间复杂度。时间复杂度描述运行时间的需求,空间复杂度描述空间的需求

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alex·Leace

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值