我一直在从一本书中学习数据结构和算法,在这本书中,它根据各种排序算法所采取的步骤数来比较时间效率。在这样做的过程中,我对于我们定义的一步感到困惑。
所以虽然不算数。我们考虑最糟糕的情况。我明白了我们是怎么想出来的。冒泡的步骤。但是对于选择排序,我对将每个元素与当前最低值进行比较的部分感到困惑。
例如,在最坏的情况下,我们说5,4,3,2,1,并且假设我们在第一次通过。当我们开始时,5是当前的最低值。当我们移动到4并将其与5进行比较时,我们将当前最低值更改为4.
为什么不将当前最低值更改为4的操作计为交换或附加步骤?我的意思是,这是与比较步骤分开的一步。我所指的那本书指出,在第一个直通中,比较的数量是n-1但是没有。对于n大小的阵列,即使在最坏的情况下,交换仅为1。在这里,他们假设更改当前最低值的步骤是比较步骤的一部分,我认为这不应该是一个有效的假设,因为可以有一个数组,您可以在其中进行比较,但不需要更改最低值当前价值,因此你的号码。步骤最终减少。重点是,我们不能假设没有。在最坏的情况下,第一次通过以进行选择排序的步骤是n-1(比较)+ 1(交换)。它应该大于(n-1)+(1)。
据我所知,选择排序和冒泡排序的时间复杂度分类与大O方法相同,但本书继续声称选择排序的步骤比最坏情况下的冒泡排序更少,而且我'我怀疑。这就是本书所说的:https://ibb.co/dxFP0
答案 0 :(得分:0)
一般来说,在这些类型的练习中,你对算法是O(1),O(n),O(n ^ 2)还是更高的东西感兴趣。你通常对O(1)vs O(2)或O(3n)vs O(5n)不感兴趣,因为对于足够大的n,只有n的幂才重要。
换句话说,每个步骤的复杂性的微小差异,可能有利于2或3甚至10,与选择n = 300或更多额外工作因子的算法无关紧要