【学习笔记】数据结构与算法第一章 绪论

一、基本概念

1、基本概念

数据

数据元素(数据的基本单位)

数据项(不可分割的最小单位)

数据对象(性质相同的数据元素的集合)

2、数据结构

存储结构

  • 数据元素的存储
  • 元素之间的关系的表示
    • 顺序表示:一维数组
    • 非顺序表示:指针

        顺序存储结构:整个存储结构中只含数据元素本身的信息

        链式存储结构:用一个和 K在一起的附加信息指示 Ki+1 的存储位置

逻辑结构

  • 数据元素之间的相互关系 
  1. 集合:结构中的数据元素除了“同属于一个集合”外,没有其它关系
  2. 线型结构:结构中的数据元素之间存在一对一的关系
  3. 树型结构:结构中的数据元素之间存在一对多的关系
  4. 图状结构网状结构:结构中的数据元素之间存在多对多的关系

两者关系

  • 数据的逻辑结构和存储结构密不可分:
  1. 算法设计取决于所选定的逻辑结构
  2. 算法实现依赖于所采用的存储结构

 3、数据类型

原子类型和结构类型;抽象数据类型(ADT)

4、算法(Algorithm) 

高效率(High efficiency)与低存储量(Low memory  space)需求

5、三种出错处理方式的比较:

(1)用 exit语句终止执行 并报告错误
        • 其优点是直观、嵌套层次少;缺点是中断函数的执行
        • 故不适宜用在子函数中
(2)函数的返回值区别正确返回或错误返回
        • 其优点是将错误返回给调用环境,由调用环境决定程序的下一步走向
(3)在函数的参数表中设置 整型变量,以区别正确返回或错误返回
        • 其优点同上,并可判别多种类型的错误

二、算法效率的度量

1、问题规模(n)的函数

2、时间复杂度T(n)

与算法中基本操作重复执行的次数有关
𝑂(1) :常量时间阶
𝑂 (𝑛) :线性时间阶
𝑂(n^{2} ) :平方阶
𝑂 (n^{k} ) :k次方时间阶(k≥2)
𝑂(2^{n} ) :指数阶
𝑂(\log n) :对数时间阶
𝑂(n\log n) :线性对数阶
由于函数有如下的增长关系:
𝑐 < 𝑙𝑜𝑔 2 𝑛 < 𝑛 < 𝑛𝑙𝑜𝑔 2 𝑛 < 𝑛 2 < 𝑛 3 < 2 𝑛 < 3 𝑛 < 𝑛! < 𝑛 𝑛
所以阶之间有如下的关系:
𝑂(1) < 𝑂( 𝑙𝑜𝑔 𝑛 ) < 𝑂(𝑛) < 𝑂(𝑛 𝑙𝑜𝑔 𝑛 ) < 𝑂(𝑛 2 ) < 𝑂(𝑛 3 ) < 𝑂(2𝑛 ) < 𝑂(𝑛!) < 𝑂(𝑛 𝑛 )
Tip:循环中只看最内层循环的语句执行次数的规律即可

例:冒泡排序法BubbleSort

min:0     max:n(n-1)/2

void BubbleSort(int a[], int n){
    for(i=n-1,change=1;i>=1&&change;--i)
    for(j=0,change=0;j<i;++j)
    if(a[j]>a[j+1]){
        y=a[j];
        a[j]=a[j+1];
        a[j+1]=y;
        change=1;
        }
    }

3、空间复杂度S(n)

在计算机中运行时所需存储空间大小的度量,一般地,算法的空间复杂度指的是辅助空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值