1

正如我在网上搜索的那样,由于计算时间长,我找不到在实践中无法解决的算法示例。

我试图想一个例子,比如计算每颗恒星的数量、大小和位置,这些恒星在前往半人马座阿尔法星的过程中最靠近火箭飞船。这会是一个很好的例子吗?我的意思是,恒星系统距离我们近 26 万亿英里。

编辑:我正在做一个关于 Big-O 和 Little-O 表示法的简短介绍,并想思考一些不同寻常的东西,为什么问题的解决方案可以在实践中解决,但原则上它们可能无法解决,因为计算的时间非常长,因此使用 Big-O 来创建估计。我想和星星一起去的原因是因为它看起来比其他一些主题更有趣。

谢谢!

4

7 回答 7

2

想象一下,您有一个数组,表示一副 52 张牌[AS, 2S, 3S, ... , JH, QH, KH],并且您想要返回这些牌可以洗牌的所有不同方式。

第一张牌有 52 种可能性,第二张牌有 51 种可能性,第三张有 50 种可能性,以此类推。一共有52个阶乘(52 * 51 * 50 * ... * 3 * 2 * 1)组合,超过10^67(接近我认为的宇宙原子数)。

许多复杂的问题源于必须以许多不同的方式重用相同的数据,而不仅仅是拥有大量数据。

于 2016-10-16T05:01:11.520 回答
1

您绝对应该研究 NP-hard 问题,例如Traveling Salesman Problem。这些都是很好的教学示例,因为它们可以通过不同的策略“解决”,我们仍在研究它们。

正如您所描述的,保证正确答案的算法通常过于耗费资源,无法在现实生活中实现。多亏了大 O,我们知道 O((n^2)*(2^n)) 在机器上运行以获得适当大小的输入是不可行的。

我们被迫与性能更好的算法妥协,但可能无法给出最佳或正确的结果。这些算法妥协可以在许多相关的现实生活示例中看到 - 一个巧妙的案例正在生成50 个美国地标之旅

于 2016-10-16T06:00:06.050 回答
0

您的问题并不令人惊讶,因为它看起来具有线性复杂性(O(n) 时间)。如果您将行程的长度加倍,那么您的程序执行所需的时间只会加倍。尽管如此,您可能只是在寻找具有指数解决方案的问题,例如旅行商问题,随着城市数量的增加,该问题很快变得几乎无法解决。查找时间复杂度以获取更多信息。

您可以尝试查看的另一件有趣的事情是停止问题。

于 2016-10-16T04:57:54.637 回答
0

使用截至 2009 年的最先进算法,需要两年时间来分解 RSA-768,它“只有”232 个十进制数字——这是通过并行使用一堆计算机来完成的。

可以推测将RSA 2048 分解需要多长时间,它有 617 个十进制数字。

于 2016-10-16T05:04:20.747 回答
0

您真正应该寻找的不是算法的复杂性,而是潜在问题的复杂性 - 可以使用非常低效的算法进行排序,例如迭代所有可能的O(n!)顺序,但这并不意味着排序在实践中需要很多时间.

让我们考虑一个最基本的字符串问题两个长度的字符串的最长公共子序列n

众所周知,这个问题可以O(n^2)用动态规划的方法来解决。另一方面,也证明了(论文)对于问题的一般实例,任何算法都需要Ω(n^2)运算​​(在某些特殊情况下更快的算法是可能的)。

因此,如果你想为数百万个字符的字符串解决这个问题的一般实例(对于现代计算来说没什么大不了的),事实上,任何算法都会花费与10^12操作成正比的时间。事实上,在计算生物学中,寻找 DNA 序列的最长公共子序列的问题非常重要,而且这些序列非常长,因此这是您所要求的现实世界问题的一个很好的例子。

于 2016-10-16T05:19:54.010 回答
0

Big-Oh 表示法的主要目的不是估计程序在某些特定输入上的运行时间。这是为了分析程序在增加输入大小时减速的速度。两倍大小的输入运行时间是两倍、四倍还是十六倍?

Big-Oh 最能说明问题的例子是问题的输入非常小,但运行时间很长。而且,当您稍微增加输入大小时,它需要的时间要长得多。一些增长最快的算法需要指数或阶乘时间,它们通常涉及查看元素的所有排列(所有不同的顺序,或元素的排列方式)。

因此,一个很好的例子是,有人在保险箱上设置了一个 10 位数的密码(数字从 0 到 9),而您必须猜测它。嗯,有 10^10 种组合,在猜对之前你会平均猜 5*10^9 次。但如果是 11 位密码,猜测将花费您十倍的时间。

于 2016-10-16T05:24:21.413 回答
0

一名德国黑客正试图登录 NSA 的服务器以找出核导弹发射代码。他知道所有的 NSA 密码必须至少有 16 个字符,admin 密码是每天午夜随机生成的,并且可以包含所有 ASCII。他在第三次世界大战开始前还有 26 天。

他应该尝试拯救世界吗?或者去度假。只有大 O 符号才能说明问题。

我希望这个例子是“有趣的”。

于 2016-10-16T05:44:47.887 回答