气泡排序和分布排序算法的“问题大小”是多少?

时间:2019-07-17 06:57:56

标签: algorithm input bubble-sort counting-sort

已编辑:我之前提到过“输入大小”,但我的意思是我已编辑帖子的“问题大小”。

有两种算法,冒泡排序和分布排序,我认为冒泡排序的问题大小为“ n-1”,因为操作执行了“ n-1”次,而分配排序的问题大小为“ n”。但是根据我的教授,他认为气泡排序问题的大小为“ n”,分布排序问题的大小为“ n-1”。我想知道我是对的吗?

我在网上查了一下,到处都说冒泡排序是“ n-1”次,分布排序是“ n”次,但是我的教授说的恰恰相反,我无法理解他。有人可以向我解释我是否错了?

  Bubble sort: 

    Algorithm1 BubbleSort(A[0..n – 1])
    // Input: Array A[0..n – 1] of numbers
    // Output: Array A[0..n – 1] of numbers sorted in non-decreasing order

   do
   swapped ← false
   for i ← 0 to n – 2 do
     if A[i] > A[i+1] then
       swap (A[i], A[i+1] )
       swapped ← true
     while swapped
       return A

  Distribution sort:
 // Input: Array A[0..n – 1] of numbers between L and U (with L ≤ U)
 // Output: Array S[0..n – 1] of A’s numbers sorted in non-decreasing order

  for j ← 0 to U – L do D[j] ← 0
  for i ← 0 to n – 1 do D[A[i] – L] ← D[A[i] – L] + 1
  for j ← 1 to U – L do D[j] ← D[j – 1] + D[j]
  for i ← n – 1 down to 0 do
     j ← A[i] – L
     S[D[j] – 1] ← A[i]
     D[j] ← D[j] – 1
     return S

我希望冒泡排序的问题大小为“ n-1”,分布排序的问题大小为“ n”,但根据我的教授,这是错误的。我想知道气泡排序和分布排序算法的问题大小的正确答案是什么?

2 个答案:

答案 0 :(得分:2)

这既是-非常令人困惑的问题,也是非常令人困惑的答案。

在两种情况下,您都需要所有输入,因此输入大小为n,这也与复杂度理论有关,其中n具有与n-1相同的复杂度,因此没关系。

在执行了多少次的情况下,冒泡排序最多执行O(n^2),分布排序对多个排序算法进行了分组,但是排序没有比O(n*log n)快的

PS:如果这是来自高中教授,那么他很有可能对复杂性理论也没有足够的了解。

答案 1 :(得分:0)

“问题大小”是指输入的大小。该算法不会影响它。

当您认为BubbleSort接受相同输入时,其输入大小与DistributionSort不同时,您的想法是错误的。问题/输入的大小就是问题/输入的大小。

当您试图找出 n n-1 是正确的时,您也在错误地思考。我们甚至都没有指定任何单位- n n-1 什么?而且在现实生活中的所有情况下,输入甚至还会占用一些恒定量的额外空间,而我们甚至都不算。 (堆栈框架指针等)

当我们不计算这些东西时,由于我们将仅在渐近符号的表达式中使用此“大小”,因此 n 之间没有任何区别n-1