尽管我在网上搜索过,但由于他们需要花费大量时间来计算,我找不到在实践中无法解决的算法示例。
我试图想出一个例子,例如计算每颗恒星的数量,大小和位置,这些恒星最接近火箭飞船前往阿尔法半人马座。这是一个很好的例子吗?我的意思是,星系近26万亿英里。
编辑: 我正在做一个关于Big-O和Little-O表示法的简短介绍,并想想一些与众不同的事情,为什么问题的解决方案在实践中是可以解决的,但是由于极端原因,它们原则上可能无法解决。大量的时间来计算,因此Big-O用于创建估算的原因。我想与明星合作的原因是因为它似乎比其他一些主题更有趣。
谢谢!
答案 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符号才能说明。
我希望这个例子“有趣”。