- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑以下算法。
function Rand():
return a uniformly random real between 0.0 and 1.0
function Sieve(n):
assert(n >= 2)
for i = 2 to n
X[i] = true
for i = 2 to n
if (X[i])
for j = i+1 to n
if (Rand() < 1/i)
X[j] = false
return X[n]
Sieve(k) 作为 k 的函数返回 true
的概率是多少?
最佳答案
让我们递归地定义一系列随机变量:
令 Xk,r 表示指标变量,取值 1
当且仅当 X[k] == true
变量 i
取值 r
的迭代。
为了使用更少的符号并使代码更直观,我们将只写 Xk,i 这是有效的,尽管自从 i
取值 i
当第一个引用循环中的变量而后者引用变量的值时会造成混淆。
现在我们注意到:
P(Xk,i ~ 0) = P(Xk,i-1 ~ 0) + P(Xk,i-1 ~ 1) * P(Xk-1,i-1 ~ 1) * 1/i
(使用 ~ 代替 = 只是为了使其易于理解,因为 = 否则会有两个不同的含义并且看起来很困惑)。
这个等式成立是因为 X[k]
在 i
迭代结束时为 false
或者因为它在 i-1
结束时为 false,或者在该点为 true
,但在最后一次迭代中 X[k-1]
为 true
,因此我们进入循环并以 1/i 的概率更改 X[k]
。这些事件是互斥的,因此没有交集。
递归的基础就是 P(Xk,1 ~ 1) = 1 和 P(X2,i ~ 1) = 1 .
最后,我们简单地注意到 P(X[k] == true
) = P(Xk,k-1 ~ 1)。
这可以很容易地编程。这是一个使用 memoisation 的 javascript 实现(如果使用嵌套索引比字典索引的字符串连接更好,您可以进行基准测试,您还可以重新设计计算以保持相同的运行时复杂性,但不会通过构建自下而上和不是自上而下)。自然地,该实现将具有 O(k^2)
的运行时复杂度,因此它对于任意大的数字不切实际:
function P(k) {
if (k<2 || k!==Math.round(k)) return -1;
var _ = {};
function _P(n,i) {
if(n===2) return 1;
if(i===1) return 1;
var $ = n+'_'+i;
if($ in _) return _[$];
return _[$] = 1-(1-_P(n,i-1) + _P(n,i-1)*_P(n-1,i-1)*1/i);
}
return _P(k,k-1);
}
P(1000); // 0.12274162882390949
更有趣的是 1/i 概率如何改变事物。 IE。概率是否收敛到 0 或某个其他值,如果收敛,改变 1/i 会如何影响它。
当然,如果您在 mathSE 上提问,您可能会得到更好的答案 - 这个答案非常简单,我相信有一种方法可以对其进行操作以获得直接公式。
关于algorithm - Eratosthenes 概率筛法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11492811/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我有实体: @Entity @Table(name = "CARDS") public class Card { @ManyToOne @JoinColumn(name = "PERSON_I
我正在尝试计算二维多边形的表面法线。我正在使用 OpenGL wiki 中的 Newell 方法来计算表面法线。 https://www.opengl.org/wiki/Calculating_a_S
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 9 年前。 Improve this
我这里有以下 XML: Visa, Mastercard, , , , 0, Discover, American Express siteonly, Buyer Pay
即将发生的 Google 政策变更迫使我们实现一个对话框,以通知欧盟用户有关 Cookie/设备标识符用于广告和分析的情况。我只想向欧盟用户显示此对话框。我不想使用额外的权限(例如 android.p
本文分享自华为云社区《华为大咖说 | 企业应用AI大模型的“道、法、术” ——道:认知篇》,作者:华为云PaaS服务小智。 本期核心观点 上车:AGI是未来5~10年内,每个人都无法回避的技
我有一个与酒精相关的网站,需要先验证年龄,然后才能让他们进入该网站。我使用 HttpModule 来执行此操作,该模块检查 cookie,如果未设置,我会将它们重定向到验证页面。我验证他们的年龄并存储
在欧盟,我们有一项法律,要求网页请求存储 cookie 的许可。我们大多数人都了解 cookie 并同意它们,但仍然被迫在任何地方明确接受它们。所以我计划编写这个附加组件(ff & chrome),它
以下在 C 和/或 C++ 中是否合法? void fn(); inline void fn() { /*Do something here*/ } 让我担心的是,第一个声明看起来暗示函数将被定义
我是一名优秀的程序员,十分优秀!