基于相邻元素交换的排序算法的下界

  逆序(inversion)是指序列中具有性质“i<j,但a[i]>a[j]“的序偶(a[i].a[j])。

  例如:在序列34,8,64,51,32,21中具有9个逆序:(34,8),(34,32),(34,21),(64,51),(64,32),(64,21),(51,32),(51,21),(32,21);

显而易见的是,排序完成之后,序列中将不会存在逆序。因此我们可以通过计算序列中的逆序数来及算排序平均运行时间的精确的界。为了可以定义出“平均”,这里假设序列中不存在重复元素。利用这个假设,设输入数据是这个序列的某种可能的排列(只有相对顺序是重要的),并假设所有的排列都是等可能的。

  假设一个长度为n的序列中的所有序偶都是逆序(一个单调递减的序列),那么其逆序的个数就是序偶的个数n(n-1)/2=(1+2+3+...+n-1),因此平均表拥有该量的一半,即n(n-1)/4的逆序,,而基于相邻元素交换的排序算法每次相邻交换都只能消除一个逆序。因此算法需要n(n-1)/4=Ω(n^2)次交换。

  事实上,一般算法证明下界要比证明上界难得多。

  这个结论的意义在于:一个排序算法通过删除逆序得以向前运行,而为了突破Ω(n^2)这个下界,它必须要实现每次交换删除不止一个逆序。

                      

 

posted @ 2015-12-03 12:22  KIWI的博客  阅读(434)  评论(0编辑  收藏  举报