2021年9月

题目描述有 10 个文件,每个文件大小为 1G,每个文件的每一行存放的都是用户的 query,每个文件的 query 都可能重复。要求按照 query 的频度排序。解答思路如果 query 的重复度比较大,可以考虑一次性把所有 query 读入内存中处理;如果 query 的重复率不高,那么可用内存不足以容纳所有的 query,这时候就需要采用分治法或其他的方法来解决。方法一:HashMap 法

- 阅读剩余部分 -

题目描述从 5 亿个数中找出中位数。数据排序后,位置在最中间的数就是中位数。当样本数为奇数时,中位数为 第 (N+1)/2 个数;当样本数为偶数时,中位数为 第 N/2 个数与第 1+N/2 个数的均值。解答思路如果这道题没有内存大小限制,则可以把所有数读到内存中排序后找出中位数。但是最好的排序算法的时间复杂度都为 O(NlogN) 。这里使用其他方法。方法一:双堆法维护两个堆,一个大顶堆,一个小顶堆。大顶堆中最大的数小于等于小顶堆中最小的数;保证这两个堆中的元素个数的差不超过 1。

- 阅读剩余部分 -

对于海量数据到处理经常会涉及到 topK 问题。在设计数据结构和算法的时候,主要需要考虑的应该是当前算法(包括数据结构)跟给定情境(比如数据量级、数据类型)的适配程度,和当前问题最核心的瓶颈(如降低时间复杂度,还是降低空间复杂度)是什么。首先,我们来举几个常见的 topK 问题的例子:

- 阅读剩余部分 -

题目描述有 20 个数组,每个数组有 500 个元素,并且有序排列。如何在这 20*500 个数中找出前 500 的数?解答思路对于 TopK 问题,最常用的方法是使用堆排序。对本题而言,假设数组降序排列,可以采用以下方法:首先建立大顶堆,堆的大小为数组的个数,即为 20,把每个数组最大的值存到堆中。接着删除堆顶元素,保存到另一个大小为 500 的数组中,然后向大顶堆插入删除的元素所在数组的下一个元素。

- 阅读剩余部分 -

Linux 这个名字Linux 的 Wiki 介绍:点击查看Linux 也称:GNU/Linux,而其中 GNU 的全称又是:Gnu’s Not Unix。其中 GNU 放前面是有原因的,GNU 介绍:点击查看对于 Linux 和 GNU/Linux 的两种叫法是有争议,可以看下面文章:Linux命名爭議其实我们可以认为:Linux 本质是指 Linux 内核,而称 GNU/Linux 则代表这是一个系统,所以我认为 Debian 的这个叫法是合理的,但是确实有点不好念和记忆。所以普遍大家直接称作 Linux。通过上面的全称和资料其实我们也就了解到,Linux 本质来源不是 Unix,但是它借鉴了 Unix 的设计思想,所以在系统业界上把这种和 Unix 是一致设计思想的系统归为:类 Unix 系统。类 Unix 系统的介绍:点击查看

- 阅读剩余部分 -

Ubuntu 母公司 Canonical:http://www.canonical.com/](http://www.canonical.com/)Ubuntu 百科:http://baike.baidu.com/item/ubuntuUbuntu Wiki:http://zh.wikipedia.org/zh/UbuntuUbuntu 英文官网:http://www.ubuntu.comUbuntu 中文官网:http://www.ubuntu.org.cnUbuntu kylin 官网:http://cn.Ubuntu.com/desktop

- 阅读剩余部分 -

Ubuntu 安装和分区先下载该系列教程(提取码:4r8w)找到如图箭头目录上的两个视频,并看完,你对 Ubuntu 的安装就有了一个大概的了解,视频中 Ubuntu 虽然版本较早 13.04 的, 但是没关系,对于 Ubuntu 来讲新旧版本安装基本都一样的,所以别担心,驱动的问题也别担心,我们不是要在 Ubuntu 打游戏的,所以常见驱动系统是已经帮我们集成的不会影响使用。但是分区这一块的话,我个人建议是手工分区,视频中没有最终执行手动分区,只是演示了一下又返回了。 我个人是要求你手动分区的。

- 阅读剩余部分 -

介绍简单地讲:修改资源源地址主要是为了加快下载速度,默认的资源源地址在是境外,速度肯定没有境内速度快。了解源这东西:http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8文章的重点是页面最下面,每个版本的源地址都是不一样的,所以要懂得替换对应的版本英文名称,各个版本的英文名称大家自己找下,然后进行修改。修改源

- 阅读剩余部分 -