由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教一道面试题
相关主题
如果给随即函数rand[1,5] 如何产生rand[1,7]看不懂careercup上一题的答案
求教Careercup 150 上的一道题目用rand5()产生rand7()
问个随机数的问题amazon 新鲜面筋
讨论一道经典题CLSR: how to generate random(a, b) with random(0,1)
请教个弱题:random generator: from 1~5 to 1~7问一道题
google intern 电面面经问道cc150上的题
Google面试回来问一道google面试题
rand5 -> rand7的解法?[合集] 给一个rand5(),写一个rand7()
相关话题的讨论汇总
话题: rand话题: return话题: number话题: case话题: integer
进入JobHunting版参与讨论
1 (共1页)
e****q
发帖数: 1668
1
rand(5) generates a random integer number between [1, 5], how do you
generate a random integer number between [1, 7] when you can only call
rand(5)?
E*******0
发帖数: 465
2
function b=rand()
{
a=rand(5);
b=a*7/5;
}
e****q
发帖数: 1668
3
they ask for 'integer' from [1,7].

【在 E*******0 的大作中提到】
: function b=rand()
: {
: a=rand(5);
: b=a*7/5;
: }

n******r
发帖数: 1247
4
int rand10(){
int x=rand5();
while (x==3) x=rand5();
if (x<3) return rand5();
else return rand5()+5;
}
int rand7(){
int x=rand10();
while (x>7) x=rand10();
return x;
}

【在 e****q 的大作中提到】
: they ask for 'integer' from [1,7].
p***o
发帖数: 3399
5
very easy
sqrt((rand(5)-3)^2)+rand(5)

