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)
  • 相关阅读:
    Redis大集群扩容性能优化实践
    INET_ATON(expr)
    无类别域间路由 Classless Inter-Domain Routing CIDR 可变长子网掩码 VLSM Variable Length Subnet Mask
    把[]byte转成string
    不用 H5,闲鱼 Flutter 如何玩转小游戏?
    重度使用Flutter研发模式下的页面性能优化实践
    Flutter 打包与转译 编译 Flutter 即将占领整个 Web 开发
    interface {} is uint, not []uint8
    MySQL查看数据库性能常用命令_Running_Tiger的博客-CSDN博客_mysql 查看数据库 https://blog.csdn.net/qq_41455420/article/details/82802090
    vivo全球商城时光机
  • 原文地址:https://www.cnblogs.com/52-qq/p/8399182.html
Copyright © 2011-2022 走看看