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)

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值