作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
一道面试题:
给定函数 f(x),1/4 次返回 0,3/4 次返回 1。用 f(x) 写一个函数 g(x),1/2 次返回 0,1/2 次返回 1。
我的实现是:
function g(x) = {
if (f(x) == 0){ // 1/4
var s = f(x)
if( s == 1) {// 3/4 * 1/4
return s // 3/16
} else {
g(x)
}
} else { // 3/4
var k = f(x)
if( k == 0) {// 1/4 * 3/4
return k // 3/16
} else {
g(x)
}
}
}
我说的对吗?你的解决方案是什么?(你可以使用任何语言)
最佳答案
如果连续调用 f(x) 两次,可能会出现以下结果(假设对 f(x) 的连续调用是独立的、同分布的试验:
00 (probability 1/4 * 1/4)
01 (probability 1/4 * 3/4)
10 (probability 3/4 * 1/4)
11 (probability 3/4 * 3/4)
01 和 10 以相等的概率出现。所以迭代直到你得到其中之一例,然后适本地返回 0 或 1:
do
a=f(x); b=f(x);
while (a == b);
return a;
可能很想每次迭代只调用一次 f(x) 并跟踪这两个最近的值,但那是行不通的。假设第一卷是 1,概率为 3/4。您将循环直到第一个 0,然后返回 1(概率为 3/4)。
关于algorithm - 一道面试题: About Probability,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5051970/
我正在大学学习“软件模式和设计”类(class),该类(class)的书是“企业应用程序架构模式 - Fowler” 星期三的考试,老师没有任何过去的考试,我可以通过考试看看考试会是什么样子。 有人学
我是一名优秀的程序员,十分优秀!