返回
算法解析:巧妙运用二分查找,轻松获取算术平方根
后端
2023-10-15 05:49:47
对于X的算术平方根,有这样一道面试题:如何计算它的值?
可能您会立即想到使用内置函数,例如 pow(x, 0.5) 或 x ** 0.5。但等等,如果在面试中使用这些函数,恐怕会显得您对算法一窍不通。那么,有什么办法可以不借助内置函数来计算平方根呢?
在这里,我们为您介绍二分查找法。这一方法就像是在玩数字游戏,通过不断缩小范围,最终找到最接近X算术平方根的值。
def square_root(x):
"""
计算X的算术平方根。
参数:
x: 一个非负整数。
返回值:
X的算术平方根。
"""
# 初始化二分查找的范围。
low = 0
high = x
# 循环,直到找到满足条件的平方根。
while low <= high:
# 计算中间值。
mid = (low + high) // 2
# 检查中间值是否满足条件。
if mid * mid == x:
return mid
elif mid * mid < x:
low = mid + 1
else:
high = mid - 1
# 如果没有找到满足条件的平方根,则返回-1。
return -1
# 测试代码。
print(square_root(16)) # 输出:4
print(square_root(25)) # 输出:5
print(square_root(100)) # 输出:10
二分查找法是一种高效的算法,可以大大减少计算平方根所需的步骤。因此,它是面试中一道常见的算法题。
除了二分查找法之外,计算平方根的另一种方法是牛顿法。牛顿法是一种迭代法,通过不断改进估计值来逐步逼近精确的平方根值。
def square_root_newton(x):
"""
计算X的算术平方根。
参数:
x: 一个非负整数。
返回值:
X的算术平方根。
"""
# 初始化估计值。
r = x / 2
# 循环,直到估计值收敛。
while abs(r * r - x) > 0.0001:
r = (r + x / r) / 2
return r
# 测试代码。
print(square_root_newton(16)) # 输出:4.0
print(square_root_newton(25)) # 输出:5.0
print(square_root_newton(100)) # 输出:10.0
牛顿法是一种相对复杂的算法,但它可以比二分查找法更快地计算平方根值。
总之,计算算术平方根的方法有多种,每种方法都有其优缺点。二分查找法是一种高效的算法,但它可能需要更多的时间来找到精确的平方根值。牛顿法是一种更快的算法,但它可能需要更多的步骤来收敛到精确的平方根值。