蓄水池算法--(java)

news/2024/10/19 7:32:29/

蓄水池算法

  • 蓄水池算法
    • 什么是蓄水池算法
    • 代码演示
  • bfprt算法

蓄水池算法

假设有一个源源吐出不同球的机器, 只有装下10个球的袋子,每一个吐出的球,要么放入袋子,要么永远扔掉 如何做到机器吐出每一个球之后,所有吐出的球都等概率被放进袋子里

什么是蓄水池算法

蓄水池算法(Reservoir Sampling Algorithm)是一种随机算法,用于从未知数量的数据流中随机选择 k 个元素,其中 k 为预设的正整数。该算法的主要思想是在不知道数据流长度的情况下,通过随机选择 k 个元素并将其标记为“蓄水池”,然后从第 k+1 个元素开始,每个元素被选中的概率与之前未被选中的元素数量成比例。

以下是蓄水池算法的详细步骤:

  1. 初始化:将前 k 个元素标记为“蓄水池”,并将其余元素标记为未选中
  2. 从第 k+1 个元素开始遍历数据流:对于每个新元素,以 k/n 的概率将其标记为“蓄水池”(其中 n 是数据流中元素的总数)。如果元素被标记为“蓄水池”,则将其加入蓄水池中,并从数据流中移除。如果元素未被标记为“蓄水池”,则将其保留在数据流中。
  3. 重复步骤 2 直到数据流中的所有元素都被处理

在完成蓄水池算法后,我们可以得到一个大小为 k 的随机样本,其中每个元素被选中的概率相等。由于算法是随机的,因此无法保证样本的准确性,但可以证明,当数据流中的元素数量足够大时,样本的准确性接近于 1。

蓄水池算法的时间复杂度为 O(mn),其中 m 是数据流中的元素数量,n 是每个元素的复杂度,因为需要对每个元素进行标记和移除操作。

代码演示

public static class RandomBox{private int[] bag;private int N;private int count;/*** 初始化* @param capacity*/public RandomBox(int capacity){bag = new int[capacity];N = capacity;count = 0;}/*** 返回[1 , max] 上任何一个随机数*/public int rand(int max){return (int)(Math.random() * max) + 1;}/*** 加入的规则* @param num*/public void add(int num){count++;//袋子没有满时,直接放进去.if (count <= N){bag[count - 1] = num;}else {//    (N / count) 的概率放进袋子中 if (rand(count) <= N){//袋子中(1 / N) 的概率选中一个 仍出去bag[rand(N) - 1] = num;}}}}

bfprt算法

bfprt算法-查找无序数组中第k小的数字


http://www.ppmy.cn/news/950386.html

相关文章

Spring Data JPA使用规则和审计的学习

一、引入依赖 完整的pom文件如下所示: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http…

ChatGPT 对企业意味着什么?

最近,我们终于到达了对话式 AI 的转折点。随着名为ChatGPT的最新语言模型向公众发布,我们很可能会看到企业处理与客户和合作伙伴的沟通以及内容创建的方式发生重大变化。在本文中,我们将讨论什么是 ChatGPT,以及企业如何根据Itransition 的专业知识使用它来简化日常任务。 …

美国有50%企业在用ChatGPT了!一半人表示员工已被AI取代

来源&#xff1a;新智元报道 编辑&#xff1a;Aeneas Ellie 【导读】美国最新调查显示&#xff0c;50%企业已经在用ChatGPT了&#xff0c;一半人表示&#xff0c;ChatGPT已经替代了员工。这一天终于来了&#xff1f; ChatGPT果然开始取代人类了&#xff01; 美国《财富》杂志…

ChatGPT引爆变革:第二个被颠覆的行业——在线客服

引言&#xff1a;随着人工智能技术的不断发展&#xff0c;许多行业都面临着前所未有的变革。ChatGPT&#xff0c;一种先进的自然语言处理技术&#xff0c;在内容创作领域取得了显著成果。如今&#xff0c;它正逐渐进入另一个领域——在线客服。本文将探讨ChatGPT如何改变在线客…

P1403 [AHOI2005] 约数研究

题目描述 科学家们在 Samuel 星球上的探险得到了丰富的能源储备&#xff0c;这使得空间站中大型计算机 Samuel II 的长时间运算成为了可能。由于在去年一年的辛苦工作取得了不错的成绩&#xff0c;小联被允许用 Samuel II 进行数学研究。 小联最近在研究和约数有关的问题&…

栈练习题(逆波兰表达式,有效括号,出入栈次序匹配,最小栈)

目录 基础知识: 中缀表达式和后缀表达式(逆波兰式) 中缀表达式转后缀表达式 后缀表达式求结果 有效括号 栈的压入,弹出序列 最小元素栈 基础知识: 栈:是一种先入后出的数据结构,它的底层是由数组实现的 入栈:push(),出栈pop(),查看栈顶元素peek() 中缀表达式和后缀表…

ChatGPT教程:如何优化我们编写的Python代码?

背景介绍 作为一名程序员&#xff0c;我们经常需要编写Python代码。然而&#xff0c;代码质量的好坏直接关系到程序的可读性、可维护性和可扩展性。因此&#xff0c;我们需要使用一些工具来帮助我们提高代码质量。ChatGPT是一种强大的自然语言处理模型&#xff0c;可以帮助我们…

ChatGPT基础入门教程

ChatGPT 入门教程 ChatGPT 是 OpenAI 开发的一款基于 GPT-3.5 技术的自然语言处理软件&#xff0c;可以用来创建智能聊天机器人。它可以通过分析对话中的用户输入和上下文来回答问题、提供建议等。 安装 你可以在 OpenAI 的网站上注册账号&#xff0c;并申请 API 密钥才能使…