数据结构与算法入门

233 阅读3分钟

这是我参与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 Coding
    • In-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)

参考链接