题目:
描述一个运行时间为θ(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),就可完成要求。