- 数据量小==>内排序
- 数据量大==>外排序
- O(n)得到第(前)K大元素==>快排思想(适合小数据量)
- O(nlogn)得到前K大元素==>维护一个K个元素的小顶堆(适合大数据量)【一次堆化需要logn,堆化n个元素需要n个logn】
- 链表中范围查找==>跳表【O(logn)】【链表存储使用跳表】
- 数组中范围查找==>二分法【O(logn)】【数组存储数组二分法】
- Redis的有序集合ZSet思想:散列表(key)+跳表(score)【查key的score,按score区间查key】
- 出现上亿,T级数据:哈希算法数据分片,存储到不同的服务器上
- KMP算法:
模式串与主串进行比较;
当匹配指针发现不匹配字符时,则寻找指针左端的模式串部分 的 公共最长前后缀,然后将前缀部分移动到后缀部分再进行比较(而不是每次移动一位)【最长公共前后缀越短,移动的越多】
- 堆是一个完全二叉树;
红黑树是一个平衡二叉树;(尽可能的保持平衡,子树高度查不会超过1)
B树是一个平衡树!(注意B树不是二叉树)
- B树(也就是B-)和B+树的区别:
1)节点的分支数不同;
2)B树的每个节点关键字存储数据;而B+树中的数据都存储在叶子结点上,非叶子节点仅仅起到索引的作用(数据库索引的查找功能)
3)B+树有一个指向根结点,还有一个指向关键字最小的叶子结点,且将叶子结点依关键字的大小自小而大顺序链接!(数据库索引的排序功能)