为了方便学习,把这些整理到一起,方便查看
一、数据结构的组成:
1、线性结构
线性结构是最简单的数据结构,包括数组、链表,以及由它们衍生出来的栈、队列、哈希表。
2、树
树是相对复杂的数据结构,其中比较有代表性的是二叉树,由它又衍生出了二叉堆之类的数据结构。
3、图
图是更为复杂的数据结构,因为在图中会呈现出多对多的关联联系。
二、时间复杂度
一个长度为n cm的面包,每分钟吃掉1cm,那么吃掉整个面包需要多久?
T(n)=3n 时间复杂度T(n)=O(n)
一个长度为n cm的面包,每分钟吃掉面包剩余长度的一半,那么吃得只剩1cm需要多久呢?
T(n)=5logn 时间复杂度T(n)=O(logn)
一个长度为你ncm的面包和一个鸡腿,每两分钟吃掉一个鸡腿,那么吃完一个鸡腿需要多久?
T(n)=2 时间复杂度T(n)=O(1)
一个长度为n的面包,吃掉第一个1cm需要1分钟时间,吃掉第二个1cm需要2分钟时间,吃掉第三个1cm需要3分钟时间......那么吃完整个面包需要多久?
T(n)=0.5n^2^+0.5n 时间复杂度T(n)=O(n^2^)
O(n^2)>O(n)>O(logn)>O(1)
==那么是如何推导出时间复杂度呢?有如下几个原则:==
- 如果运行时间是常数量级,则用常数1表示
- 只保留时间函数中的最高阶项
- 如果最高阶项存在,则省去最高阶前面的系数
现在的计算机硬件的性能越来越强了,我们为什么还这么重视时间复杂度呢?
假设两个算法A和算法B,超级计算机的运行速度为老旧电脑的100倍
A:T(n)=100n,时间复杂度为O(n) 运行在老旧电脑
B: T(n)=5n^2^ ,时间复杂度为O(n^2^) 运行在超级计算机
| n | T(n)=100n X100 | T(n)=5n^2^ |
|---|---|---|
| 1 | 1000 | 5 |
| 5 | 5000 | 125 |
| 10 | 10 0000 | 500 |
| 100 | 100 0000 | 5 0000 |
| 1000 | 1000 0000 | 5 0000 0000 |
| 10000 | 10 0000 0000 | 500 0000 0000 |
| 100000 | 100 0000 0000 | 5 0000 0000 0000 |
答案一目了然!!!
三、空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度,用大O表示
//TODO
1、什么是B-树
B-树又称为多路平衡查找树,是一种组织和维护外存文件系统非常有效的数据结构
2、什么是B+树
B+树是B-树的一些变形。