您的位置:首页 > 编程语言 > Python开发

算法导论 2.3-7 python实现

2014-08-14 19:48 218 查看
题目:描述一个运行时间为O(nlogn)的算法,给定n个整数的集合S和另一个整数x,该算法能确定S中是否存在两个其和刚好为x的元素



解答就是首先使用归并排序排序数列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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息