当常数未知时,在O(n)和O(n ^ 2)之间选择正确的算法

Ank*_*kur 0 java algorithm

我已经为两个算法提供了解决相同问题的运行时函数.让我们说 -

对于第一算法:( T(n) = an + b在n中线性)
对于第二算法:( T(n) = xn^2 + yn + z在n中的二次)

每本书都说线性时间比二次更好,当然它更大n(多大?).我觉得基于常量a,bx,y和大变化的定义z.

你能不能让我知道如何找到n我们应该从algo2切换到algo1的门槛,反之亦然(是否只能通过实验找到?).如果有人能解释如何在专业软件开发组织中完成,我将不胜感激.

我希望我能解释一下我的问题,如果没有,请告诉我.

在此先感谢您的帮助.

PS - 实现将使用Java,并且预计将在各种平台上运行.我觉得非常难估计常数a,b,x,yz数学.我们如何解决专业软件开发中的这种困境?

Jac*_*ope 5

我会一直使用O(n),对于较小的n,它可能会较慢,但无论如何n都很小.如果代码尝试为每个数据集选择最佳算法,则代码中增加的复杂性将使调试和维护变得更加困难.

  • O(n)与O(n ^ 2)+一些选择使用哪种算法的方法对于所有情况都可能更慢(因为选择算法需要额外的时间)而不仅仅是O(n). (2认同)