算法与数据结构

数据结构与算法图解(图灵书系)

Tip

你最好时刻配备性能测试工具来验证你的调优是否有效

复杂度

  • 时间复杂度 —— 比较各自的步数 (平均复杂度,最差复杂度)
  • 空间复杂度 O

散列表

  • 使用散列表时需要权衡:既要避免冲突,又要节约空间。理想的负载因子是0.7(7个元素/10个格子)

  • 栈 后进先出(Last In, First Out) 像子弹夹,压栈
  • 队列 先进先出(First In, First Out) 像排队,入队

B树

红黑树

二三四树

递归

  • 计算机用栈来记录每个调用中的函数,这个栈就叫做调用栈——避免调用路径太深,会占用过多内存

    无限递归会一直占用内存,直至内存溢出

  • 递归十分适用于那些无法估计计算深度的问题(如便利文件目录)
  • 快速排序,使用递归

基于结点的数据结构

  • 链表,双向链表使队列插入和删除都为O(1)
  • 二叉树 既能维持元素的顺序,又能快速地查找、插入、删除—— 比链表复杂,但比链表更有用
  • 图(有向图、无向图)—— 广度优先搜索、深度优先搜索,最短路径问题——Diskstra算法