算法设计与分析-随机算法(概率算法)
概率算法是步骤不明确,答案不一定。
与概率性算法相对的是确定性算法,确定性算法既每一计算步骤都是确定的,有穷的步骤,明确的答案。
1.数值随机化算法#
常用于数值问题的求解,得到的往往是近似解,且近似解的精确度随着计算时间的增加而不断提高。
2.Las Vegas(拉斯维加斯算法)#
总是或者给出正确的解,或者无解。
注:得到的一定是正确的解。
拉斯维加斯算法。假如有一把锁,给我100把钥匙,只有1把是对的。于是我每次随机拿1把钥匙去试,打不开就再换1把。我试的次数越多,打开(最优解)的机会就越大,但在打开之前,那些错的钥匙都是没有用的。这个试钥匙的算法,就是拉斯维加斯的——尽量找最好的,但不保证能找到。
3.Monte Carlo(蒙特卡罗算法)#
总是给出解,但是偶尔可能会产生非正确的解。(疑惑,都不知道得到的是不是对的)
注:多次运行算法,每次运行时的随机选择都互相独立,可以使产生非正确解的概率减小到任意小。
举个例子,假如筐里有100个苹果,让我每次闭眼拿1个,挑出最大的。于是我随机拿1个,再随机拿1个跟它比,留下大的,再随机拿1个……我每拿一次,留下的苹果都至少不比上次的小。拿的次数越多,挑出的苹果就越大,但我除非拿100次,否则无法肯定挑出了最大的。这个挑苹果的算法,就属于蒙特卡罗算法——尽量找好的,但不保证是最好的。
4.舍伍德算法#
总能求得问题的一个解,且解总是正确的。
注:当一个算法在最坏情况下的复杂性与其在平均情况下的复杂性有较大差别时,可在这个确定性算法中引入随机性将它改造成一个舍伍德算法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现