【问题标题】:Randomize Random Array Quicksort随机化随机数组快速排序
【发布时间】:2017-09-08 01:42:05
【问题描述】:

我是计算机科学专业的第一年,我了解到可以通过在开始排序之前对数组进行随机化来避免快速排序的最坏情况。

但是当输入已经是随机的时,这是否也适用?我认为随机排列数组的机会比随机排列的几率更大吗?

【问题讨论】:

  • 如果有人给你一副已经洗过的牌,再次洗牌的可能性有多大?随机化一个已经随机化的数组可以让您获得所有可能结果的相同可能性。给快速排序带来严重问题的安排很少。随机打乱数组以获得其中一种排列的可能性非常非常小。
  • 谁让你随机排列数组的?!随机化枢轴的选择比随机化所有数据要少得多,而且无论数据是有序还是无序,平均随机化枢轴都会很好地工作。

标签: java arrays sorting random quicksort


【解决方案1】:

随机化以避免 O(something) 是纯粹的学术细微差别。 Math.random() 太费时了,效果会是负面的。

真正重要的是

  • 执行的操作总数
  • 避免随机访问内存以避免缓存未命中(谷歌有关缓存命中率的信息)。

在这方面,好的排序算法是

  • Yarroslavkij 的双轴快速排序,在 java 排序中是默认的。通过选择两个枢轴并将数组拆分为 3 部分,这一方法以更好的确定性方式解决了最坏情况。
  • 基数排序、桶排序或派生,在我看来可能是最快的算法,但使用2n 内存。

【讨论】:

    猜你喜欢
    • 2013-11-22
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2021-03-29
    • 1970-01-01
    相关资源
    最近更新 更多