由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个题 weighted random sampling
相关主题
问个题c++定义bignum
问个题: 找read-only array中duplicate的数我发现我竟然学会了12种tree traversal的办法
问个题请问怎样写没有parent pointer的BST iterator?
问一道微软面试题L家的高频题merge k sorted arrays giving iterators求讨论!
一个经典的随机数的问题。求教。A, A, G, G, L, C, Z, U 面经 + offer
请教一道产生随机数的问题reverse an array
Google电面看到一个题目
失荆州 - G电面经问个stl的iterator问题
相关话题的讨论汇总
话题: sum话题: max话题: weight话题: random话题: 产生
进入JobHunting版参与讨论
1 (共1页)
j*****n
发帖数: 1545
1
1个array里面每个数对应1个weight,比如[1,2,3]的 weigh
t 分别是[10,20,30], 叫你从[1,2,3]里面按照weight产生1
个随机数, 比如这里面,产生3的概率是产生1的概率的3倍。
简单的做法就是把这些weight加起来,从[10,20,30]变成[10,30
,60],然后产生1个从[0,60]的uniform随机数,看这个数是在哪个区间,
[0,10],[10,30]还是[30,60] 就知道应该返回1,2,3中间哪
个了。
问题是有没有做法可以不需要执行这个sum的过程,因为如果array很大很大,
这种sum很可能就overflow了。
h****e
发帖数: 928
2
用double存sum不行吗?

【在 j*****n 的大作中提到】
: 1个array里面每个数对应1个weight,比如[1,2,3]的 weigh
: t 分别是[10,20,30], 叫你从[1,2,3]里面按照weight产生1
: 个随机数, 比如这里面,产生3的概率是产生1的概率的3倍。
: 简单的做法就是把这些weight加起来,从[10,20,30]变成[10,30
: ,60],然后产生1个从[0,60]的uniform随机数,看这个数是在哪个区间,
: [0,10],[10,30]还是[30,60] 就知道应该返回1,2,3中间哪
: 个了。
: 问题是有没有做法可以不需要执行这个sum的过程,因为如果array很大很大,
: 这种sum很可能就overflow了。

l*****a
发帖数: 14598
3
也overflow呢?

【在 h****e 的大作中提到】
: 用double存sum不行吗?
h****e
发帖数: 928
4
那就用BigNum之类的。

