python 因为精确度导致[x1,x2]是f(x)定义域中最大有效区间,那么如何找到x1,x2这两个数?

Python022

python 因为精确度导致[x1,x2]是f(x)定义域中最大有效区间,那么如何找到x1,x2这两个数?,第1张

找到x1, x2这两个数可以通过分治法,即二分搜索来实现。你可以设定一个阈值,对于x1, x2之间的区间进行判断,当它们的差值小于阈值时,就可以认为x1, x2已经确定。

更具体的,你可以设置中间值mid=(x1+x2)/2,判断f(mid)是否在阈值范围内,然后再更新x1和x2的值。直到满足阈值的要求为止。

此外,你也可以考虑使用其他优化算法来解决这个问题,比如牛顿迭代法或者线性插值法。

题目:设计一个算法,判断给定的一个数n是否是某个数的平方,不能使用开方运算。

分析:二分查找法。查找从1~n的数字中,是否存在一个数m,使得m的平方为n。首先判断mid = (1 + n) / 2的平方power与m的大小,如果power >m,那么说明在[1, mid - 1]区间继续查找,否则在[mid + 1, n]区间继续查找。

code:

def isPower(n):

    low = 1

    high = n

    while low <high:

        mid = (high + low) / 2

        power = mid * mid

        # 接着在1~mid-1区间查找

        if power >n:

            high = mid - 1

        # 接着在mid+1~n区间内查找

        elif power <n:

            low = mid + 1

        else:

            return True

    return False

if __name__ == "__main__":

    n1 = 15

    if isPower(n1):

        print(str(n1) + "某个自然数的平方")

    else:

        print(str(n1) + "不是某个自然数的平方")

程序的运行结果:

15不是某个自然数的平方

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

一个算法应该具有以下七个重要的特征:

①有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止;

②确切性(Definiteness):算法的每一步骤必须有确切的定义;

③输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输     入是指算法本身定出了初始条件;

④输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没       有输出的算法是毫无意义的;

⑤可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行       的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性);

⑥高效性(High efficiency):执行速度快,占用资源少;

⑦健壮性(Robustness):对数据响应正确。

相关推荐:《Python基础教程》

五种常见的Python算法:

1、选择排序

2、快速排序

3、二分查找

4、广度优先搜索

5、贪婪算法