《数据结构》学习笔记 1-2章

第一章 绪论

内容概要:

图灵机及RAM模型;算法复杂度评估 (不是时间,而是计算操作的次数)。

渐进分析:大O (最坏),大Θ;算法分析。

封底估算及实例 (计算大概量级)

  • 1 day =10^5 s; 300 year = 10^10 s.

两种算法:迭代,递归算法

  • 迭代vs递归:递归形式简介;但效率经常小于迭代。

两种策略:减而治之,分而治之;结合实例,两种典型的分析的方法:递归跟踪和递推式。

动态规划: 

fibonacci example, two implementation:recursive (O(2^n)) and iteration (O(n)).

LCS:待理解。

第二章 向量

向量即Vector, 与List一起,构成了最基础的顺序数据结构。

ADT v.s. Data structure, Difference? 

从数组到向量:向量是基于数组结构实现的。

向量ADT接口

向量支持的操作

  • 构造/析构,复制:
    •  

  • 扩容:size 满载时double;动态内存管理的效率考虑(递增式扩容 vs. 加倍式扩容)。
  • 寻秩访问:get(), put(), or 重载[ ]通过数组实现;
  • 单个插入:带插入位置整体后移;区间插入:带插入位置后整体位移一定长度。
  • 查找操作:对于有序向量,需支持判等操作;对于无序向量,需支持比较操作。=> 输入敏感算法。
  • 单元素/区间删除:单元素删除是在调用区间删除,而不是反过来;效率考虑。
  • 唯一化:用到查找和删除;复杂度:O(n^2)。
  • 遍历:通过函数指针或者函数对象实现。
    •   

有序向量(很多操作将大大简化):

  • 唯一化,低效版 vs 高效版。
  • 二分查找:复杂度1.5logn;
  •  (该版本本质上在找大于e的第一个元素)

Fibonacci查找(与二分查找区别:如何切割/取划分的中点),复杂度:1.44 logn.

  •   

起泡排序算法的两种版本:

  •  
  • 算法复杂度:最好为O(n), 最坏为O(n^2).

 归并排序

  • 分治策略的典型应用;先分,再Merge。O(nlog(n))复杂度。
posted @ 2019-12-07 17:38  sanlangHit  阅读(162)  评论(0编辑  收藏  举报