python算法四:二分法

1.定义:二分查找又叫折半查找,该方法主要将数列有序排列,采用跳跃式的方式查找数据。以递增数列为例,先以中点位置的元素作为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。每一次比较后都可以将查找区间缩小一半。 二分查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。在一个有n个元素的有序序列中,利用二分查找大约需要log以2为底n的对数次。但是二分法查找的前提条件是被查找的数据必须是有序的。

例题1:猜数字

import random
num=random.randint(1,1000)
mynum=int(input('请输入mynum='))
n=1
while not(mynum==num):
    n+=1
    if mynum<num:
        print("输入的数小了")
    elif mynum>num:
        print("输入的数大了") 
    print("输入不正确,请再次输入")
    mynum=int(input('请输入mynum='))
print("你猜对了!","一共用了",n,"次")

  
input("运行完毕,请按回车键退出...")

例题2:假设一本字典大约1000页,目标信息在第328页,求最少的翻页次数。

x=int(input("请输入要查找的1000以内的整数:"))
step=0
flag1=1
flag2=1000
while(flag1<=flag2):
    mid=(flag1+flag2)//2
    step=step+1
    if mid>x:
        flag2=mid-1      
    elif mid<x:
        flag1=mid+1    
    else:       
        break
print("查找次数为:",step)

例题3:输入任意一个数,用二分法查找它在列表中的位置。

列表为:nums=[2,4,8,9,10,20,30,77,88,100]

 代码如下:

def search(x,nums):
    low = 0
    heigh = len(nums)-1
    while low <=heigh:
        mid =(low+heigh)//2
        if x == nums[mid]:
            return mid
        elif x > nums[mid]:
            low = mid+1
        else:
            heigh = mid-1
    return -1
nums =[2,4,8,9,10,20,30,77,88,100] 
num = int(input("请输入你要查找的数:"))
print("你要找的数在数组从0开始的第",search(num,nums),"个位置")

例题4:

代码如下:

def f(x):
    #定义方程
    return x**3-x**2+x-1
a=float(input("请输入解区间的左边界:"))
b=float(input("请输入解区间的右边界:"))
while abs(b-a)>1e-6:
    x0=(a+b)/2 
    if f(a)*f(x0)<0:
        b=x0    
    if f(b)*f(x0)<0:
        a=x0  
    if f(x0)==0:      
        break
print("解为:",x0)

猜你喜欢

转载自blog.csdn.net/qq_28782419/article/details/128290096