我们可以看到不同算法的最佳,最差和平均情况下的时间复杂度,然后假设进行合并排序,最好情况下应该为Ω(n logn),但是给定的是O(n logn)。同样,对于一般情况,应该给定Θ(n logn),但也使用大的O表示法。而且,无论是最佳情况还是普通情况,此O标记都在此表中的所有位置使用。请解释一下为什么。
答案 0 :(得分:0)
实际上,有两种版本的渐近符号在使用。
形式上严格的渐近渐近性。如果您是在数学环境中工作(例如,您试图证明某个表达式的严格界限,或者您试图争论为什么某种算法不存在),那么您绝对需要从O中进行选择,Ω,o,ω,Θ等在讨论过程中正确使用,因为它们具有特定的技术含义。例如,这就是为什么如果您阅读CS理论论文时会看到各种渐进符号混合在一起的原因。
非正式的外行用法。大多数执业的软件工程师都对big-O表示法感兴趣,因为它与整体程序效率有关。在这种情况下,big-O标记的使用在技术上在数学上并不正确,但仍然可以很好地代表其含义。例如,某人可能决定以“对第一个数据结构进行操作需要时间O(log n),而对第二个数据结构进行操作需要时间O(n)”为理由选择一个数据结构,即使这样的陈述是类似于说“ Amit比Pranav短,因为Amit的身高最高2m,而Pranav的身高最高5m”。尽管从数学上来说这不是正确的,但以该术语经常被使用的方式来说,通常可以清楚地理解其含义。
这些符号所面临的挑战是,如果您期望对算法的运行时间进行超级严格,精确,数学上准确的描述,并且您使用big-O符号进行了外行使用,那么您会感到困惑,因为说的可能是错的。同样,如果您是一位习惯于Big-O符号的外行版本的软件工程师,并且有人开始在Θ和Ω符号之间折腾,那么这可能会造成混淆,因为您可能不习惯看到它。
我认为您问题的“最佳”答案是“制作这张桌子的人可能应该使用更精确的渐近符号,因此即使从技术上讲他们在做的也不理想,但呈现这种情况是一种相对普遍的做法这样的信息。”由于我倾向于在Theoryland中花费大量时间,因此我个人希望他们切换到此处使用不同的渐近表示法,但是由于我还与许多软件工程师进行了交流,所以我完全理解为什么他们没有这样做。