【问题标题】:What is the "Problem size" for bubble sort and distribution sort algorithm?冒泡排序和分布排序算法的“问题大小”是多少?
【发布时间】:2019-07-17 06:57:56
【问题描述】:

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

有两种算法冒泡排序和分布排序,我认为冒泡排序的问题大小是“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”,但根据我的教授的说法,这是错误的。我想知道冒泡排序和分布排序算法的问题大小的正确答案是什么?

【问题讨论】:

    标签: algorithm input bubble-sort counting-sort


    【解决方案1】:

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

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

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

    PS:如果这是高中教授的话,很有可能他也没有完全理解复杂性理论。

    【讨论】:

    • 您能否给我一些更一般的信息,以便我证明自己是对的?因为它可以帮助我通过一门课程,因为我只需要 2 分即可通过
    • @Hemlata - 我认为你都不对 - 在这两种情况下,输入大小都是 n,你能给我一些链接,显示输入大小是 n-1。或者给我更多关于你的任务的细节?
    • 我在任何网站上都找不到关于输入大小的信息,也没有在任何网站上说这两种算法的输入大小是多少,所以我无法提供链接:(还有我的任务是:您的报告必须描述您对适用于这两种算法的“问题大小”的选择。这就是我应该根据这两种算法编写的内容。即使输入大小为 n,那么根据您的说法,我的一个答案仍然是正确的,对吧?
    • 另外,你能看看我的另一个问题吗?半小时前我问了,谢谢。
    【解决方案2】:

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

    当您争辩说 BubbleSort 的输入大小与 DistributionSort 采用 same 输入时的输入大小不同时,您的想法是错误的。问题/输入的大小就是问题/输入的大小。

    当您试图弄清楚 nn-1 是否正确时,您也在思考错误。我们甚至没有指定任何单位—— nn-1 什么?在现实生活中的所有情况下,输入都会占用我们甚至不计算在内的一些恒定数量的额外空间。 (栈帧指针等)

    当我们不计算这些东西时,因为我们将如何仅在渐近符号表达式中使用这个“大小”,所以 n 之间没有区别n-1.

    【讨论】:

    • 请问这两种算法的问题大小的正确答案是什么?
    • 由于nn-1没有区别,你应该使用n,因为它更简单。当您知道 -1 无关紧要时,您不会说 n-1
    • 那么,两种算法的输入大小都是“n”,对吧?但就像你说的 -1 无所谓,所以我的答案是否也正确?
    • 好的,但是如果“n”是答案,那么我的答案是对的吗?
    • 如果您在两种情况下都被问到“问题大小”,而您在一种情况下回答 n,那么该情况可能被认为是正确的,除非更准确需要像“Θ(n)”这样的答案。
    猜你喜欢
    • 2019-04-18
    • 2018-02-08
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2020-12-19
    • 2018-05-04
    相关资源
    最近更新 更多