做微网站是订阅号还是服务号号,页面设计包括哪些,网站建设公司价格表,admin5站长网对20GB文件进行排序
问题描述
假设有一个20GB的文件#xff0c;每行一个字符串#xff0c;请说明如何对这个文件进行排序
问题分析
20GB的文件很难一次加载到内存中#xff0c;可以采用分块策略#xff0c;先使块内有序#xff0c;在使块间有序。
实现思路
按照给定…对20GB文件进行排序
问题描述
假设有一个20GB的文件每行一个字符串请说明如何对这个文件进行排序
问题分析
20GB的文件很难一次加载到内存中可以采用分块策略先使块内有序在使块间有序。
实现思路
按照给定的内存要求(假定为1G)进行分块分为20个块我们先对每一块进行排序可以使用快速排序等时间复杂度底的排序算法然后进行块的合并使块间有序合并时可以使用两两合并的方式也可以借助堆按照堆合并K个有序链表的方式使用堆合并K个有序链表进行合并。
超大文本中搜索两个单词的最短距离
问题描述
有一个超大文本内部是由很多单词组成的现给定两个单词word1和word2请找出文件中这两个单词的最短距离
问题分析
双重循环可以实现但是时间复杂度过高可以通过两个变量分别指向两个单词在遍历过程中最后出现的位置来实现如此可在线性时间复杂度常数空间复杂度情况下完成。
实现思路
最直接的做法就是遍历文件依次判断遍历到的所有word1与全部word2的距离这种方式的时间复杂度为O(n^2)为了简化操作我们可以拼接下标与单词并将结果存储到List中即list[0I,1am,2a…]合并之后查找更方便一边遍历一边比较就可以了但是数据量过大的话list可能会溢出。事实上不使用list也能够解决。我们定义两个变量index1和index2index1用于指向当前遍历过程中word1出现的位置index2用于指向当前遍历过程中word2出现的位置。index1-index2即为两个单词之间的最短距离。
问题进阶
寻找过程重复多次每次寻找不同单词之间的最短距离
实现思路
可以使用map存储单词和所有下标使用双指针遍历两个单词的下标列表即可得到两个单词之间的最短距离
从10亿数字中寻找最小的100万个数字
问题描述
设计一个算法从10亿数字中寻找最小的100万个数字假设内存足以容纳全部的10亿个数字
问题分析
可以使用快排、选择、和堆三种方式来实现
实现思路
可以使用快速排序的方式使元素按照升序排列然后取前100万个元素 也可以使用选择的方式第一次找到最小的数字第二次找到第二小的数字以此类推第100万次找到第100万小的数字 还可以使用大顶堆来实现设置一个元素容量为100万的大顶堆堆未满时直接加入元素堆满后只有当当前元素小于堆顶元素时才移除堆顶元素并加入当前元素遍历结束后堆中的元素即为最小的前100万个数字