枢轴索引和平衡分区(Java)

时间:2018-10-16 17:58:13

标签: java

对于big-O进行快速排序,

数据透视表索引创建平衡分区意味着什么。

我知道数据透视索引是索引左侧的数字总和等于索引右侧数字的总和。

创建平衡分区时(而不创建平衡分区),它如何影响复杂性?

1 个答案:

答案 0 :(得分:0)

在快速排序中,主要思想是使用枢轴递归地对数组进行分区。

在最佳情况下,所选的枢轴是一个始终将数组均等地划分为2的枢轴。例如,如果您有一个带有[1、3、2、6、4、7、5]的未排序数组,则枢轴将数组一分为二的结果是4。这是因为使用该枢轴对数组进行分区,您会得到[1、2、3、4、5、6、7],在枢轴的每一侧都有3个元素。

写出这种情况下的递归关系,您将得到:T(n) = 2 T(n/2) + O(n),因为现在可以将n大小的数组看作2个n / 2大小的数组,并且分区过程需要O(n)时间。使用主定理/其他方式展开递归,您将获得O(nlogn)作为快速排序的运行时。

不幸的是,这种理想情况在现实生活中并不总是可能的,因为您选择的枢轴可能不是一个很好的枢轴。但是,总的来说,如果您选择一个随机轴,则仍然有很大的机会将数组分为2个合理大小的部分。特别是,如果您可以实现1:9的拆分,则可以通过数学证明快速排序的运行时仍为O(nlogn)。这称为随机快速排序,在线上有很多资源可以解释其背后的概率分析。这是one such resource