数据结构和算法读书笔记-数据结构理论

来源:互联网 发布:淘宝上的组装机能买吗 编辑:程序博客网 时间:2024/06/16 16:58

1、数据结构
(1)常见的数据结构类型:数组、有序数组、堆栈、队列、链表、二叉树、哈希表、图
(2)存储用数据结构:数组、链表、树、哈希表
(3)程序员编写算法用数据结构:堆栈、队列(优先级队列)

2、算法作用在数据结构上,一般需要考虑如下问题
(1)插入一个数据项
(2)删除一个数据项
(3)根据关键字查找指定项
(4)对所有数据进行排序

3、如何评价算法
(1)比较次数+移动次数
(2)公式表示:大O表示法,用于描述【算法的速度与数据项个数之间的关系】
(3)增加数据尺度看算法才有意义,例如线性查找10条记录平均需要比较N/2=5次,二分查找最多需要比较4次,对100条记录,线性查找
需要比较50次,二分查找需要比较7次,对1000条记录,结果是500比10,而1000000条记录结果是500000比20
(4)忽略常数,例如T=K*N/2与T=K*N成正比;T=log2(N)与T=log10(N)、T=log(N)成正比

4、常见算法评估
(1)无需数组插入:O(1)
(2)无需数组删除:O(N)
(3)有序数组插入:O(N)
(4)有序数组删除:O(N)
(5)线性查找:O(N)
(6)二分查找:O(log(N))

5、理想数据结构:插入、删除和查找都很快,时间复杂度为O(1)或O(logN)

6、数组潜在问题
(1)查找:无序数组查找时间为O(N)
(2)插入:有序数组插入时需要【比较】和【移位】
(3)删除:无序、有序数组删除时都需要【比较】和【移位】
(4)空间分配:数组在创建时要求指定容量大小,并且不可改变,不够灵活。虽然向量(Vector)支持以固定大小扩展内存,但也是快满了,扩充到2倍原来空间

7、链表针对性优势
(1)查找:和数组查找时间复杂度一样,都是O(N)
(2)插入:在表头(单链表)和表尾(双端链表)插入为O(1),在中间位置插入时只需要【比较】
(3)删除:在表头删除为O(1),在中间位置删除时只需要【比较】
(4)空间分配:灵活内存分配