algorithm004-04/algorithm004-04

【314-毕业总结】

Opened this issue · 0 comments

持续学习

在课程中学到最重要的内容,最重要的不是某一道题的解法,或者某一类题目的解法,而是掌握一种高效的方法,进行不断的练习
算法这条路,没有捷径,唯有不断的练习,再加上持之以恒的心,每天进步一点点就够了。

刷题的方法很重要,刷题初期各种套路不明白很正常,多学,多看,多练习,慢慢就会了,下次遇到类似套路题目,就能搞定

数据结构总结

线性结构

  1. 数组 连续存储 查找O(1) 插入删除 O(n)
  2. 链表 非连续存储 查找O(n) 插入删除O(1)
  3. 栈 先入后出 可以模拟递归函数调用
  4. 队列 先入先出

哈希表

哈希表利用hash算法,可以将key映射为数组索引,插入,查找的时间复杂度都为O(1) 空间复杂度为O(n)
哈希冲突在Java中是利用链表法来解决的,相同hash值的node,利用链表进行串联,在链表节点超过8以后,会改变为红黑树存储,防止hash攻击

  1. BST(二分搜索树) 根节点的值大于左子树小于右子树.查找插入删除,查找log(n),中序遍历是有序的
  2. trie 字典树,处理字符类操作非常高效
  3. 红黑树,AVL树
  4. 平衡二叉树 平衡二叉树是左右子树高度不超过1的树,AVL树是严格平衡二叉树,红黑树是黑节点平衡,左右子树高度差最高为一倍
  5. 完全二叉树 除了最后一层,每一层的节点都是满的,最后一层,节点靠左排布
  6. 满二叉树 左右子树的高度差为0,每一层的节点都是满的
  7. 树的遍历 前中后(递归迭代都必须掌握) 迭代使用Stack模拟递归,层序遍历使用队列

图这个数据结构最重要的内容是遍历

  1. DFS 深度优先
  2. BFS 广度优先
  3. 最短路径
  4. 连通分量
  5. 最小生成树

常用算法**

  • 分治
  • 递归
  • 回溯
  • 动态规划