Python中如何高效地求一个数的平方根?

看了李永乐老师的问题,100 个囚犯的,看到有人用 java 实现了,想问下用 python 可以实现吗? 附 java

public static void main(String[] args) { Map<Integer, Integer> people100 = new HashMap<>(); for (int i = 1; i < 101; i++) { people100.put(i, i); }

    recursive(people100);
}

public static void recursive(Map<Integer, Integer> map) { Integer counter = 1; Map<Integer, Integer> resultMap = new HashMap<>(); if (map.size() == 1) { Set<Integer> integers = map.keySet(); Iterator<Integer> iterator = integers.iterator(); for (Integer integer : integers) { System.out.println("最终活着的人的编号是: "+map.get(integer)); return; } } for (Map.Entry<Integer, Integer> entry : map.entrySet()) { if (entry.getKey() % 2 == 0) { resultMap.put(counter++, entry.getValue()); } } recursive(resultMap); }


Python中如何高效地求一个数的平方根?

4 回复

。。。不如把问题贴出来。。。。


用Python求平方根,最直接高效的就是用 math.sqrt()。这玩意儿是C实现的,速度最快。

import math

num = 16
result = math.sqrt(num)
print(result)  # 输出 4.0

如果非要用纯算法,牛顿迭代法是个经典选择,比二分法收敛快得多:

def sqrt_newton(num, epsilon=1e-10):
    if num < 0:
        raise ValueError("不能计算负数的平方根")
    if num == 0:
        return 0.0
    
    guess = num / 2.0
    while abs(guess * guess - num) > epsilon:
        guess = (guess + num / guess) / 2.0
    return guess

print(sqrt_newton(16))  # 输出 4.0

对于数组或矩阵,直接用NumPy的向量化操作,比循环快几个数量级:

import numpy as np

arr = np.array([1, 4, 9, 16])
result = np.sqrt(arr)  # 输出 [1. 2. 3. 4.]

简单说就是:单个数用 math.sqrt,批量计算用 numpy.sqrt

哈哈 我也看他视频

>>> def recur(p_list):
◇ ◇ ◇ ◇if len(p_list)==1:
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇print(‘last is number:’, p_list[0])
◇ ◇ ◇ ◇else:
◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇recur(p_list[1::2])

>>> prisoners = list(range(1,101))
>>> recur(prisoners)
last is number: 64
>>>

回到顶部