算法1

Posted bzywns

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法1相关的知识,希望对你有一定的参考价值。

算法

1、假设淘宝一天有5亿条成交数据,求销量最高的100个商品并给出算法的时间复杂度。

答:先用哈希,统计每个商品的成交次数,然后再用在N个数中找出前K大个数的方法找出成交次数最多的前100个商品。优化方法:可以把5亿个数据分组存放,比如放在5000个文件中。这样就可以分别在每个文件的10^6个数据中,用哈希+堆统计每个区域前100个频率最高的商品,最后求出所有记录中出现频率最高的前100个商品。

2、10亿个杂乱无章的数,怎样最快速地求出其中前1000大的数。

答:方法一:建一个1000个数的最小堆,然后依次添加剩余元素,如果大于堆顶的数(堆中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的1000个数就是所需的最大的1000个。算法的时间复杂度为Onlogk=n*log1000=10nn10亿,k1000

优化方法:分治法。可以把这10亿个数里重复的数通过hash法去重,如果重复率很高会减少很大内存用量,从而缩小运算空间,然后通过分治法或最小堆栈法查找最大的1000个数

3、给一组无序数组,求出中位数并给出算法的时间复杂度。

答:若数组有奇数个元素,中位数是a[n/2-1]a[n/2]两个数的平均数,假设数组为奇数个元素

思路一:把无序数组排好序,取出中间元素,时间复杂度取决于排序算法,最快是快速排序,Onlogn),或者非比较的基数排序,时间为On),空间为On

思路二:采用快速排序的分治法:任意挑一个元素,以该元素为支点,将数组分成两部分,左边是小于支点的,右边大于。如果。。。

以上是关于算法1的主要内容,如果未能解决你的问题,请参考以下文章

C++ 26 常用算法

2垃圾回收算法(标记清除算法复制算法标记整理算法和分代收集算法),各种垃圾收集器讲解(学习笔记)

数据挖掘-K-近邻算法

排序 | 秒懂排序算法(Java)

26 Java GC算法 垃圾收集器标记 -清除算法复制算法标记-压缩算法分代收集算法

算法都有哪些分类