单选题 设某算法的计算时间可用递推关系式T(n)=2T(n/2)+n表示,则该算法的时间复杂度为______。
  • A.O(lgn)
  • B.O(nlgn)
  • C.O(n)
  • D.O(n2)
【正确答案】 B
【答案解析】[解析] 递推关系式T(n)=2T(n/2)+n其实是在给n个元素进行快速排序时最好情况(每次分割都恰好将记录分为两个长度相等的子序列)下的时间递推关系式,其中T(n/2)是一个子表需要的处理时间,n为当次分割需要的时间。注意,这里实际上是用比较次数来度量时间。可以对此表达式进行变形得 [*] 用n/2代替上式中的n可得 [*] 继续用n/2代替上式中的n可得 [*] 算法共需要进行[lbn]+1次分割(n个元素的序列的对半分割树的高度跟具有n个结点的完全二叉树高度相等,软设级别的只需知道即可,不必深究),将上述[lbn]+1个式子相加,删除相互抵消的部分得 [*] 而T(1)=1,那么上式可转化为 T(n)=n[lbn]+2n 而在求时间复杂度时关注“大头”,注意到O(n)<O(nlbn)而且对数的底可省略或为任意常数值,那么 T(n)=O(nlogn)=O(nlgn) 数学上,一般将底为10的对数简略写成lgn。