zoukankan      html  css  js  c++  java
  • 分治

    分治算法

    判断某个元素是否在列表中

    '''
    判断某个元素是否在列表中
    '''
    
    
    def is_in_list(init_list,el):
        return [False,True][init_list[0]==el]
    #分治法
    def solve(init_list,el):
        n=len(init_list)
        if n==1:
            return is_in_list(init_list,el)
        #分解
        left_list,right_list=init_list[:n//2],init_list[n//2:]
        #合并
        res=solve(left_list,el) or solve(right_list,el)
        return res
    if __name__ == '__main__':
        #测试数据
        test_list=[12,2,23,45,67,3,2,4,45,63,24,23]
        #查找
        print(solve(test_list,45))
        print(solve(test_list,5))
    View Code


    求顺序表中最大值

    '''
    求顺序表中最大值
    '''
    
    #基本子算法
    def get_max(max_list):
        return max(max_list)
    
    #分治法
    def solve2(init_list):
        n=len(init_list)
        if n<=2:
            return get_max(init_list)
        left_list,right_list=init_list[:n//2],init_list[n//2:]
        left_max,right_max=solve2(left_list),solve2(right_list)
        return get_max([left_max,right_max])
    
    
    if __name__ == '__main__':
        test_list=[2,1,4,5,523,433,]
        print(solve2(test_list))
    View Code

    找出序列中第k小的元素

    #划分
    '''
    找出一组序列中第k小的元素
    '''
    def partition(seq):
        pi=seq[0]
        lo=[x for x in seq[1:] if x<=pi]
        hi=[x for x in seq[1:] if x>pi]
        return lo,pi,hi
    
    def select(seq,k):
        #分解
        lo,pi,hi=partition(seq)
        m=len(lo)
        if m==k:
            return pi
        elif m<k:
            return select(hi,k-m-1)
        else:
            return select(lo,k)
    
    if __name__ == '__main__':
        seq=[2,3,5,1,56,5,7,6,45,3,444,333]
        print(select(seq,3))
        print(select(seq,1))
    View Code
    
    
    
    
  • 相关阅读:
    Cocos2d-x 2.x项目创建
    Mac OS 使用Git
    Android Studio And Gradle
    Mac OS环境变量配置(Android Studio之Gradle)
    【Android UI】 Shape详解
    JS-OC通信之Cordova简介
    python类的定义和使用
    Android屏幕适配常识
    Python面试315题
    第十五篇 Python之文件处理
  • 原文地址:https://www.cnblogs.com/huay/p/11693474.html
Copyright © 2011-2022 走看看