水塘抽样(解决k个数据均匀抽样问题)

水塘抽样

背景

给定一个数据流,但是数据流的长度N很大,且N直到处理完所有数据之前都不可知,如何在只遍历一遍数据(O(N))的情况下,能够随机选取出这组数据的k个概率相等的均匀抽样。(包含未知大小数据流中随机选取k个数据,使得每个数据抽取到的概率相等)

(1)仅扫描数据一次。

(2)空间复杂度为O(K)。空间复杂度与整个数据量无关,只与抽样大小有关。

(3)扫描到数据的前n 个数据时(n>k),保存当前已扫描数据的k个均匀抽样。

思路

将取出数据数量k当做一个水塘

(1)如果接受的数据量小于k,则依次放入采样数组中

(2)当接收到第i个数据,i大于等于k时,在[0,i]的范围内取一个随机数d 如果d落在了[0,k-1]的范围内,则取接收到的第i个数据替换采样数组中下标等于d位置上的值

  • 情况一: 初始化的时候,也就是水塘未满之前,每一个数被选中的概率都一样都是1
  • 情况二:水塘满了的时候

这时候

(1)当k+1元素未被选中的时候,数组中没有元素替换。所以k+1个元素被选中的概率为 k/k+1

(2)当k+1元素被选中的时候,数组中某个元素被k+1个元素替换掉了。那么第k+1个元素被选中的概率为 k / k + 1 k/k+1 k/k+1,这就是新元素出现在水塘中的概率。水库中任意一个元素被替换掉的概率是:(k/k+1)*(1/k)=1/(k+1),意即首先要第k+1个元素被选中,然后该元素在k个元素中被选中。那它未被替换的概率就是1-1/(k+1)=k/(k+1)。可以看出来,旧元素和新元素出现的概率是相等的。

k=1

首先考虑简单的情况,k=1时,如何制定策略:

