python-二分法

二分法适用于对大数据进行查找例如:def find(list1,finded):    middle=int(len(list1)/2)    if len(list1)>=1:        if finded>list1[middle]:            list1[middle:]            print(list1[middle:])            find(list1[middle:],finded)        if finded<list1[middle]:            list1[:middle]            print(list1[:middle])            find(list1[:middle], finded)        if finded==list1[middle]:            print(list1[middle])    else:        print(‘未找到!‘)    returnif __name__==‘__main__‘:    a=list(range(1,600,3))    find(a,400)

结果:

[301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 481, 484, 487, 490, 493, 496, 499, 502, 505, 508, 511, 514, 517, 520, 523, 526, 529, 532, 535, 538, 541, 544, 547, 550, 553, 556, 559, 562, 565, 568, 571, 574, 577, 580, 583, 586, 589, 592, 595, 598]
[301, 304, 307, 310, 313, 316, 319, 322, 325, 328, 331, 334, 337, 340, 343, 346, 349, 352, 355, 358, 361, 364, 367, 370, 373, 376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448]
[376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409, 412, 415, 418, 421, 424, 427, 430, 433, 436, 439, 442, 445, 448]
[376, 379, 382, 385, 388, 391, 394, 397, 400, 403, 406, 409]
[394, 397, 400, 403, 406, 409]
[394, 397, 400]
[397, 400]
400

 
时间: 2024-10-03 20:41:22

python-二分法的相关文章

Python 二分法查找

使用二分法查找前提必须是有序的数列 def search(list,val): start = 0 end = len(list)-1 #判断该数在不在列表中 if val in list: #循环直到找到该数,return退出函数 while 1: mid = int((start + end)/2) #取整数部分 if list[mid] == val: print('你要查找的数的下标为:%s,'%mid) return mid elif list[mid] > val: end = mi

Python写个二分法查找

笔者是一个通信测试攻城狮,之前做过一段时间的持续集成.工作内容只要就是对主线版本进行基本通信功能守护,测试执行都是自动化完成,也是那个时候开始接触到代码. 当时经常遇到的一个问题是:某一天我们发现版本有重大BUG,但是到上一次我们验证PASS中间已经经历过很多版本,我们需要手动从中间找到第一个出现BUG的版本,当然最简单的方法是二分法,取中间版本,根据有没有BUG再缩小范围,继续取中间版本...当时我的想法就是思路很固定,完全可以自动化完成,可惜当时我不会写代码...直到今天看Python递归函

利用python实现二分法

利用python实现二分法:我的实现思路如下 1.判断要查找的值是否大于最大值,如果大于则直接返回False 2.判断要查找的值是否小于最小值,如果小于则直接返回False 3.如果要查找的值在最大值和最小值之间,则进入循环 a.首先序列的长度要大于1,然后获取序列中间一个值的大小 b.然后和要查找的值做比较,如果相等,则直接返回True,如果不相等,则判断如果中间的值大于要查找的值,则说明要查找的值在该中间值的左边,如果中间的值小于要查找的值,则说明要查找的值在中间的值的右边 c.最后如果序列

python 实现二分法查找

二分查找图 二叉树: 代码 #!/usr/bin/python #-*-coding:utf-8-*- #---------------------------------------------------------------------------------------- # to_do : binary find # authors: zuoxingyu # time : 2014-06-07 #--------------------------------------------

MIT公开课: Python 笔记6 二分法,牛顿-拉夫森方法,列表

Lecture5: Bisection methods , Newton/Raphson, introduction to lists二分法,牛顿,拉复生方法,列表 Bisection methods 二分法 注意: # bug: when x < 1, sqrt(x) > x = high eg.x=0.25 sqrt(x) = 0.5 # fix bug: high = max(x, 1.0) def squareRootBi(x, epsilon): """

python递归函数及二分法查找

函数的递归: 在一个函数的内部调用自己 死循环: 可以无限循环,不会停止 while True: print('我不是递归') 递归: 不是死循环,有最大循环深度 def story(): print('我是递归') story() story() 超过了递归的最大深度报错 RecursionError: maximum recursion depth exceeded while calling a Python object 官网上 源码中设置的递归深度: 1000自己实际测试递归深度: 9

python列表生成式、生成器,迭代器与二分法

一.列表生成式 列表生成式是快速生成一个列表的一些公式 列表生成式的书写格式:[x*x for x in range(1 , 11)] 列表生成式语法是固定的,[]里面for 前面是对列表里面数据的运算操作,后面跟平常for循序一样遍历去读取.运行后会自动生成新的列表 一般列表生成式 list1 = list(range(1,10)) #不使用列表生成式生成列表 list2 = [x for x in range(1,10)] #使用列表生成式生成列表 print(list1) print(li

Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法

一. lamda匿名函数 为了解决一些简单的需求而设计的一句话函数 # 计算n的n次方 def func(n): return n**n print(func(10)) f = lambda n: n**n print(f(10)) lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数 语法: 函数名 = lambda 参数: 返回值 注意: 1. 函数的参数可以有多个. 多个参数之间用逗号隔开 2. 匿名函数不管多复杂. 只能写一行, 且逻辑结束后直接返回数据 3

python 3 递归调用与二分法

递归调用与二分法 1.递归调用 递归调用:在调用一个函数的过程中,直接或间接地调用了函数本身. 示例: def age(n): if n == 1: return 18 # 结束条件 return age(n-1)+2 # 调用函数本身 print(age(5)) 打印结果 26 递归的执行分为两个阶段: 1 递推 2 回溯 示例图 递归特性: 1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3.递归效率不高,因为每次调用自身时,都会在内存中创建一个新

一次二分法在python中的利用

此次博客来自我选修课的一次作业,初学python, 我的程序难免有许多不合理的地方,希望大家指正. 问题描述: 每个月信用卡都会提示你还钱,至少要还的是你借款数额的2%.但是信用卡机构要收取未还清金额的利息,即使你及时还了要求偿还的最少金额的钱,你仍旧要支付利息,利息要累积在仍欠的钱上面,也就是还没有还款的一部分. 譬如,你用信用卡透支了5000美金,年利率是18%,每个月最少要还款2%,如果你每个月都是按照最小额度,也就是2%进行支付,1年之后还有多少钱没还. 设计思想: 你可以这样来考虑.