算法与数据结构--向量
来源:互联网 发布:mac 迅雷 下载速度 编辑:程序博客网 时间:2024/06/06 17:01
首先先弄清定义:ADT(Abstract Data Type)与DS(Data Structure)
抽象数据类型:只需要知道外部逻辑与操作,而不需要内部定义细节的数据类型++
数据结构:某种特定的语言来实现ADT的一整套算法 ,内部的实现
实际上,向量只是数组的一种抽象与泛化,由一组元素按线性次序封装而成
向量中的一些ADT操作:
insert(para1,para2),put(para1,para2),get(para1),remove(para1),size()
disorder(),find(),search(),uniquify(),sort()
vector模板类
typedef int Rank ; // 秩
#define DEFAULT_CAPACITY 3 //默认初始容量(实际可能更大)
template <typename T> class Vector {private:Rank _size;int _capacity; T* _elem;//规模,容量,数据区
protected:/内部函数/
public:/各种外部结构(构造,析构,读写,遍历)/
}
关于可扩充向量:
采用静态空间管理时,_capacity<_size 出现上溢,装填因子_size/_capacity<<50%出现下溢,根本无法预测空间的需求量。
采用动态空间管理时,出现上溢时,使用allocated适当地扩大内部数组的容量,而后released释放之前的内存空间,可用扩容算法实现
得益于向量的封装,尽管扩容之后数据区的物理地址有所改变,却不会出现野指针
几种增容的策略:
递增增容:每次都追加固定大小的容量,分摊成本o(n),装填因子 ->100%
加倍增容:容量加倍,分摊成本o(1),装填因子>50%,刚出现扩容的时候就是50%
--------------------------------------------------------------------------------------------------------------------------
平均分析与分摊分析的最大区别:平均分析是独立的处理,割裂了操作之间的相关性与连贯性,而分摊复杂度是连续地
实施多次操作,然后将所需总体成本分摊至单次操作
--------------------------------------------------------------------------------------------------------------
向量(有序与无序向量的区别)的一些操作算法:
循序访问,插入,区间删除,单元素删除,查找(有序向量的二分查找或Fibonacci查找),唯一化,遍历
对于二分查找,选取的lambda=0.5,Fibonacci查找,lambda=0.618
- 算法与数据结构--向量
- 数据结构与算法---向量使用
- 数据结构与算法笔记 —— 向量
- Unity3D_算法与数据结构(向量)
- 【数据结构与算法学习笔记】PART2 向量(接口与实现,可扩充向量,无序向量,有序向量)
- (c#)数据结构与算法分析 --数组、向量和表
- 数据结构与算法分析c++:STL中的向量和表
- 数据结构与算法 —— 向量的扩容策略与分摊时间复杂度
- 【数据结构与算法学习笔记】PART3 线性结构(除向量外,数组、栈、队列、链表)
- 数据结构与算法 -- 算法
- 数据结构--向量--向量介绍
- 数据结构-向量
- 数据结构--向量
- 数据结构--向量
- 【数据结构与算法】浅谈数据结构与算法
- 【数据结构与算法】【Some】数据结构与算法
- 数据结构笔记-----数据结构与算法
- 【数据结构与算法】数据结构备忘
- 动作识别之STIP (Space-Time Interest Points)(一)
- MATLAB神经网络编程(三)——线性神经网络的构建与实现
- 改编的一份JAVA代码行数统计的代码
- C++所对应的数据结构
- sql如何设置外键
- 算法与数据结构--向量
- HDU 2203--亲和串【水题】
- Java HashMap的工作原理
- ACLLib 分析
- 幽幽情怀
- 每天锻炼几分钟
- win7_oracle11g_64位连接32位PLSQL_Developer
- SQL2008安装提示"Microsoft visual studio 2008早期之前的版本"解决(这是我认为最简单有效的方法)
- HBase简介