《数据结构与算法分析》浅读

大学时学数据结构与算法,很难懂得到底有什么用处。从业五年后,愈发知道做任何基础的事情须有把握全局、深入细节的能力。

于是重读数据结构与算法,鉴于该书的难度,例如图运算等很难吃透,所以只能算作浅读,读法为:读懂四分之一,并对一些概念和基础的东西做少量的笔记。

以下为粗浅的笔记:

一、数据结构

1、线性结构

A、 栈:先进后出

B、 队列:先进先出

C、 线性表:

D、 链表:单向链表、双向链表、环形链表。例如:LinedList

E、  静态链表:ArrayList是动态扩容的静态链表,每次扩容复制一份,这也决定了它是线程不安全的,因为它是有状态的——即其成员变量size为静态链表长度。

F、  串

2、集合

3、树形结构:二叉树、平衡树(B树、红黑树)、堆

4、图

二、时间复杂度:

二分查找法的时间复杂度为O(LogN),计算原理很简单,每次除以2查找,M次之后得到一个数,所以2的M次方为N,那么M= LogN。

三、树:

B树和B+树:是AVL树的一个变种种,为文件存储系统而服务,因为磁块的读取比CPU的计算更慢,所以以更多计算来减少读取磁块的次数。数据都存在叶子节点上,节点上存储L条数据。节点下子节点数量为M。通过数据量、单条字节数和数据量大致可以计算出树的高度H。查找数据的时间复杂度为O(H),不大于O(logm n)。

B+树在B树的基础上增加了叶子节点的链表指针,所以可以更快的支持区间查询。【这是大于小于查询可以命中索引的原理】

红黑树:是AVL树的一个变种。牺牲了完全平衡来增加插入效率(减少旋转)。

【遗留课题:完全把红黑树读懂,并以java代码的方式实现】

猜你喜欢

转载自www.cnblogs.com/baimingqian/p/10810141.html