When is it justified to use a O(2^n) algorithm?
本问题已经有最佳答案,请猛点这里访问。
对于许多不同的排序算法选择,在任何例子中使用更高复杂度的算法是否合适?
我能想到的唯一原因是,如果有一个非常短的数组,或者是非常接近要排序的数组,或者只是包含几个不同的数字。
With many different choices of sorting algorithms, is it ever appropriate to use a higher complexity algorithm in any example?
可能是,如果问题的大o复杂性是最坏的情况,你肯定不会被击中,或者你说的
o(2^n)是极端的,尽管…您还必须考虑使用它的原因的稳定性-是否有人(将来包括您)意外地修改了使O(2^n)算法适用性失效的代码,并在调用应用程序时使其有时处于锁定状态,而N高于最初预期,或者数据不太"友好"?
对于大多数事情来说,有必要提前花时间创建一个合理有效、希望可重用的算法,而不必担心,但有时这可能更复杂、更容易出错,而且CPU或内存的好处也不能证明这一点。归根结底,重要的是对您的实际项目的短期和长期影响。
在创建算法代码时,通常会有一种非常简单、显而易见的方法来解决它,以及一种复杂但有效的方法来解决它,快速编写前一种代码以便使用它来测试后一种代码是一个好主意。前者可能被称为"Oracle"实现,因为它相信知道真相:正确的答案。如果它的速度正好足够快,并且您有所讨论的n或数据场景的限制,那么您可能不需要继续进行复杂的实现。