zoukankan      html  css  js  c++  java
  • 算法基础-理论代码

    # 循环打印“抱着抱着抱着我的小鲤鱼的我的我的我”
    def test(n):
        if n == 0:
            print("我的小鲤鱼", end='')
        else:
            print("抱着", end='')
            test(n-1)
            print("的我", end='')
    
    test(5)
    #汉诺塔问题
    t = 0
    
    def hanoi(n, A, B, C):
        global t
        if n > 0:
            hanoi(n-1, A, C, B)
            t += 1
            print("%s -> %s" % (A, C))
            hanoi(n-1, B, A, C)
    
    # hanoi(8,'A','B','C')
    # print(t)
    #查找
    from timewrap import *                       #导入的是一个计算时间的装饰器
    
    @cal_time        #计算时间的装饰器
    def binary_search(li, val):           #二分查找法
        low = 0                           #左边从0算起
        high = len(li) - 1                #右边从列表长度-1算起
        while low <= high:                #说明至少两个元素
            mid = (low + high) // 2       #找到中间的那个值
            if li[mid] > val:             #如果中间值比要查找的那个值还大,说明你要查找的值在左边
                high = mid - 1          
            elif li[mid] < val:           #如果中间值比要查找的那个纸还小,说明你要查找的值在右边
                low = mid + 1
            else:                         #第三种可能性就是直接找到了
                return mid
        else:
            return -1                     #如果穿进去的值是一个空的列表
    
    def find_a(nums, target):     #nums是一个列表,target是你要查找的对象,
        low = 0                    #左边从0开始算起
        high = len(nums) - 1        #右边从最大长度-1开始算起
        while low <= high:           #至少有一个值
            mid = (low + high) // 2   #中间值的索引
            if target <= nums[mid]:    #如果你要查找的值在中间值得左边
                high = mid - 1          中间值为最大值
            else:          
                low = mid + 1           #中间值为最小值
        #[1, 2, 2, 2, 4, 8, 10]
    
        if low < len(nums):
            return low
        else:
            return -1
    
    
    
    def find_b(nums, target):
        low = 0
        high = len(nums) - 1
        while low <= high:
            mid = (low + high) // 2
            if target < nums[mid]:
                high = mid - 1
            else:
                low = mid + 1
        if low < len(nums):
            return low
        else:
            return -1
    
    @cal_time
    def linear_search(li, val):      #li是列表,val是你要查找的值,找得到返回索引,找不到返回-1
        try:
            return li.index(val)             #返回索引
        except ValueError:
            return -1                        #找不到
    
    li = [1,2,2,2,4,8,10]
    print(find_a(li, 10))
    #利用二分查找法查找学生的详细信息并输出
    l = [ {"id":1001, "name":"张三", "age":20}, {"id":1002, "name":"李四", "age":25}, {"id":1004, "name":"王五", "age":23}, {"id":1007, "name":"赵六", "age":33} ] def bin_search(data_set,value): low = 0 #最左边的 high = len(data_set) - 1 #最右边的 while low <= high: mid = (low+high) // 2 #中间的 if data_set[mid]["id"] == value: #如果中间这个值得id == value,就返回详细信息 return (mid,data_set[mid]) elif data_set[mid]["id"] > value: 如果这个id大于value值, high = mid -1 else: low = mid + 1 else: return (0,None) print("退出q请按Q") flag = True while flag: sid = input("请输入学生学号>>>:").strip() if sid.isdigit(): if sid.upper() == "Q": flag = False else: sid = int(sid) mid,infos = bin_search(l,sid) if not infos: print("抱歉,没有这个人") else: s = "学生学号:{id},姓名:{name},年龄:{age}".format(**infos) print("该学生的信息索引坐标是:%s"%mid) print("该学生的所有详细信息为:%s"%s)
  • 相关阅读:
    年终总结 2016-08-28 22:04 422人阅读 评论(26) 收藏
    [mysql]MySQL Daemon failed to start 2016-08-14 21:27 1121人阅读 评论(18) 收藏
    solrr初步了解 2016-07-31 22:29 380人阅读 评论(4) 收藏
    基于spring-boot的测试桩设计--几种常见的controller
    利用Factory-boy和sqlalchemy来批量生成数据库表数据
    job中shell脚本异常(删除不存在容器),导致job被打断执行的问题 脚本优化方法
    利用Factory-boy来生成实例数据
    pytest相关资源收集
    pytest 用 @pytest.mark.usefixtures("fixtureName")装饰类,可以让执行每个case前,都执行一遍指定的fixture
    pytest fixture 利用 params参数实现用例集合
  • 原文地址:https://www.cnblogs.com/52-qq/p/8399182.html
Copyright © 2011-2022 走看看