【在 n******r 的大作中提到】
: int rand10(){
: int x=rand5();
: while (x==3) x=rand5();
: if (x<3) return rand5();
: else return rand5()+5;
: }
: int rand7(){
: int x=rand10();
: while (x>7) x=rand10();
: return x;

g*******y
发帖数: 1930
6
very wrong
两个rand(5)一共产生25中情况
不管你怎么设计mapping方案,都不可能均匀的分配给7个数!因为7不整除25

【在 p***o 的大作中提到】
: very easy
: sqrt((rand(5)-3)^2)+rand(5)

H*M
发帖数: 1268
7
he is a famous performance artist.

【在 g*******y 的大作中提到】
: very wrong
: 两个rand(5)一共产生25中情况
: 不管你怎么设计mapping方案,都不可能均匀的分配给7个数!因为7不整除25

c*********n
发帖数: 1057
8
看不太懂,能解释下么?

【在 n******r 的大作中提到】
: int rand10(){
: int x=rand5();
: while (x==3) x=rand5();
: if (x<3) return rand5();
: else return rand5()+5;
: }
: int rand7(){
: int x=rand10();
: while (x>7) x=rand10();
: return x;

p***o
发帖数: 3399
9
怎么不对啊,不用解释吧
rand(5)可以generate出(1,2,3,4,5)
rand(5)-3=(-2,-1,0,1,2)
所以(rand(5)-3)^2=(0,1,4)
sqrt((rand(5)-3)^2)=(0,1,2)
sqrt((rand(5)-3)^2)+rand(5)=(0,1,2)+(1,2,3,4,5)=(1,2,3,4,5,6,7)
什么整除不整除的,哪有那么复杂啊

【在 g*******y 的大作中提到】
: very wrong
: 两个rand(5)一共产生25中情况
: 不管你怎么设计mapping方案,都不可能均匀的分配给7个数!因为7不整除25

H*M
发帖数: 1268
10
with equal probability

【在 p***o 的大作中提到】
: 怎么不对啊,不用解释吧
: rand(5)可以generate出(1,2,3,4,5)
: rand(5)-3=(-2,-1,0,1,2)
: 所以(rand(5)-3)^2=(0,1,4)
: sqrt((rand(5)-3)^2)=(0,1,2)
: sqrt((rand(5)-3)^2)+rand(5)=(0,1,2)+(1,2,3,4,5)=(1,2,3,4,5,6,7)
: 什么整除不整除的,哪有那么复杂啊

相关主题
google intern 电面面经看不懂careercup上一题的答案
Google面试回来用rand5()产生rand7()
rand5 -> rand7的解法?amazon 新鲜面筋
进入JobHunting版参与讨论
p***o
发帖数: 3399
11
那个没辙,要不把随机改成任意好了,嘿嘿

【在 H*M 的大作中提到】
: with equal probability
H*M
发帖数: 1268
12
no artist here!

【在 p***o 的大作中提到】
: 那个没辙,要不把随机改成任意好了,嘿嘿
c******o
发帖数: 1277
13
first you need to ask if they want uniformed ramdom value
if yes, it is abit hard, the worst case is that
rand(5) + 5* (rand(5)-1) and re do if there the result is 22, 23, 24, 25
and then divide by 3 and get ceiling.
E*******0
发帖数: 465
14
Sorry. I misunderstood the question.
E*******0
发帖数: 465
15
A={1,2};
B={1,2,3,4};
C=all pairs of one number from A and one number from B except {1,1}
So the number of set C is 2*4-1=7.
Set a number [1,7] for each element from C.
Namely,
Rand(7)
{
while(1)
{A=Rand(5);
if (A<=2) break;}
while(1)
{B=Rand(5);
if ((B<=4) && (A!=1) && (B!=1)) break;}
switch
case A=1, B=2: return 1;
case A=1, B=3: return 2;
case A=1, B=4: return 3;
case A=2, B=1: return 4;
case A=2, B=2: return 5;
case A=2, B=
f****r
发帖数: 997
16
想到过正确的办法,但在效率上不完美
如果有1-5的等概率函数,那么产生1-4,1-3,1-2的等概率函数都很容易,比如1-4的
等概率函数,可以这样:
while (Rand(5)!=5)
return Rand(5)
以Rand(2)为例,当然不需要把3-5都去除,可以这样:
while (Rand(5)!=5)
{
if Rand(5)<3
return 1
else rerurn 2
}
由于任何整数都可以表示为二进制,用三次Rand(2)表示三位二进制,可以等概率出现0
-7,剩下的就是把出现0的时候去掉(结果是0时,再随机一次)即可。
h***r
发帖数: 726
17
为什么一定要表示成2进制呢?
對原题,把7表示成5进制。
推而广之,效率就比表示成二进制要效率高了。

【在 f****r 的大作中提到】
: 想到过正确的办法,但在效率上不完美
: 如果有1-5的等概率函数,那么产生1-4,1-3,1-2的等概率函数都很容易,比如1-4的
: 等概率函数,可以这样:
: while (Rand(5)!=5)
: return Rand(5)
: 以Rand(2)为例,当然不需要把3-5都去除,可以这样:
: while (Rand(5)!=5)
: {
: if Rand(5)<3
: return 1

f****r
发帖数: 997
18
当然不必要表示成2进制,只是提供一个思路,2进制是最容易让人理解,也是适应面最
广的。
但遗憾的是不管用几进制,都达不到完美效率。不知道有没有更好的办法。
H*****L
发帖数: 5705
19
把7表示成5进制? could u elaborate more?

【在 h***r 的大作中提到】
: 为什么一定要表示成2进制呢?
: 對原题,把7表示成5进制。
: 推而广之,效率就比表示成二进制要效率高了。

h***r
发帖数: 726
20
7 = 12 (5进制)

【在 H*****L 的大作中提到】
: 把7表示成5进制? could u elaborate more?
t****t
发帖数: 6806
21
这个题, 如果答案不用循环reject就一定是错的. 因为5^n永远不能被7整除, 所以如果
固定产生n个[1,5]的均匀随机整数, 可能得到的状态空间永远不能分成7等分, 即不能
产生[1,7]的均匀随机整数, if all states are used.
所以你说的"完美效率"是不可能达到的. 但是这很正常.

【在 f****r 的大作中提到】
: 当然不必要表示成2进制,只是提供一个思路,2进制是最容易让人理解,也是适应面最
: 广的。
: 但遗憾的是不管用几进制,都达不到完美效率。不知道有没有更好的办法。

1 (共1页)
进入JobHunting版参与讨论
相关主题
[合集] 给一个rand5(),写一个rand7()请教个弱题:random generator: from 1~5 to 1~7
问一个老题google intern 电面面经
明天onsite,求下bless了Google面试回来
Amazon On-site 面经+求bless,快两周了还没消息。rand5 -> rand7的解法?
如果给随即函数rand[1,5] 如何产生rand[1,7]看不懂careercup上一题的答案
求教Careercup 150 上的一道题目用rand5()产生rand7()
问个随机数的问题amazon 新鲜面筋
讨论一道经典题CLSR: how to generate random(a, b) with random(0,1)
相关话题的讨论汇总
话题: rand话题: return话题: number话题: case话题: integer