Algorithm 冒泡排序的时间复杂性

Algorithm 冒泡排序的时间复杂性,algorithm,sorting,data-structures,bubble-sort,Algorithm,Sorting,Data Structures,Bubble Sort,最佳情况下气泡排序的时间复杂度解释为O(n),而不是θ(n)?既然最佳案例可以定义为: 最佳情况=选择最佳输入时完成的最快时间。(例如,排序算法的最佳情况是已排序的数据。)。 编辑:-我看到了关于堆栈溢出和其他资源的其他问题,这些问题都是基于最佳情况下冒泡排序的时间复杂度。他们都将其解释为O(n),我有一个问题,为什么最佳情况下的时间复杂度写为O(n)而不是θ(n)?对于许多情况,您可以使用O(f)或θ(f)。一个是免费使用它的最佳情况,最坏情况,平均情况,或任何其他情况下,你可以定义 O(f)

最佳情况下气泡排序的时间复杂度解释为O(n),而不是θ(n)?既然最佳案例可以定义为: 最佳情况=选择最佳输入时完成的最快时间。(例如,排序算法的最佳情况是已排序的数据。)。 编辑:-我看到了关于堆栈溢出和其他资源的其他问题,这些问题都是基于最佳情况下冒泡排序的时间复杂度。他们都将其解释为O(n),我有一个问题,为什么最佳情况下的时间复杂度写为O(n)而不是θ(n)?

对于许多情况,您可以使用O(f)或θ(f)。一个是免费使用它的最佳情况,最坏情况,平均情况,或任何其他情况下,你可以定义

O(f)表示所描述情形的渐近上界。例如,你甚至可以说冒泡排序是O(n10)——虽然这不是非常有用的信息,人们会期望使用最有界函数,即O(n2)——你也可以说在最好的情况下冒泡排序是O(n)

θ(f)为所描述的情形设置了一个渐近上界和下界。因此,当上限和下限不相同时,不能总是使用它。例如,我们不能说气泡排序是θ(n2),也不能说它是θ(n):它只是没有这么严格的界限。如果采用合并排序,那么有一个很紧的界限:它的时间复杂度为θ(nlogn)

但是,当您仅将冒泡排序限制为最佳情况时,可以使用θ:冒泡排序的最佳情况是θ(n)

注意,根据单词“最坏”和“最好”的性质,您可以始终使用θ符号来描述相应的复杂性(至少在已知的情况下)。另一方面,您不需要使用它。你也可以用O表示法

在实践中,人们可能经常假设,对算法的最坏或最佳情况使用O(f)是为了给出可能的最低界限。在这种情况下,它实际上也是θ(f)


θ(f)也是O(f),但不一定相反

在最好的情况下,你仍然需要扫描整个输入以确定它是否被排序。不清楚你是否认为θ(n)相对于O(n)是正确的,或者其他什么。顺便说一句,当数组已经排序时,并不是每个排序算法都有最佳情况。例如,如果您总是选择第一个元素作为轴心,则排序数组是快速排序的最坏情况。@kaya3我的意思是,对于冒泡排序,应该写入θ(n)而不是O(n)。@jornsharpe由于扫描整个输入并不能保证O(n),您能详细说明一下吗?θ(n)是O(n)的子集,因此如果函数在θ(n)中那么它也在O(n)中。