选择问题:
前提问题:数组中的中位数距离其他数字的距离最小
问题一:选取数组的最大和最小的值
常规方法:比较W(n)= n-1+n-2=2n-3
分治法:两两分组,每一组选出大元素和小元素,此时数组分成两部分,分别进行取极值
W(n)=
问题二:取第二大的值
常规方法:W(n)=n-1+n-2=2n-3
锦标赛法:两两分组,选出最大的元素进入下一轮,下一轮中两两分组选出最大的值,直到产生冠军。比较(n-1)次。
又因为第二大元素必是被冠军淘汰,所以在比较的同时需记录被其淘汰的元素。在被冠军淘汰的元素中选出最大值,即第二大元素。
其W(n)=
其中向上取整logn-1:
被冠军淘汰的元素数量=轮数
因为每一轮淘汰n/2个元素,即有n/(2^h)=1 解得h=logn所以比较此时logn-1
问题三:取k小的元素
一般法:排序O(n*logn)
Select(S,k)
步骤一:首先将数字分为5个一组,一共向上取证n/5组
步骤二:每一组选择其中位数【