二分法即对猜想值在一个闭合区间内,通过判断区间的中点与猜想值的大小来不断地缩小猜想值的区间从来无限接近猜想值的办法。但是
def BinarySearch(array,t): low = 0 height = len(array)-1 while low < height: mid = (low+height)/2 if array[mid] < t: low = mid + 1 elif array[mid] > t: height = mid - 1 else: return array[mid] return -1 if __name__ == "__main__": print BinarySearch([1,2,3,34,56,57,78,87],57)
t为猜想数,若mid<t时low+1,若(low+1)>t了,猜想数就不在判断的区间了,难道只能为整数不能为浮点数?
牛顿拉浮生办法求平方数:
f(x)=x**2-a #a为被开方数
Xn+1=Xn-f(x)/2Xn
Xn+1在不断循环下去最终接近实际值的方法
例如,求16的开方数,猜想数为3
f(3)=9-16=-7,Xn+1=3-(-7)/2*3=4.111
f(4.11)继续下去,但是代码中
def
SquarerootNR(x,eplison):
assert
x>
=
0
,
'x must be non negtive not'
+
str
(x)
assert
eplison>
0
,
'eplison must be positive not'
+
str
(eplison)
x
=
float
(x)
guess
=
x
diff
=
guess
*
*
2
-
x
ctr
=
1(是否为迭代次数?)
while
abs
(diff)>eplison
and
ctr<
=
100
:(为何要用此判断条件?)eplison为最小整数,绝对值了都是最小的正数啊?
guess
=
guess
-
diff
/
(
2
*
guess)
diff
=
guess
*
*
2
-
x
ctr
+
=
1
assert
ctr<
=
100
,
'the times of iteration is too much'
print
'NR method:'
print
'guess: %f iteration: %d'
%
(guess,ctr)
return
guess