【发布时间】:2019-11-02 02:10:51
【问题描述】:
我正在编写 Python 代码,学习计算机科学,因此我决定先尝试解决其中一个正在解释的问题,然后再查看解决方案代码。
但是,我编写的解决方案代码虽然运行良好,但需要 50813497 次迭代(接近 5100 万次)来计算 49 的平方根,而解决方案中给出的代码只需要 54 次迭代即可实现一样。
这是我的代码:
def ssqrt(x):
origx = x
epsilon = 0.000001
num_guess = 0
while abs((x/2)**2 - origx) >= epsilon:
#print(x)
num_guess+=1
if (x/2)**2 >= origx:
x = x/2
elif (x/2)**2 <= origx:
x = (3/2)*x
if abs((x/2)**2 - origx) < epsilon:
print(num_guess)
return x/2
y = ssqrt(49)
print(y)
这是解决方案代码:
x = 49
low = 0
high = x
ans = (low+high)/2
epsilon = 0.00000000000001
num = 0
while abs(ans**2-x) >= epsilon:
num += 1
if ans**2 < x:
low = ans
else:
high = ans
ans = (high+low)/2
print (num)
print (ans)
现在,我知道我的是一个函数,并且解决方案中给出的代码不是一个函数,但总体思路是我们正在尝试实现一个二分搜索算法。这就是我想要达到的。
请帮忙。
(仅供参考,这是在 edX 课程中教授的,Introduction to Computer Science and Programming Using Python)
【问题讨论】:
-
你的准确率,epsilon,比解高几个数量级。你试过让它们相等吗?
-
@Jkind9 较小的 epsilon 会变得更糟,因为它会尝试更大的精度。所以,实际上,即使更大的 epsilon 值也会导致 5100 万次迭代,那么想象一下如果我将 epsilon 设置为与解决方案代码中的值一样小会发生什么。它很可能是数十亿次迭代,我没有时间等待它
-
我把这两者混为一谈了。这可能是因为您的条件导致 0.5*x 或 1.5* 而解决方案中的条件在迭代过程中变得更加准确,高与低。
-
@Jkind9 是啊...一定是这样...我重试后会回来。谢谢!
-
@Jkind9 你能解释一下这个答案吗?你的方法有效,所以它会被接受为答案
标签: python python-3.x algorithm search spyder