数据结构知识点
首先看数据结构的知识点都有哪些,如下图所示。
队列和栈是经常使用的数据结构,需要了解它们的特点。队列是先进先出,栈是后进先出。
表,包括很多种,有占用连续空间的数组、用指针链接的单向和双向链表,首尾相接的循环链表、以及散列表,也叫哈希表。
图,在特定领域使用的比较多,例如路由算法中会经常使用到,图分为有向图、无向图及带权图,这部分需要掌握图的深度遍历和广度遍历算法,了解最短路径算法。
树的内容,树一般用作查找与排序的辅助结构,剩下两个部分都和树有关,一个是二叉树,一个是多叉树。
多叉树包括B树族,有B树、B+树、B*树,比较适合用来做文件检索;另外一个是字典树,适合进行字符串的多模匹配。
二叉树包括平衡二叉树、红黑树、哈夫曼树,以及堆,适合用于进行数据查找和排序。这部分需要了解二叉树的构建、插入、删除操作的实现,需要掌握二叉树的前序、中序、后序遍历。
算法知识点
来看算法部分的知识点汇总,如下图所示。
算法题的常用解题方法。
复杂度是衡量算法好坏的标准之一,我们需要掌握计算算法时间复杂度和空间复杂度的方法。计算时间复杂度的方法一般是找到执行次数最多的语句,然后计算语句执行次数的数量级,最后用大写O来表示结果。
常用的字符串匹配算法,了解不同算法的匹配思路。
排序也是经常考察的知识点,排序算法分为插入、交换、选择、归并、基数五类,其中快速排序和堆排序考察的频率最高,要重点掌握,需要能够手写算法实现。
常用的查找算法,包括二分查找、二叉排序树、B树、Hash、BloomFilter等,需要了解它们的适用场景,例如二分查找适合小数量集内存查找,B树适合文件索引,Hash常数级的时间复杂度更适合对查找效率要求较高的场合,BloomFilter适合对大数据集进行数据存在性过滤。
详解二叉搜索树
二叉搜索树
如下图所示,二叉搜索树满足这样的条件,每个节点包含一个值,每个节点至多有两个子树。每个节点左子树节点的值都小于自身的值,每个节点右子树节点的值都大于自身的值。
二叉树的查询时间复杂度是log(N),但是随着不断的插入、删除节点,二叉树的树高可能会不断变大,当一个二叉搜索树所有节点都只有左子树或者都只有右子树时,其查找性能就退化成线性的了。
平衡二叉树
平衡二叉树可以解决上面这个问题,平衡二叉树保证每个节点左右子树的高度差的绝对值不超过1,例如AVL树。AVL树是严格的平衡二叉树,插入或删除数据时可能经常需要旋转来保持平衡,比较适合插入、删除比较少的场景。
红黑树
红黑树是一种更加实用的非严格的平衡二叉树。红黑树更