“真实世界”中的O复杂性评估?
最近在一次采访中,我问了几个与技术问题过程中出现的各种算法的Big-O有关的问题。 我认为我在这方面做得并不好......自从我参加编程课程后的10年中,我们被要求计算算法的Big-O,但我还没有关于任何事情的“大O”的讨论我一直在努力或设计。 我参与了许多与其他团队成员以及与我合作过的关于代码复杂性和速度的架构师的讨论,但我从未参与过实际在项目中使用Big-O计算的团队。 讨论总是“考虑到我们对数据的理解,是否有更好或更有效的方法来做到这一点?” 从来没有“这个算法的复杂性是什么”?
我想知道人们是否真的在谈论他们的代码的“大O”这个真实的词?
它没有太多的使用它,更多的是你了解它的含义。
有些程序员没有意识到使用O(N ^ 2)排序算法的结果。
我怀疑除了那些在学术界工作的人以外每天都会在愤怒中使用Big-O复杂性分析。
没有不必要的n平方
根据我的经验,您没有多少关于它的讨论,因为它不需要讨论。 在实践中,根据我的经验,所有发生的事情是,你发现有些东西很慢,并且当它实际上可能是O(n log n)或O(n)时,发现它是O(n ^ 2),然后你去更改。 除了“这是n平方,请修复它”之外,没有任何讨论。
所以是的,根据我的经验,你确实使用它,但是只能在“降低多项式的阶数”的基本意义上,而不是在一些高度调整的“是的,但如果我们切换到这个疯狂的算法的分析,我们会从logN增加到Ackerman函数的倒数“或者一些这样的废话。 任何小于多项式的东西,理论就会出现在窗口中,然后切换到分析(例如,甚至在O(n)和O(n log n)之间做出决定,测量实际数据)。
大O符号是相当理论性的,而在实践中,你对实际的性能分析结果更感兴趣,这给你一个关于你的性能如何的难题。
你可能有两个排序算法,本书的O(n^2)
和O(nlogn)
上限,但分析结果可能表明更有效的人可能有一些开销(这不反映在你找到的理论界限对于它)以及您正在处理的具体问题集,您可以选择理论上效率较低的排序算法。
底线:在现实生活中,分析结果通常优先于理论运行时间界限。
链接地址: http://www.djcxy.com/p/39665.html