【在 l*****a 的大作中提到】
: 也overflow呢?
k***g
发帖数: 58
5
把数都放到int array,size of sum,O(1)即可,也不用search了
★ Sent from iPhone App: iReader Mitbbs 7.56 - iPad Lite
X*K
发帖数: 87
6
是个办法,不过sum都溢出了,这array得有多大。
j*****n
发帖数: 1545
7
就是一些海量数据的玩意, 我现在是把每个数都先scale down 一下,再加,会好一些
。 搜了一下 也没有什么好办法,都还是得加一加
g***s
发帖数: 3811
8
max_v = 0;
for i = 1 to n{
if (weight[i] > max_v) {
sum = sum * (max_v / weight[i]) ;
max_v = weight[i];
}
sum += weigh[i] / max_v;
if ( random(1) <= ( (weight[i]/max_v) / (sum) )
r = a[i];
}
return r;
max_v is alway the max value of weigh [0..i]
sum <= i

【在 j*****n 的大作中提到】
: 1个array里面每个数对应1个weight,比如[1,2,3]的 weigh
: t 分别是[10,20,30], 叫你从[1,2,3]里面按照weight产生1
: 个随机数, 比如这里面,产生3的概率是产生1的概率的3倍。
: 简单的做法就是把这些weight加起来,从[10,20,30]变成[10,30
: ,60],然后产生1个从[0,60]的uniform随机数,看这个数是在哪个区间,
: [0,10],[10,30]还是[30,60] 就知道应该返回1,2,3中间哪
: 个了。
: 问题是有没有做法可以不需要执行这个sum的过程,因为如果array很大很大,
: 这种sum很可能就overflow了。

j*****n
发帖数: 1545
9
先顶再看
l******n
发帖数: 9344
10
divided by sum to turn to [0,1] and then generate a [0,1] uniform

【在 j*****n 的大作中提到】
: 1个array里面每个数对应1个weight,比如[1,2,3]的 weigh
: t 分别是[10,20,30], 叫你从[1,2,3]里面按照weight产生1
: 个随机数, 比如这里面,产生3的概率是产生1的概率的3倍。
: 简单的做法就是把这些weight加起来,从[10,20,30]变成[10,30
: ,60],然后产生1个从[0,60]的uniform随机数,看这个数是在哪个区间,
: [0,10],[10,30]还是[30,60] 就知道应该返回1,2,3中间哪
: 个了。
: 问题是有没有做法可以不需要执行这个sum的过程,因为如果array很大很大,
: 这种sum很可能就overflow了。

相关主题
请教一道产生随机数的问题c++定义bignum
Google电面我发现我竟然学会了12种tree traversal的办法
失荆州 - G电面经请问怎样写没有parent pointer的BST iterator?
进入JobHunting版参与讨论
m*********e
发帖数: 13
11
如果数组大到让sum溢出,那么scale down也会underflow。
我想可以用Metropolis–Hastings,也就是选random pick一个数x1,再random pick一
个数x2,如果weight of x2大于weight of x1,改变状态到x1,否则以一定概率到x2。
After burning in like 10000 iterations, 后面产生的就是要的sample.
这不像是面试SDE的问题,楼主面的是什么职位可以告知么?
j*****n
发帖数: 1545
12
M-H should work, but getting a good proposal distributon is not easy.
proving detailed balance is hard.
Just a bonus question for machine learning data scientist position.

【在 m*********e 的大作中提到】
: 如果数组大到让sum溢出,那么scale down也会underflow。
: 我想可以用Metropolis–Hastings,也就是选random pick一个数x1,再random pick一
: 个数x2,如果weight of x2大于weight of x1,改变状态到x1,否则以一定概率到x2。
: After burning in like 10000 iterations, 后面产生的就是要的sample.
: 这不像是面试SDE的问题,楼主面的是什么职位可以告知么?

g***s
发帖数: 3811
13
就是一道稍微改编的 weighted reservoir sampling algorithm.
始终记录到目前数字weight的最大值。然后用它scale。不能用sum进行scale。

【在 m*********e 的大作中提到】
: 如果数组大到让sum溢出,那么scale down也会underflow。
: 我想可以用Metropolis–Hastings,也就是选random pick一个数x1,再random pick一
: 个数x2,如果weight of x2大于weight of x1,改变状态到x1,否则以一定概率到x2。
: After burning in like 10000 iterations, 后面产生的就是要的sample.
: 这不像是面试SDE的问题,楼主面的是什么职位可以告知么?

j*****n
发帖数: 1545
14
I agree, it is the best answer so far, in my mind.

【在 g***s 的大作中提到】
: 就是一道稍微改编的 weighted reservoir sampling algorithm.
: 始终记录到目前数字weight的最大值。然后用它scale。不能用sum进行scale。

m*********e
发帖数: 13
15
jet你是什么背景的? 我也想找data scientist之类的职位,但是这种职位似乎不愿给
没有经验的fresh grad。可是找不到工作我又哪来的经验,在死循环中痛苦中。
Z*****Z
发帖数: 723
16

~~~~rrdw:这里是不是应该是<=?


【在 g***s 的大作中提到】
: max_v = 0;
: for i = 1 to n{
: if (weight[i] > max_v) {
: sum = sum * (max_v / weight[i]) ;
: max_v = weight[i];
: }
: sum += weigh[i] / max_v;
: if ( random(1) <= ( (weight[i]/max_v) / (sum) )
: r = a[i];
: }

g***s
发帖数: 3811
17
yes. typo.

【在 Z*****Z 的大作中提到】
:
: ~~~~rrdw:这里是不是应该是<=?
:

j*****n
发帖数: 1545
18
1个array里面每个数对应1个weight,比如[1,2,3]的 weigh
t 分别是[10,20,30], 叫你从[1,2,3]里面按照weight产生1
个随机数, 比如这里面,产生3的概率是产生1的概率的3倍。
简单的做法就是把这些weight加起来,从[10,20,30]变成[10,30
,60],然后产生1个从[0,60]的uniform随机数,看这个数是在哪个区间,
[0,10],[10,30]还是[30,60] 就知道应该返回1,2,3中间哪
个了。
问题是有没有做法可以不需要执行这个sum的过程,因为如果array很大很大,
这种sum很可能就overflow了。
h****e
发帖数: 928
19
用double存sum不行吗?

【在 j*****n 的大作中提到】
: 1个array里面每个数对应1个weight,比如[1,2,3]的 weigh
: t 分别是[10,20,30], 叫你从[1,2,3]里面按照weight产生1
: 个随机数, 比如这里面,产生3的概率是产生1的概率的3倍。
: 简单的做法就是把这些weight加起来,从[10,20,30]变成[10,30
: ,60],然后产生1个从[0,60]的uniform随机数,看这个数是在哪个区间,
: [0,10],[10,30]还是[30,60] 就知道应该返回1,2,3中间哪
: 个了。
: 问题是有没有做法可以不需要执行这个sum的过程,因为如果array很大很大,
: 这种sum很可能就overflow了。

l*****a
发帖数: 14598
20
也overflow呢?

【在 h****e 的大作中提到】
: 用double存sum不行吗?
相关主题
L家的高频题merge k sorted arrays giving iterators求讨论!看到一个题目
A, A, G, G, L, C, Z, U 面经 + offer问个stl的iterator问题
reverse an arrayBloomberg 电面
进入JobHunting版参与讨论
h****e
发帖数: 928
21
那就用BigNum之类的。

【在 l*****a 的大作中提到】
: 也overflow呢?
k***g
发帖数: 58
22
把数都放到int array,size of sum,O(1)即可,也不用search了
★ Sent from iPhone App: iReader Mitbbs 7.56 - iPad Lite
X*K
发帖数: 87
23
是个办法,不过sum都溢出了,这array得有多大。
j*****n
发帖数: 1545
24
就是一些海量数据的玩意, 我现在是把每个数都先scale down 一下,再加,会好一些
。 搜了一下 也没有什么好办法,都还是得加一加
g***s
发帖数: 3811
25
max_v = 0;
for i = 1 to n{
if (weight[i] > max_v) {
sum = sum * (max_v / weight[i]) ;
max_v = weight[i];
}
sum += weigh[i] / max_v;
if ( random(1) <= ( (weight[i]/max_v) / (sum) )
r = a[i];
}
return r;
max_v is alway the max value of weigh [0..i]
sum <= i

【在 j*****n 的大作中提到】
: 1个array里面每个数对应1个weight,比如[1,2,3]的 weigh
: t 分别是[10,20,30], 叫你从[1,2,3]里面按照weight产生1
: 个随机数, 比如这里面,产生3的概率是产生1的概率的3倍。
: 简单的做法就是把这些weight加起来,从[10,20,30]变成[10,30
: ,60],然后产生1个从[0,60]的uniform随机数,看这个数是在哪个区间,
: [0,10],[10,30]还是[30,60] 就知道应该返回1,2,3中间哪
: 个了。
: 问题是有没有做法可以不需要执行这个sum的过程,因为如果array很大很大,
: 这种sum很可能就overflow了。

j*****n
发帖数: 1545
26
先顶再看
l******n
发帖数: 9344
27
divided by sum to turn to [0,1] and then generate a [0,1] uniform

【在 j*****n 的大作中提到】
: 1个array里面每个数对应1个weight,比如[1,2,3]的 weigh
: t 分别是[10,20,30], 叫你从[1,2,3]里面按照weight产生1
: 个随机数, 比如这里面,产生3的概率是产生1的概率的3倍。
: 简单的做法就是把这些weight加起来,从[10,20,30]变成[10,30
: ,60],然后产生1个从[0,60]的uniform随机数,看这个数是在哪个区间,
: [0,10],[10,30]还是[30,60] 就知道应该返回1,2,3中间哪
: 个了。
: 问题是有没有做法可以不需要执行这个sum的过程,因为如果array很大很大,
: 这种sum很可能就overflow了。

m*********e
发帖数: 13
28
如果数组大到让sum溢出,那么scale down也会underflow。
我想可以用Metropolis–Hastings,也就是选random pick一个数x1,再random pick一
个数x2,如果weight of x2大于weight of x1,改变状态到x1,否则以一定概率到x2。
After burning in like 10000 iterations, 后面产生的就是要的sample.
这不像是面试SDE的问题,楼主面的是什么职位可以告知么?
j*****n
发帖数: 1545
29
M-H should work, but getting a good proposal distributon is not easy.
proving detailed balance is hard.
Just a bonus question for machine learning data scientist position.

【在 m*********e 的大作中提到】
: 如果数组大到让sum溢出,那么scale down也会underflow。
: 我想可以用Metropolis–Hastings,也就是选random pick一个数x1,再random pick一
: 个数x2,如果weight of x2大于weight of x1,改变状态到x1,否则以一定概率到x2。
: After burning in like 10000 iterations, 后面产生的就是要的sample.
: 这不像是面试SDE的问题,楼主面的是什么职位可以告知么?

g***s
发帖数: 3811
30
就是一道稍微改编的 weighted reservoir sampling algorithm.
始终记录到目前数字weight的最大值。然后用它scale。不能用sum进行scale。

【在 m*********e 的大作中提到】
: 如果数组大到让sum溢出,那么scale down也会underflow。
: 我想可以用Metropolis–Hastings,也就是选random pick一个数x1,再random pick一
: 个数x2,如果weight of x2大于weight of x1,改变状态到x1,否则以一定概率到x2。
: After burning in like 10000 iterations, 后面产生的就是要的sample.
: 这不像是面试SDE的问题,楼主面的是什么职位可以告知么?

相关主题
hash_map 的遍历问题问个题: 找read-only array中duplicate的数
how to query in the universal hash table?问个题
问个题问一道微软面试题
进入JobHunting版参与讨论
j*****n
发帖数: 1545
31
I agree, it is the best answer so far, in my mind.

【在 g***s 的大作中提到】
: 就是一道稍微改编的 weighted reservoir sampling algorithm.
: 始终记录到目前数字weight的最大值。然后用它scale。不能用sum进行scale。

m*********e
发帖数: 13
32
jet你是什么背景的? 我也想找data scientist之类的职位,但是这种职位似乎不愿给
没有经验的fresh grad。可是找不到工作我又哪来的经验,在死循环中痛苦中。
Z*****Z
发帖数: 723
33

~~~~rrdw:这里是不是应该是<=?


【在 g***s 的大作中提到】
: max_v = 0;
: for i = 1 to n{
: if (weight[i] > max_v) {
: sum = sum * (max_v / weight[i]) ;
: max_v = weight[i];
: }
: sum += weigh[i] / max_v;
: if ( random(1) <= ( (weight[i]/max_v) / (sum) )
: r = a[i];
: }

g***s
发帖数: 3811
34
yes. typo.

【在 Z*****Z 的大作中提到】
:
: ~~~~rrdw:这里是不是应该是<=?
:

b********r
发帖数: 620
35
the idea is great, but just picking bone from egg, why sum<=1? do i miss
anything?

【在 g***s 的大作中提到】
: max_v = 0;
: for i = 1 to n{
: if (weight[i] > max_v) {
: sum = sum * (max_v / weight[i]) ;
: max_v = weight[i];
: }
: sum += weigh[i] / max_v;
: if ( random(1) <= ( (weight[i]/max_v) / (sum) )
: r = a[i];
: }

1 (共1页)
进入JobHunting版参与讨论
相关主题
问个stl的iterator问题一个经典的随机数的问题。求教。
Bloomberg 电面请教一道产生随机数的问题
hash_map 的遍历问题Google电面
how to query in the universal hash table?失荆州 - G电面经
问个题c++定义bignum
问个题: 找read-only array中duplicate的数我发现我竟然学会了12种tree traversal的办法
问个题请问怎样写没有parent pointer的BST iterator?
问一道微软面试题L家的高频题merge k sorted arrays giving iterators求讨论!
相关话题的讨论汇总
话题: sum话题: max话题: weight话题: random话题: 产生