问题:如何从N个元素中等概率抽取K个元素(N > K)方法:首先构建一个可放k个元素的蓄水池,将序列的前k个元素放入蓄水池中,然后从第k+1个元素开始,以k/i (k=k)被选中的概率为: 在他出现时被选中的概率 * 在他出现以后不被换走的概率,即:k/j * j /j+1。。。n-1/n = k/...
分类:
编程语言 时间:
2015-11-01 22:36:56
阅读次数:
176
这道题从高到低建图,因为有无解的情况,所以从海边可建造蓄水池的地方开始搜索,如果最后一行有搜不到的,那么直接统计一下个数,输出就好。显然搜索不能dfs,深度太大会爆栈啊,所以bfs也可以实现。至于有解的情况,我们考虑一个性质,一个点向下传递,在最后一行能够便利到的点一定是联通的,否则的话是无解的情况...
分类:
其他好文 时间:
2015-10-09 21:28:32
阅读次数:
217
题目:给一副扑克牌和一个随机数函数,设计一个洗牌算法。解析:最直观的思路是什么?很简单,每次从牌堆中随机地拿一张出来。那么,第一次拿有52种可能,拿完后剩下51张;第二次拿有51种可能,第三次拿有50种可能,…,一直这样随机地拿下去直到拿完最后1张,我们就从52!种可能中取出了一种排列,这个排列对应...
分类:
其他好文 时间:
2015-09-17 13:15:09
阅读次数:
247
蓄水池算法要解决的问题就是在不知道流入数据量多少的情况下,依旧可以随机从这些数中选取K个,乍一听好神奇,其实分析一下背后的概率知识,思想还是很简单的,相信看完我的介绍和证明,你也会觉得很简单。假设要求随机选择K个元素,假设一共流入的元素有n个。 首先数组a[0...k-1]表示最后返回的结果,最开....
分类:
编程语言 时间:
2015-09-11 16:05:15
阅读次数:
142
#!/usr/bin/env python# -*- coding=utf8 -*-import sysimport osimport random#input split 1565 #>>> 3000000/1565.0#1916.932907348243#2000K = 2000pool = [...
分类:
其他好文 时间:
2015-09-01 01:37:24
阅读次数:
351
【无线液位传输器应用案例】高位蓄水池水位无线遥控抽水泵方案 一、方案介绍 本方案采用433MHz自主无线通信方式,没有运行费用,实时通信,并借助公用GSM网络,通过短信实现远程报警。 ...
分类:
其他好文 时间:
2015-07-08 11:12:15
阅读次数:
128
长度为N的数据流,要从中随机取得k个数据,N很大(可能大于你的内存和磁盘容量)且未知,只能遍历一次,求怎样可以取得完全随机的k个数据。
方法为:
1、定义一个长度为k的数组存储前k个数据
2、数据流流动,当输入的数据流的数据数量为i(k
完成这两步之后便可以实现在长度为N的数据流中取出k个随机数的目的了。
接下来将会证明对于N个数据,每个数据被取到的概率均为k/N。
证...
分类:
编程语言 时间:
2015-06-21 02:04:00
阅读次数:
133
问题定义: ????给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率...
分类:
编程语言 时间:
2015-05-27 17:30:37
阅读次数:
139
在数据流处理中的一个常见问题就是数据采样问题。我们希望从流中选择一个子集,以便能够对它进行查询并给出统计性上对整个流具有代表性的结果。
一、蓄水池采样
具体问题是我们要从数据流中随机抽取k个元素。如果数据流长度m事先已经知道,那这个问题就非常简单,每个元素以k/m的概率选取即可。但这个问题要求m未知,那就不太好搞了。这个问题的解法是保存一个k大小的窗口。数据流的前k个元素依次加入到窗口。对于数...
分类:
其他好文 时间:
2015-05-21 09:14:43
阅读次数:
137
文件下载http://files.cnblogs.com/files/tenlee/gw_netflow.pdf给定一个有向图G=(V,E),把图中的边看作管道,每条边上有一个权值,表示该管道的流量上限。给定源点s和汇点t,现在假设在s处有一个水源,t处有一个蓄水池,问从s到t的最大水流量是多少网络...
分类:
其他好文 时间:
2015-04-25 22:40:44
阅读次数:
208