baidu-2011
来源:互联网 发布:php redis抢红包源代码 编辑:程序博客网 时间:2024/05/21 10:33
1、随即采样问题:设rand(s,t)返回[s,t]之间的随机小数,利用该函数在一个半径为R的圆内找随机n个点,并给出时间复杂度分析。
:方案1:
选择2个随即数X=rand(-R,R),Y =rand(-R,R),然后选取X2 + Y2 < R2的点,可以证明选取这些点的概率是相等
时间复杂度 O(N2);
While(N){
X=rand(-R,R);
Y=rand(-R,R);
If( X*X + Y*Y < R * R)
N --;
}
方案2:
这个使用数学中的极坐标来解决,先调用[s1,t1]随机产生一个数r,归一化后乘以半径,得到R*(r-s1)/(t1-s1),然后在调用[s2,t2]随机产生一个数a,归一化后得到角度:360*(a-s2)/(t2-s2)
个人觉得应该先产生rand(0,sqrt(R)),再产生rand(0,360),但是0,和360度是重复的,而且圆的边界上也会选到点。
2、为分析用户行为,系统常需存储用户的一些query,但因query非常多,故系统不能全存,设系统每天只存m个query,现设计一个算法,对用户请求的query进行随机选择m个,请给一个方案,使得每个query被抽中的概率相等,并分析之,注意:不到最后一刻,并不知用户的总请求量。
(1)
先存储m个,
当第N(N>m)个请求来时,m/N概率存储该请求,随机替换m个存储好的请求中的一个.
可见 第N个请求被存储的概率 m/N;
第N-1个请求被存储的概率 m/(N-1)*(1-1/m) = (m-1)/ (N-1)同理类推,当N很大时近似相等?可以得到局部最优解
(2)
思路:如果用户查询的数量小于m,那么直接就存起来。如果用户查询的数量大于m,假设为m+i,那么在1-----m+i之间随机产生一个数,如果选择的是前面m条查询进行存取,那么概率为m/(m+i),如果选择的是后面i条记录中的查询,那么用这个记录来替换前面m条查询记录的概率为m/(m+i)*(1-1/m)=(m-1)/(m+i),当查询记录量很大的时候,m/(m+i)== (m-1)/(m+i),所以每个query被抽中的概率是相等的。
- baidu-2011
- baidu
- Baidu?
- baidu
- baidu
- baidu
- baidu
- ng Baidu Baidu Baidu ang
- BAIDU代码
- baidu试题
- baidu笔试
- baidu笔试
- Baidu搜索
- epoll baidu
- baidu笔试
- Baidu(1)
- Baidu(2)
- Google Baidu
- Instagram用户超1200万,可能与新浪合作
- MAC如何显示隐藏文件和隐藏隐藏文件的命令
- linux内核的运行
- 堆与栈存储效率的一点理解
- IP冲突解决方案
- baidu-2011
- JAVA本地方法调用(2)数组参数传递
- C语言如何 计算程序运行时间?
- UNIX环境高级编程第三章文件I/O 读后笔记
- rpc4Django无法并行开多个RPCURL问题
- WM_NOTIFY
- sqlDbx连接mysql 及乱码
- python中用pdb 来调试
- 能够分页显示的Label控件