《算法导论》练习题2.3-7

来源:互联网 发布:windows arp欺骗 编辑:程序博客网 时间:2024/05/21 10:12

题目:

        描述一个运行时间为θ(nlgn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素。

伪代码:

1  MergeSort(S)2  for j=1 to n3    k=BinarySearch(S',x-S[j])4    if k!=NULL5        return true6  return false

解析:

       S'代表当前S[j]右侧元素组成的数组

       1.对数组进行归并排序                        

       2.从左到右遍历数组

          对当前元素S[j],针对其右侧所有元素进行二分查找,查找元素x-S[j]

    

       归并排序复杂度为θ(nlgn),单次二分查找复杂度为θ(lgn),遍历查找复杂度则为θ(nlgn),

因此,整体复杂度为θ(nlgn)。

PS:问题的求解涉及排序和查找两大步骤,只要相应的排序算法和查找算法的复杂度均控制在θ(nlgn),就可完成要求。

0 0