基本上每期必跟,回想大学时期抱着《算法导论》啃着的时候,每天晚上都要挠掉几万根头发,最后《算法导论》也没有撸完。这次跟着作者一起看,经常能get到以前没有意识到的内容,课程真的很赞,收获很多。
下面来回答一下题目:
第一题:
我的理解是散列表、跳表、堆结合使用
需求1:根据猎头ID快速查找、删除及更新:散列表快速定位ID,删除及更新操作则依赖于跳表(为)
需求2:查找积分在某个区间内的猎头ID列表:使用用积分构建的跳表或是红黑树,都可以解决这个问题
需求3:查找积分从小到大在第X位的猎头ID信息:这个可以用堆来解决,构建一个大顶堆(堆大小为X),堆顶即为第X位
需求4:查找积分从小到大在排名在第X位-第Y为的猎头ID信息:这个也可以用堆来解决,构建一个大顶堆(大小为Y),出Y-X+1次堆即可
第二题:
很明显分而治之,在每个库中查到金额最大的K个订单,重要的是如何合并数据——直接使用小顶堆(大小为K)即可
PS:这题思路点拨好像关系不大
第三题:
有两个策略:非阻塞的处理方式,直接拒绝请求;阻塞请求,将请求进行排队,等到有空闲线程时,再依次进行出队
这里需要注意的是第二种,队列如何设计实现,我们都知道队列可以有两种实现:如果是链表,它可以支持无限排队,那么此时需要考虑阻塞的长度,会影响响应时间;而数组类型的,队列长度优先,当数组满时请求会被拒绝。
当然链表也是可以设置一直阈值的,重要的是限定长度是多少,这个需要好好思考
第四题:hash + 二分查找
自定义一个hash函数,将IP前3段转换为Int值,比如[202.102.133.0] 为 202 \* 256 ^ 2 + 102 * 256 + 133即可,对应值为山东东营,这样的对应关系由hash存储;这样在传入IP后,直接根据自定义的hash函数,再根据存储的hash数据定位即可
第五题:
考虑到图片数据量,可以使用多台服务器,然后使用hash做负载均衡
需求1:包含的信息,很明显使用散列表存储即可
需求2:根据关键字搜索:可以使用倒排索引结构来存储(这个好像课程中还没有讲到,或者忘记了。。。)
需求3:避免重复相同的图片:按照hash负载均衡至指定服务器后,在哈希表中判断是否存在即可避免重复存储
第六题:
首先设置合适的初始大小;
其次设置合适的装载因子,以及动态扩容时扩容的大小;
然后设计一个散列冲突时的解决方法:比如使用链表、当链表很长时,使用红黑树
最后,设置一个散列冲突比较低的散列函数,个人觉得这是最重要的,也是最基础的
时间有点赶,只是粗略的回答了一下,在这就抛转引玉了
展开