【问题标题】:What make Bucket Sort good?是什么让桶排序好?
【发布时间】:2020-08-26 15:47:39
【问题描述】:

所以我偶然发现了基于非比较排序的算法,确切地说是桶排序,我无法完全理解它为什么好。

我有一个想法,但我需要有人确认。

假设我要对一个 1000 个元素的数组进行排序。如果它是均匀分布的,并分桶成 10 个桶,每个桶有 100 个元素。

使用 n log(n) 算法将 100 个元素排序 10 次 = 10 * 100 log(100) = 1000 log(100) = 2000

同时使用 n log(n) 算法对 1000 个元素进行排序 = 1000 log(1000) = 3000

所以算法利用了如果 n = m + l 则 (m+l)^2 > m^2 + l^2 并且同样适用于 n log(n) 算法

所以数据分桶越均匀,桶排序的性能就越好

这样对吗?

以及桶的最佳数量是多少? (我觉得这是一个时空权衡的事情,但也取决于被排序数据的一致性)

【问题讨论】:

    标签: algorithm sorting bucket-sort


    【解决方案1】:

    但您必须考虑到分桶步骤的复杂度为 1000。 这给了你:

    • 桶排序:1000 + 10 * 100 log(100) = 3000
    • 比较排序:1000 * log(1000) = 3000

    但您可以再次应用分桶策略对较小的数组进行排序。这是https://en.wikipedia.org/wiki/Radix_sort

    所宣传的复杂度是O(n.w),其中w 是表示元素的位数。线性?比归并排序好吗?等一下,w 通常有多大?是的,对于通常的东西,你必须使用log(n)位来表示元素,所以回到n log(n)

    正如您所说,这是一种时间/内存交易,而基数排序是当您有固定的内存预算时(但谁没有呢?)。如果您可以随输入大小线性增长内存,请使用n 存储桶,您就有了O(n) 排序。

    示例参考(有很多!):https://www.radford.edu/nokie/classes/360/Linear.Sorts.html

    【讨论】:

      猜你喜欢
      • 2015-10-10
      • 2011-04-26
      • 2011-05-26
      • 2017-09-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2011-01-08
      • 2019-07-17
      相关资源
      最近更新 更多