根据我的理解,随机算法可能会给出错误的答案。例如,使用收缩算法来解决图形最小割问题,你需要运行算法n ^ 2 * ln(n)次以便失败的可能性得到正确的答案最多是1 / n。无论失败的可能性有多小,答案都可能不正确,那么我们何时才允许错误答案?
答案 0 :(得分:0)
首先,我认为您需要区分不同类别的随机算法:
A makeImage()
是一种随机w.r.t的算法。正确性。你问题中的随机最小割算法是这种算法的一个例子。
A Monte Carlo algorithm是一种随机w.r.t的算法。运行时间。例如,随机快速排序就是这样一种算法。
你的问题似乎意味着蒙特卡罗算法。
蒙特卡罗算法是否适合您的问题,可能无法客观地回答,因为它基于Las Vegas algorithm之类的东西。给定两种算法 A 和 B ,然后每次调用 A 或 B 需要一些时间 t 并为您提供正确性为 c 的结果。实用程序 U(t,c)是一个随机变量,只有你可以确定 U A (T,C)的分布比 U B (T,C)更好或更差。一些示例,其中算法 A 的执行速度是 B 的两倍,但是概率 1e-6 的错误:
如果这些是网站上的偏好推荐,那么您的网站响应速度可能是竞争对手的两倍,这样做的风险很小,客户很少会得到错误的建议。< / p>
如果这些是核反应堆的控制系统(借用TemplateTypedef的评论),那么稍微有可能失败可能不值得节省时间(例如,你可能会更好地投资两倍于快速运行较慢的算法)。
上面的两个例子表明,对于不同的设置,两个选项中的每一个都可能是正确的。事实上,效用理论很少显示出明显错误的选择。然而,在本书[{3}}的介绍中,作者做给出了避免蒙特卡罗算法的谬论的例子。 ecomonic theory of utility的概率是α(我忘了它的值)。因此,避免运行蒙特卡罗算法的误差概率远低于α,可能只是不合理的。
答案 1 :(得分:0)
您始终需要分析算法的属性,并确定在您的应用程序中是否可以承受非最佳答案的风险。 (如果答案是布尔值,那么&#34;非最佳&#34;与&#34;错误相同。&#34;)
有很多种编程问题,其中某些答案接近最优并且在合理时间内获得很多比提供的最佳答案 >太晚了或根本没有。
旅行商问题就是一个例子。如果您是沃尔玛,并且需要为每组特定城市计划每晚的送货路线,那么 路线接近最佳路线要好于没有路线或天真选择的路线或最好的路线从现在起2天内获得的可能路线。
随机算法提供了多种保证。它们通常具有error <= F(cost)
形式,其中error
和cost
几乎可以是任何形式。成本可以用运行时间表示,或者花费多少重复运行来寻找更好的答案。空间也可能代价。错误可能是错误的1/0答案的概率,距离最佳结果的距离度量,错误组件的离散计数等等。
有时你只需忍受一个可能错误的答案,因为没有其他有用的选择。大数字的原始性测试属于这一类。尽管存在多项式时间确定性测试,但它们仍然比为所有实际目的产生正确答案的概率测试慢得多。
例如,如果你有一个布尔随机函数,其中True结果总是正确的,但False在50%的时间都是错误的,那么你的状态非常好。 (Miller-Rabin素性测试实际上比这更好。)
假设您可以负担40次运行算法的费用。如果任何一个运行说False,你知道答案是假的。如果它们全部为真,则真实答案的假概率大约为2 ^ 40 = 1 /(1万亿)。
即使在安全关键应用中,这也许是一个很好的结果。在一生中被闪电击中的几率大约是1 / 10,000。我们都生活在那里,不再考虑它。