1.平衡二叉树和红黑树

  • 【平衡二叉树】:又称为AVL树,是一种特殊的二叉排序树,它的左右子树都是平衡二叉树,且左右子树高度差的绝对值不大于1。将二叉树上结点的左子树深度减去右子树深度称为平衡因子BF,平衡二叉树上的平衡因子只可能是-1、0、1,否则二叉树就不是平衡的。
  • 【红黑树】:是一种二叉查找树,但每个结点增加一个存储位表示结点颜色(非黑即红),通过对任何一条从根到叶子结点的路径各个结点着色方式的限制,红黑树确保没有一条路径是其他路径长度的两倍,因此,红黑树是一种弱平衡二叉树,相比于AVL树,它的旋转次数少,对于搜索、插入、删除操作较多的情况下,通常选红黑树。
  • 【区别】
  • AVL树是高度平衡的,频繁插入和删除,效率下降
  • 红黑树不是高度平衡的,插入最多旋转2次,删除最多旋转3次

2.哈夫曼编码

哈夫曼编码是哈夫曼树的一种应用,广泛用于数据文件压缩。

3.B+树

B+树是一种多路搜索树,主要为磁盘或其他直接存取辅助设备而设计的一种平衡二叉树,在B+树中,按照关键字大小有序排列。所有记录节点都是按照键值大小顺序存放在同一层的叶节点中。相比于B树,B+树有以下特点:

  • 每个节点上的指针上限为​​2d​​​而不是​​2d+1​​(d为节点的出度)
  • 内节点不存储data,只存储key
  • 叶子结点不存储指针

4.排序算法

(1)冒泡排序重复走访过要排序的数列,一次比较相邻的两个元素,如果他们顺序错误就交换,直到没有再需要交换。两个for循环,第一个循环0~len-1,第二个循环0~len-1-i(2)选择排序首先在未排序的序列中找出最大(小)元素,存放在排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最大(小)元素,放到排序序列的末尾,直到所有元素均排序完毕。(3)插入排序通过构建有序序列,对未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入(4)希尔排序插入排序的升级版

  • 根据某一增量将序列分为若干个子序列,并对子序列进行插入排序
  • 然后逐渐将增量缩小,并重复上述过程,直到增量为1,此时数据基本有序,最后进行插入排序

(5)快速排序

  • 基本思想:分治思想 先从数列中取出一个数作为key值,将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边,对左右两个小数列重复第二步,直至区间只有1个数。

(6)归并排序采用分治法,对于包含m个元素的待排序序列,将其看成m个长度为1的子序列。然后两两进行归并,得到m/2个长度为2或者1的有序子序列;然后再两两归并,直到得到1个长度为m的有序序列(7)堆排序堆排序是一种选择排序,利用堆这种数据结构来完成。其算法思想是将待排序的数据构造成一个最大堆(升序)或最小堆(降序),然后将堆顶元素与待排序数组的最后一个元素交换位置,此时末尾元素就是最大或最小的值。然后将剩余n-1个元素重新构造成最大堆或最小堆。(8)基数排序一般用于长度相同的元素(不相同补0)组成的数组,首先按照最低有效数字排序,再由低到高位排序(9)计数排序对数组中的每一个元素x,确定出小于x的元素个数,这样就可以将x输出到正确位置了(10)桶排序将待排序元素划分到不同的桶。先扫描一遍序列求出最大值 maxV 和最小值 minV,设桶的个数为 k ,则把区间 [minV, maxV] 均匀划分成 k 个区间,每个区间就是一个桶。将序列中的元素分配到各自的桶。对每个桶内的元素进行排序。可以选择任意一种排序算法。将各个桶中的元素合并成一个大的有序序列。

5.查找算法

(1)顺序查找顺序查找适合于存储结构为顺序结构或者链接结构的线性表,顺序查找也称为线性查找,属于无序查找,从线性表的一端开始查找,查找到最后。(2)二分查找元素必须是有序的,如果是无序的要先进行排序操作。也称折半查找。用给给定值与中间结点的关键字比较,中间结点把线性表分成两个子表,若相等则查找成功,若不等,再根据关键字确定下一步查找哪个子表,这样递归进行下去。(3)插值查找基于二分查找,是自适应的,根据关键字在整个有序表中所处的位置,让中间值更加靠近关键字,间接减少比较次数

6.贪心算法

基本思路是从问题的某一个初始解出发一步一步的进行,根据某个优化测度,每一步都要确保能获得局部最优解。

7.辗转相除法

求两个数m、n的最小公倍数和最大公约数,以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数 最小公倍数=两数之积/最大公约数

8.如何判断素数

判断m是不是素数,让m被2~(根号m)之间的数除,如果不能被之间的任何一个数整除,那么m就是素数!