一.对于大数据: 分成小文件
1. 求频率TOPN/ 不重复:因为数据量太大不能全部放到内存中,利用hash映射映射成小的文件(大小差不多可放入内存中的,且hash映射可以保证同一条记录只会映射到同一个文件中,这个是之后的基础,如果题目刚开始不行则重新hash映射),然后统计频率用hashMap,最后找topK问题用堆排序,维护一个最小k堆,遍历剩余记录(O(mun*lgK))。或者归并排序。
2.对于字符串,文本的统计: Trie树。字母一个一个排下去。种类少可以用
3.对于第K大/中位数: 分层,划分为n个小区域,确定在哪个区域中,然后在那个区域中找到对应的数
4.给大量重复数字排序/判断数字是否存在/给数字去重: 位图,每一位代表一个数字,1表示有,0表示没有。空间少。如果找出不重复的整数,位图每位给2bit,代表4中可能的情况
5. 搜索引擎/关键字查询:
1) 正向索引: 存储每个文章的单词列表
2) 反向索引: 存储关键字对应的文档编号
二. 常用算法:
1. 递归: 只要是问题可以分成一层一层相同处理方式的子问题,就可以用递归。比如树的遍历.递归调用本质就是压栈和出栈的过程
2. 一般根据问题特点将问题转化,那时候用算法
三.排序算法:
1. 冒泡排序: 双重循环,一个从头开始,一个i+1 --length-i
2. 选择排序:每次最大的在前面
3. 插入排序:每次插入到一个有序的序列中
4.快速排序,分治法。每次挑一个数,将list分为大于它的和小于它的。两头找,然后交换位置。
5.选择/插入/冒泡 n^2; 堆/归并nlogn;快速在中间