假设数据流含有N个数,我们知道如果要保证所有的数被抽到的概率相等,那么每个数抽到的概率应该为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nq0gHLrN-1650884011739)(https://www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7BN%7D)] 。

那我们可以这样做:

  • 遇到第1个数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V1PvVcTC-1650884011741)(https://www.zhihu.com/equation?tex=n_1)] 的时候,我们保留它, [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V3dzQNBl-1650884011741)(https://www.zhihu.com/equation?tex=p%28n_1%29%3D1)]
  • 遇到第2个数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r1guQco1-1650884011742)(https://www.zhihu.com/equation?tex=n_2)] 的时候,我们以 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JiofxRR9-1650884011742)(https://www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7B2%7D)] 的概率保留它,那么 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CdxGm8f4-1650884011742)(https://www.zhihu.com/equation?tex=p%28n_1%29%3D1%5Ctimes+%5Cfrac%7B1%7D%7B2%7D%3D%5Cfrac%7B1%7D%7B2%7D)] ,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3FsovM7w-1650884011743)(https://www.zhihu.com/equation?tex=p%28n_2%29%3D%5Cfrac%7B1%7D%7B2%7D)]
  • 遇到第3个数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sLoKUVDI-1650884011743)(https://www.zhihu.com/equation?tex=n_3)] 的时候,我们以 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xztwuuHd-1650884011743)(https://www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7B3%7D)] 的概率保留它,那么 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88vDNQMU-1650884011744)(https://www.zhihu.com/equation?tex=p%28n_1%29%3Dp%28n_2%29%3D%5Cfrac%7B1%7D%7B2%7D%5Ctimes%281-%5Cfrac%7B1%7D%7B3%7D%29%3D%5Cfrac%7B1%7D%7B3%7D)] , [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-di4Yq5pz-1650884011744)(https://www.zhihu.com/equation?tex=p%28n_3%29%3D%5Cfrac%7B1%7D%7B3%7D)]
  • ……
  • 遇到第i个数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7uXePSG0-1650884011745)(https://www.zhihu.com/equation?tex=n_i)] 的时候,我们以 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5YTToCRK-1650884011745)(https://www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7Bi%7D)] 的概率保留它,那么 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MbfOdDFV-1650884011745)(https://www.zhihu.com/equation?tex=p%28n_1%29%3Dp%28n_2%29%3Dp%28n_3%29%3D%5Cdots%3Dp%28n_%7Bi-1%7D%29%3D%5Cfrac%7B1%7D%7Bi-1%7D%5Ctimes%281-%5Cfrac%7B1%7D%7Bi%7D%29%3D%5Cfrac%7B1%7D%7Bi%7D)] , [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zvBHmOX8-1650884011746)(https://www.zhihu.com/equation?tex=p%28n_i%29%3D%5Cfrac%7B1%7D%7Bi%7D)]

这样就可以看出,对于k=1的情况,我们可以制定这样简单的抽样策略:

数据流中第i个数被保留的概率为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n6XovGX7-1650884011746)(https://www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7Bi%7D)] 。只要采取这种策略,只需要遍历一遍数据流就可以得到采样值,并且保证所有数被选取的概率均为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pl51IJdA-1650884011747)(https://www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7BN%7D)] 。

k>1

对于k>1的情况,我们可以采用类似的思考策略:

仍然假设数据流中含有N个数,那么要保证所有的数被抽到的概率相等,每个数被选取的概率必然为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vE2zuhEX-1650884011747)(https://www.zhihu.com/equation?tex=%5Cfrac%7Bk%7D%7BN%7D)] 。

  • 对于前k个数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w6zaleOX-1650884011748)(https://www.zhihu.com/equation?tex=n_1%2Cn_2%2C%5Cdots%2Cn_k)] ,我们保留下来,则 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SlUKpFTJ-1650884011748)(https://www.zhihu.com/equation?tex=p%28n_1%29%3Dp%28n_2%29%3D%5Cdots%3Dp%28n_k%29%3D1)] (下面连等采用 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5SieuP3s-1650884011748)(https://www.zhihu.com/equation?tex=p%28n_%7B1%3Ak%7D%29)] 的形式)
  • 对于第k+1个数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jhuHIfeC-1650884011749)(https://www.zhihu.com/equation?tex=n_%7Bk%2B1%7D)] ,我们以 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xJUoEUXJ-1650884011749)(https://www.zhihu.com/equation?tex=%5Cfrac%7Bk%7D%7Bk%2B1%7D)] 的概率保留它(这里只是指本次被保留下来),那么前k个数中的 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jp9ZixoD-1650884011749)(https://www.zhihu.com/equation?tex=n_r%28r%5Cin%7B1%3Ak%7D%29)] 被保留的概率可以这样表示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3GQclxXp-1650884011750)(https://www.zhihu.com/equation?tex=p%28n_r%E8%A2%AB%E4%BF%9D%E7%95%99%29%3Dp%28%E4%B8%8A%E4%B8%80%E8%BD%AEn_r%E8%A2%AB%E4%BF%9D%E7%95%99%29%5Ctimes%28p%28n_%7Bk%2B1%7D%E8%A2%AB%E4%B8%A2%E5%BC%83%29%2Bp%28n_%7Bk%2B1%7D%E8%A2%AB%E4%BF%9D%E7%95%99%29%5Ctimes+p%28n_r%E6%9C%AA%E8%A2%AB%E6%9B%BF%E6%8D%A2%29%29)] ,即 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y9ZB1pK9-1650884011750)(https://www.zhihu.com/equation?tex=p_%7B1%3Ak%7D%3D%5Cfrac%7B1%7D%7Bk%2B1%7D%2B%5Cfrac%7Bk%7D%7Bk%2B1%7D%5Ctimes+%5Cfrac%7Bk-1%7D%7Bk%7D%3D%5Cfrac%7Bk%7D%7Bk%2B1%7D)]
  • 对于第k+2个数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZqVI6VI0-1650884011750)(https://www.zhihu.com/equation?tex=n_%7Bk%2B2%7D)] ,我们以 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QnsfJcbL-1650884011751)(https://www.zhihu.com/equation?tex=%5Cfrac%7Bk%7D%7Bk%2B2%7D)] 的概率保留它(这里只是指本次被保留下来),那么前k个被保留下来的数中的 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T7UjKQzH-1650884011751)(https://www.zhihu.com/equation?tex=n_r%28r%5Cin%7B1%3Ak%7D%29)] 被保留的概率为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g14lvWGE-1650884011751)(https://www.zhihu.com/equation?tex=p_%7B1%3Ak%7D%3D%5Cfrac%7Bk%7D%7Bk%2B1%7D%5Ctimes%28%5Cfrac%7B2%7D%7Bk%2B2%7D%2B%5Cfrac%7Bk%7D%7Bk%2B2%7D%5Ctimes+%5Cfrac%7Bk-1%7D%7Bk%7D%29%3D%5Cfrac%7Bk%7D%7Bk%2B1%7D%5Ctimes%5Cfrac%7Bk%2B1%7D%7Bk%2B2%7D%3D%5Cfrac%7Bk%7D%7Bk%2B2%7D)]
  • ……
  • 对于第i(i>k)个数 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RG2WvTua-1650884011752)(https://www.zhihu.com/equation?tex=n_i)] ,我们以 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-emJJyWpN-1650884011752)(https://www.zhihu.com/equation?tex=%5Cfrac%7Bk%7D%7Bi%7D)] 的概率保留它,前i-1个数中的 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t3TqJYnU-1650884011752)(https://www.zhihu.com/equation?tex=n_r%28r%5Cin%7B1%3Ai-1%7D%29)] 被保留的概率为 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-haVXyWgY-1650884011752)(https://www.zhihu.com/equation?tex=p_%7B1%3Ak%7D%3D%5Cfrac%7Bk%7D%7Bi-1%7D%5Ctimes+%28%5Cfrac%7Bi-k%7D%7Bi%7D%2B%5Cfrac%7Bk%7D%7Bi%7D%5Ctimes+%5Cfrac%7Bk-1%7D%7Bk%7D%29%3D%5Cfrac%7Bk%7D%7Bi-1%7D%5Ctimes%5Cfrac%7Bi-1%7D%7Bi%7D%3D%5Cfrac%7Bk%7D%7Bi%7D)]

这样,我们可以制订策略:

对于前k个数,我们全部保留,对于第i(i>k)个数,我们以 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7xqE1x0v-1650884011753)(https://www.zhihu.com/equation?tex=%5Cfrac%7Bk%7D%7Bi%7D)] 的概率保留第i个数,并以 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fpAQfVOm-1650884011753)(https://www.zhihu.com/equation?tex=%5Cfrac%7B1%7D%7Bk%7D)] 的概率与前面已选择的k个数中的任意一个替换。

例题

398. 随机数索引

难度中等214收藏分享切换为英文接收动态反馈

给你一个可能含有 重复元素 的整数数组 nums ,请你随机输出给定的目标数字 target 的索引。你可以假设给定的数字一定存在于数组中。

实现 Solution 类:

  • Solution(int[] nums) 用数组 nums 初始化对象。
  • int pick(int target)nums 中选出一个满足 nums[i] == target 的随机索引 i 。如果存在多个有效的索引,则每个索引的返回概率应当相等。

示例:

输入
["Solution", "pick", "pick", "pick"]
[[[1, 2, 3, 3, 3]], [3], [1], [3]]
输出
[null, 4, 0, 2]

解释
Solution solution = new Solution([1, 2, 3, 3, 3]);
solution.pick(3); // 随机返回索引 2, 3 或者 4 之一。每个索引的返回概率应该相等。
solution.pick(1); // 返回 0 。因为只有 nums[0] 等于 1 。
solution.pick(3); // 随机返回索引 2, 3 或者 4 之一。每个索引的返回概率应该相等。

提示:

  • 1 <= nums.length <= 2 * 104
  • -231 <= nums[i] <= 231 - 1
  • targetnums 中的一个整数
  • 最多调用 pick 函数 104
class Solution {
    vector<int> &nums;
public:
    Solution(vector<int> &nums) : nums(nums) {}

    int pick(int target) {
        int ans;
        for (int i = 0, cnt = 0; i < nums.size(); ++i) {
            if (nums[i] == target) {
                ++cnt; // 第 cnt 次遇到 target
                if (rand() % cnt == 0) {
                    ans = i;
                }
            }
        }
        return ans;
    }
};

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/random-pick-index/solution/sui-ji-shu-suo-yin-by-leetcode-solution-ofsq/

这个解法,其实就是相当于在target的情况下,随机选取到1个数的概率是一致的。

所以

image-20220425185158247

如果你是一名专业的java高级架构师,现在你在面试知识,如下是 数据结构与算法的面试知识体系结构图 请按照这个体系给出每个知识点的学习理解方便记忆和消化,同时给出每个知识点的高频面试的标准面试答案,结合项目经验给出解释和实战 数据结构与算法面试核心知识体系 ├── 一、复杂度分析基础 │ ├── 时间复杂度 │ │ ├── 大O表示法:O(1), O(logn), O(n), O(nlogn), O()等含义? │ │ ├── 最好、最坏、平均时间复杂度分析? │ │ └── 递归算法的时间复杂度分析:主定理? │ ├── 空间复杂度 │ │ ├── 算法运行所需的额外空间?原地操作含义? │ │ ├── 递归调用的空间复杂度(调用栈深度)? │ │ └── 如何权衡时间与空间复杂度? │ └── 实际应用 │ ├── 如何根据数据规模选择合适的算法?(10⁵数据不能用O()) │ ├── 常数项优化在实际工程中的意义? │ └── 摊还分析:某些操作的平均代价? ├── 二、数组、链表与字符串 │ ├── 数组(Array) │ │ ├── 特点:随机访问O(1),插入删除O(n)? │ │ ├── 双指针技巧:快慢指针、左右指针、滑动窗口? │ │ ├── 前缀和数组:快速计算区间和? │ │ └── 差分数组:快速进行区间增减操作? │ ├── 链表(Linked List) │ │ ├── 单链表、双链表、循环链表区别? │ │ ├── 虚拟头节点(dummy node)的作用? │ │ ├── 常见问题:反转链表、检测环、相交链表、合并有序链表? │ │ └── 链表排序:归并排序实现? │ └── 字符串(String) │ ├── 字符串匹配算法:KMP、Rabin-Karp? │ ├── 回文串问题:中心扩展法、动态规划? │ ├── 字符串操作:翻转、替换、分割? │ └── 不可变字符串的优势?(线程安全、缓存哈希值) ├── 三、栈、队列与哈希表 │ ├── 栈(Stack) │ │ ├── LIFO特性,应用场景:函数调用栈、括号匹配? │ │ ├── 单调栈:解决"下一个更大元素"问题? │ │ └── 最小栈:如何O(1)栈中最小值? │ ├── 队列(Queue) │ │ ├── FIFO特性,BFS算法基础? │ │ ├── 优先队列(堆):获最值,Dijkstra算法? │ │ ├── 单调队列:解决滑动窗口最值问题? │ │ └── 双端队列(Deque):实现滑动窗口? │ └── 哈希表(Hash Table) │ ├── 原理:哈希函数、冲突解决(链地址法、开放寻址法)? │ ├── 设计哈希集合、哈希映射? │ ├── 实际应用:缓存(LRU)、快速查找、去重? │ └── 哈希碰撞攻击原理?如何设计好的哈希函数? ├── 四、树形数据结构 │ ├── 二叉树基础 │ │ ├── 遍历方式:前序、中序、后序(递归/迭代)? │ │ ├── 二叉搜索树(BST):性质、查找、插入、删除? │ │ ├── 平衡二叉树:AVL树、红黑树基本概念? │ │ └── 完全二叉树、满二叉树定义? │ ├── 树的变种 │ │ ├── 堆(Heap):大顶堆、小顶堆,优先队列实现? │ │ ├── Trie树(前缀树):字符串前缀匹配? │ │ ├── 线段树:区间查询、区间更新? │ │ └── 树状数组(BIT):单点更新、前缀查询? │ └── 树的应用 │ ├── 最近公共祖先(LCA)问题? │ ├── 二叉树的序列化与反序列化? │ ├── 树的直径、高度、路径和问题? │ └── 哈夫曼编码:数据压缩? ├── 五、图论算法 │ ├── 图的表示 │ │ ├── 邻接矩阵 vs 邻接表?空间时间复杂度? │ │ ├── 有向图、无向图、加权图? │ │ └── 图的遍历:BFS、DFS实现? │ ├── 最短路径算法 │ │ ├── Dijkstra算法:非负权图,贪心策略? │ │ ├── Bellman-Ford算法:处理负权边? │ │ ├── Floyd-Warshall算法:多源最短路径? │ │ └── A算法:启发式搜索? │ ├── 最小生成树 │ │ ├── Prim算法:从点开始扩展? │ │ ├── Kruskal算法:按边排序+并查集? │ │ └:适用场景:网络布线、电路设计? │ └── 其他图算法 │ ├── 拓扑排序:有向无环图(DAG),课程安排? │ ├── 并查集(Union-Find):连通分量,路径压缩优化? │ ├── 欧拉路径/回路:一笔画问题? │ └── 强连通分量:Kosaraju或Tarjan算法? ├── 六、排序与搜索算法 │ ├── 排序算法 │ │ ├── 比较排序:冒泡、选择、插入、归并、快速、堆排序? │ │ ├── 非比较排序:计数排序、桶排序、基数排序? │ │ ├── 稳定性分析:哪些是稳定排序? │ │ └── 各排序算法的时间/空间复杂度总结? │ ├── 搜索算法 │ │ ├── 二分查找:模板、边界处理、旋转数组搜索? │ │ ├── DFS深度优先:回溯法,排列组合问题? │ │ ├── BFS广度优先:最短路径,层级遍历? │ │ └── 启发式搜索:A算法,估价函数设计? │ └── 实际应用 │ ├── 海量数据排序:外部排序,归并思想? │ ├── 第K大/小元素:快速选择算法O(n)? │ ├── 在排序数组中查找目标值的起始和结束位置? │ └── 寻找旋转排序数组中的最小值? ├── 七、动态规划(DP) │ ├── 基本思想 │ │ ├── 重叠子问题、最优子结构? │ │ ├── 自顶向下(记忆化递归) vs 自底向上(迭代)? │ │ └── 状态定义、状态转移方程、边界条件? │ ├── 经典问题 │ │ ├── 背包问题:0-1背包、完全背包、状态压缩? │ │ ├── 最长公共子序列(LCS)、最长递增子序列(LIS)? │ │ ├── 编辑距离:字符串转换的最小操作数? │ │ ├── 股票买卖问题:多种限制条件? │ │ └── 打家劫舍、零钱兑换、路径问题? │ └── 解题技巧 │ ├── 如何识别DP问题?状态设计技巧? │ ├── 空间优化:滚动数组? │ ├── 输出具体方案而不仅仅是数值? │ └── 数位DP、状压DP、区间DP简介? ├── 八、贪心算法 │ ├── 基本概念 │ │ ├── 贪心选择性质?局部最优导致全局最优? │ │ ├── 与动态规划的区别?贪心无法回溯? │ │ └── 如何证明贪心策略的正确性? │ ├── 典型问题 │ │ ├── 区间调度:最多不重叠区间? │ │ ├── 哈夫曼编码:最优前缀码? │ │ ├── 分糖果、跳跃游戏、加油站问题? │ │ ├:贪心+排序:根据某个指标排序后贪心? │ │ └:贪心+优先队列:实时获最优解? │ └── 应用场景 │ ├── 最小生成树:Prim和Kruskal算法中的贪心思想? │ ├── 最短路径:Dijkstra算法的贪心选择? │ ├── 数据压缩:贪心构造最优编码? │ └── 任务调度:合理安排任务顺序? ├── 九、高级数据结构与算法 │ ├── 高级数据结构 │ │ ├── 跳表(Skip List):Redis有序集合实现? │ │ ├── 布隆过滤器(Bloom Filter):判断存在性,可能误判? │ │ ├── LRU缓存:哈希表+双向链表实现? │ │ ├── 一致性哈希:分布式系统数据分片? │ │ └── 倒排索引:搜索引擎核心? │ ├── 数学与位运算 │ │ ├── 位操作技巧:判断奇偶、交换数值、找出单独数字? │ │ ├── 素数判断、最大公约数(GCD)、最小公倍数(LCM)? │ │ ├── 快速幂算法:计算a^b % mod? │ │ └── 随机数生成:拒绝采样,水塘抽样? │ └── 高级算法思想 │ ├── 分治算法:归并排序、快速排序、最近点对? │ ├── 回溯算法:N皇后、数独、全排列? │ ├── 位运算优化状态表示(状态压缩)? │ ├:扫描线算法:矩形面积并、天际线问题? │ └:摩尔投票法:寻找多数元素? └── 十、实战技巧与系统设计 ├── 解题方法论 │ ├── 解题步骤:理解题意 -> 分析 -> 选择数据结构 -> 编码 -> 测试? │ ├── 边界条件考虑:空输入、极端值、溢出? │ ├── 代码规范:变量命名、注释、模块化? │ └── 测试用例设计:正常情况、边界情况、错误情况? ├── 系统设计中的应用 │ ├── LRU缓存设计:哈希表+双向链表? │ ├── 排行榜设计:跳表、有序集合? │ ├── 短网址系统:发号器、哈希算法? │ ├:朋友圈设计:并查集管理社交关系? │ └:搜索提示:Trie树实现自动补全? └── 海量数据处理 ├── 分治思想:大数据分解为小数据? ├── 哈希分片:数据均匀分布到多台机器? ├── 位图法:判断存在性,节省空间? ├:堆的应用:Top K问题? └:外部排序:内存不足时如何排序?
最新发布
09-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值