持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
BitMap算法评价
优点:
- 运算效率高,不进行比较和移位;
- 占用内存少,比如 大的数MAX=10000000;只需占用内存为
MAX/8=1250000Byte=1.25M。
缺点:
- 所有的数据不能重复,即不可对重复的数据进行排序。(少量重复数据查找还是可以的,用2-bitmap)。
- 当数据类似(1,1000,10万)只有3个数据的时候,用bitmap时间复杂度和空间复杂度相当大,只有当数据比较密集时才有优势。
字典树的理解以及在统计上的应用
Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子右兄弟的方法建树的话,可能会好点. 就是在海量数据中找出某一个数,比如2亿QQ号中查找出某一个特定的QQ号
N个骰子出现和为m的概率
典型的可以用动态规划的思想来完成
1.现在变量有:骰子个数,点数和。当有k个骰子,点数和为n时,出现次数记为 f(k,n)。那与k-1个骰子阶段之间的关系是怎样的?
2.当我有k-1个骰子时,再增加一个骰子,这个骰子的点数只可能为1、2、3、
4、5或6。那k个骰子得到点数和为n的情况有:
(k-1,n-1):第k个骰子投了点数1
(k-1,n-2):第k个骰子投了点数2
(k-1,n-3):第k个骰子投了点数3
…
(k-1,n-6):第k个骰子投了点数6
在k-1个骰子的基础上,再增加一个骰子出现点数和为n的结果只有这6种情况!所以:f(k,n)=f(k-1,n-1)+f(k-1,n-2)+f(k-1,n-3)+f(k-1,n-4)+f(k-1,n-5)+f(k-
1,n-6)
3.有1个骰子,f(1,1)=f(1,2)=f(1,3)=f(1,4)=f(1,5)=f(1,6)=1。
用递归就可以解决这个问题:
用迭代来完成
海量数据问题(可参考左神的书)
目前关于海量数据想到的解决办法:
1.bitmap
2.桶排序,外部排序,将需要排序的放到外存上,不用全部放到内存上
一致性哈希说明
优点
1.当后端是缓存服务器时,经常使用一致性哈希算法来进行负载均衡。使用一致性哈希的好处在于,增减集群的缓存服务器时,只有少量的缓存会失效,回源量较小。
2.尽量减少数据丢失问题,减少移动数据的风险