这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战
1. 数据结构
数据结构其实就是数据和结构,就是一堆数据在内存中以什么样的形式存在。 数据在内存中有集合结构, 线性结构,树型结构,图形结构。
- 逻辑结构:
- 集合结构:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
- 线性结构:数据结构中的元素存在一对一的相互关系。
- 树形结构:数据结构中的元素存在一对多的相互关系。
- 图形结构:数据结构中的元素存在多对多的相互关系。
- 物理结构:
- 顺序存储结构:比如数据,字符串,堆,栈等数据结构
- 链式存储结构:比如链表
- 常见数据结构(Data Structure)
Array数组Stack/Queue栈/队列PriorityQueue(heap)优先队列(堆)LinkedList(single/double)链表Tree/Binary Tree树/二叉树Binary Search Tree二叉搜索树HashTable哈希表Disjoint Set并查集Trie字典树BloomFilter布隆过滤器LRU Cache
2.算法
- 常见算法Algorithm
General CodingIn-order/Pre-order/Post-order traversal排序Greedy贪心算法Recursion/Backtrace递归/回溯Breadth-first search广度优先Depth-first search深度优先Divide and Conquer分治算法Dynamic Programming动态规划Binary Search二叉搜索Graph图
3. 算法复杂度
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。
衡量不同算法之间的优劣主要还是从算法所占用的「时间」和「空间」两个维度去考量。
- 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。
- 空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。
因此,评价一个算法的效率主要是看它的时间复杂度和空间复杂度情况。大部分情况下两者很难兼顾,我们就需要从中去取一个平衡点。
3.1 常见时间复杂度
- 常数阶O(1)
- 对数阶O(logN)
- 线性阶O(n)
- 线性对数阶O(nlogN)
- 平方阶O(n²)
- 立方阶O(n³)
- K次方阶O(n^k)
- 指数阶(2^n)
3.2 常见空间复杂度
- 常数阶O(1)
- 线性阶O(n)
- 平方阶O(n²)
常见时间复杂度:
| Algorithm 算法 | Runtime 时间复杂度 |
|---|---|
| Binary search 二分查找 | O(log n) |
| Binary tree traversal 二叉树遍历 | O(n) |
| Optimal sort martrix search 排序(二维矩阵) | O(n) |
| Merge sort 排序(快排、归并) | O(n log n) |