[面面面]搞定计算机面试常见知识点——算法篇

之前的一篇总结已经写到了十万字,阅读起来太不方便了,所以按照类别拆分成多个短篇分享给大家。

文章目录

7. 算法

7.1. 二进制表示

在计算机中,负数以原码的补码形式表达。

原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。
反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反。
补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

7.2. 红黑树与AVL

7.2.1. 红黑树

红黑树是一种含有红黑结点并能自平衡的二叉查找树。

性质,它必须满足下面性质:

  1. 每个节点要么是黑色,要么是红色。
  2. 根节点是黑色。
  3. 每个叶子节点(NIL)是黑色。
  4. 从根节点到叶子节点任何一条路径上 不能出现两个连续的红结点
  5. 从根节点到叶子节点任何一条路径上都包含数量相同的黑结点。

操作

左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。如图3。
右旋:以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变。如图4。
变色:结点的颜色由红变黑或由黑变红。

7.2.2. AVL树

AVL的平衡通过平衡因子(bf=左树深度-右树深度)和左单旋、右单旋、左右双旋、右左双旋四种操作保证。

7.2.3. 比较

删除旋转红黑树保证最多三次,而AVL树则可能是对数级别的。但是真实序列里影响不大。

7.3. 大数据下订单去重

  1. 用一个Hash函数 (f1) 对订单id进行运算, 比如简单的timer33就行。
  2. 将得到的hash结果数字再对内存区总长度取模。 会得到一个数字 n1.
  3. 我们把内存区 n1 的位置填为1.
  4. 然后我们再换几种hash实现, 分别对应的函数式f2, f3, f4, f5. 结果分别是n2, n3, n4, n5.
  5. 将这些n1, n2, n3, n4, n5位置都填充为1.

这个做法就是Bloom Filter, 也会被翻译为布隆过滤器。BloomFilter是一个概率游戏,判断不在, 则一定不在。 但是判断在, 则可能不在。

当数据存储几个月, 数据量太大导致准去率下降怎么办?~~~~

开30个BloomFilter, 每个订单来时对30个块均染色, 每天过期一个块, 新建一个块。

7.4. 找出一篇文章中,出现次数最多的单词

分治法 + HashMap

每100个文字是一批的处理极限,我们先读出100个,100以内的就直接全部读出。读出后,打散成字符串,例如英语文章它以空格和一些符号分割。使用split方法就可以打散。此时我们得出一个字符串数组String[] array,有了这个之后就可以参考 找出不重复问题的解法。每批使用循环遍历一次,存入 HashMap<String,Integer> 里面,string 对应这个数的字符串,Integer 对应它出现的次数,最后最大的自然就是出现次数最多的。

上一篇:AVL树(平衡树)的理解与代码实现与讲解(尽可能写清楚)


下一篇:【数算-26】平衡二叉树【AVL】