太复杂的算法示例?

时间:2016-10-16 04:54:15

标签: algorithm time-complexity big-o little-o

尽管我在网上搜索过,但由于他们需要花费大量时间来计算,我找不到在实践中无法解决的算法示例。

我试图想出一个例子,例如计算每颗恒星的数量,大小和位置,这些恒星最接近火箭飞船前往阿尔法半人马座。这是一个很好的例子吗?我的意思是,星系近26万亿英里。

编辑: 我正在做一个关于Big-O和Little-O表示法的简短介绍,并想想一些与众不同的事情,为什么问题的解决方案在实践中是可以解决的,但是由于极端原因,它们原则上可能无法解决。大量的时间来计算,因此Big-O用于创建估算的原因。我想与明星合作的原因是因为它似乎比其他一些主题更有趣。

谢谢!

7 个答案:

答案 0 :(得分:2)

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

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

由于必须以多种不同的方式重用相同的数据,而不仅仅是拥有大量数据,因此出现了许多复杂的问题。

答案 1 :(得分:1)

你绝对应该研究NP难题,比如Travelling Salesman Problem。这些都是很好的教学实例,因为它们可以通过不同的策略“解决”,我们仍然在研究它们。

如您所述,保证正确答案的算法通常过于耗费资源而无法在现实生活中实施。感谢Big O,我们知道O((n ^ 2)*(2 ^ n))在机器上运行时输入的尺寸不合适。

我们被迫与表现更好的算法妥协,但可能无法给出最佳或正确的结果。这些算法妥协可以在许多相关的,现实生活中看到 - 一个巧妙的例子是生成Tour of 50 USA Landmarks

答案 2 :(得分:0)

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

你可以尝试看到的另一个有趣的事情是暂停问题。

答案 3 :(得分:0)

截至2009年,采用最先进的算法,花了two years to factor RSA-768,其中只有#34;" 232个十进制数字 - 这是通过并行使用一堆计算机完成的。

可以推测因为RSA 2048因子有多长,它有617个十进制数字。

答案 4 :(得分:0)

你应该真正寻找的不是算法的复杂性,而是潜在问题的复杂性 - 人们可以使用非常低效的算法进行排序,例如迭代所有可能的O(n!)订单,但它没有意味着排序在实践中需要花费很多时间。

让我们考虑两个长度为n的字符串Longest common subsequence中最基本的字符串问题之一。

众所周知,使用动态编程method可以在O(n^2)中解决问题。另一方面,也证明了(paper)对于问题的一般情况,任何算法都需要Ω(n^2)个操作(在某些特殊情况下可以使用更快的算法)。

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

答案 5 :(得分:0)

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

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

因此,一个很好的例子是,有人在保险箱上设置了一个10位数的密码(数字从0到9),你必须猜测它。好吧,有10 ^ 10个组合,你会猜到平均5 * 10 ^ 9次,然后才能正确。但如果它是一个11位数的密码,猜测会花费你十倍的时间。

答案 6 :(得分:0)

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

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

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