利用二分法和牛顿法求平方根
首先我们要理解什么是二分法:
(一)确定该区间的中间位置K(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间将缩小一半,递归查找即可—来自百度释义。
(二)个人理解为:当你查找的值是在一个有序的数据集中时,运用二分法会非常高效,利用对半分原则,会使数据集,每次减少一半。例如:在有序集:[2,8,9,12,13,47]中查找13,已知有6个数据,对应下标为0,1,2,3,4,5,low=0,high=5对半分后的中间数据为mid=(high-1+low)/2,下标2对应的数据为9,9<13,此时更新low=2,high不变,mid=(2+4)/2=3,下标3对应的数据为12,12<13,更新low=3,mid=(3+4)/2=3.5,mid向上四舍五入为4,下标4对应的数据为13,13=13,则找到。停止迭代。
import math
import random
import time
import numpy as np
#随机生成有序数列
data=random.sample(range(1,100000),30000)#随机生成30000个不重复的数字
data=sorted(data)#进行排序
target=np.random.choice(data)#从有序序列中随机选取一个要查找的值
def erfenfa(target):
i=0 #用于控制迭代
j=0 #用于计算迭代多少次,找到目标
low=0
mid=0 #当中间数重复说明查找的值不在有序序列中,控制是否找到目标
high=int(len(data))-1
s