算法导论 2.3-7 python实现
2014-08-14 19:48
218 查看
题目:描述一个运行时间为O(nlogn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素
解答就是首先使用归并排序排序数列A,之后再用二叉查找查找数列中的元素,因为 二叉查找的运行时间小于O(nlogn) 所以该方法的运行时间符合要求
下面给出实现该伪代码的python具体实现
解答就是首先使用归并排序排序数列A,之后再用二叉查找查找数列中的元素,因为 二叉查找的运行时间小于O(nlogn) 所以该方法的运行时间符合要求
下面给出实现该伪代码的python具体实现
def mergesort(mlist): if len(mlist)<=1: return mlist mid=len(mlist)/2 left=mergesort(mlist[:mid]) right=mergesort(mlist[mid:]) return merge(left,right) def merge(left,right): i,j=0,0 result=[] while i<len(left) and j<len(right): if left[i]<right[j]: result.append(left[i]) i+=1 else: result.append(right[j]) j+=1 result+=left[i:] result+=right[j:] return result def find(flist,value): left=0 right=len(flist)-1 while flist[0]<=value: if right>=left: mid=(left+right)/2 if flist[mid]<value: left+=1 elif flist[mid]>value: right-=1 else: return True else: return False return False if __name__=="__main__": mlist=[17,1,34,25,78,12,0] x=input(">>>input your value\n") result=mergesort(mlist) print result for i in xrange(len(result)): if find(result[i:],x-result[i]): print "the number exits!!!" break else: if i==len(result)-1: print "there is noting" break
相关文章推荐
- 算法导论Java实现-二分查找(习题2.3-5)
- 算法导论Java实现-二分查找运用(习题2.3-7)
- 算法导论详解(3) 第四章最大子数组+矩阵乘法+Python实现
- 算法导论Java实现-合并排序(包含习题2.3-2)
- 算法导论学习-插入排序python实现
- 算法导论-分治法-合并排序的Python&C++实现
- 算法导论2.3-5答案 分别采用递归与非递归方式实现二分查找 c++实现
- 《算法导论》习题2.3-7 查找集合S中是否有两个元素和为X---Java实现
- 算法导论题解-python语言实现-第二章
- 算法导论,动态规划 —— 矩阵链乘法(python代码实现示例)
- Python实现冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法(基于《算法导论》伪代码)
- 算法导论Java实现-二分插入排序(习题2.3-6)
- 判断序列中是否存在两个元素之和为x,时间复杂度O(nlgn),算法导论练习2.3,linux纯C实现
- 算法导论计数排序python实现
- 算法导论-排序的Python&C++简单实现
- 算法导论程序22--指针和对象的实现(Python)
- 二分法实现插入排序,时间复杂度O(nlgn),算法导论练习2.3,linux纯C实现
- 算法导论的python实现之插入排序
- 算法导论Java实现-合并排序(包含习题2.3-2)
- 递归实现插入排序,算法导论练习2.3,linux C实现