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

时间:2022-01-03 19:02:12

题目:

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

伪代码:

1  MergeSort(S)
2 for j=1 to n
3 k=BinarySearch(S',x-S[j])
4 if k!=NULL
5 return true
6 return false

解析:

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

       1.对数组进行归并排序                        

       2.从左到右遍历数组

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

    

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

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

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