金块问题python实现分治法

####比较最大值
def max(x,y):
    if x < y:
        return y
    else:
        return x
####比较最小值
def min(x,y):
    if x < y:
        return x
    else:
        return y

#####寻找最大值
def find_max(arr , low , high):
    LM = 0
    HM = 0
    max1 = 0
    if high == low :  ###只有一个元素
      max1 = arr[low]
      return max1
    elif  high - low ==1: ###有两个元素

        LM = arr[low]
        HM = arr[high]
        return(max(LM , HM))
    else:               ####超过两个元素
        mid = int((low + high)/2)        ###取中间值
        LM = find_max(arr , low , mid)        ###前半部分进行比较
        HM = find_max(arr , mid + 1 , high)   ###后半部分比较
        return max(LM , HM)

####寻找最小值
def find_min(arr, low, high):
    LM = 0
    HM = 0
    min1 = 0
    if high == low:  ###只有一个元素
        min1 = arr[low]
        return min1
    elif high - low == 1:  ###有两个元素

        LM = arr[low]
        HM = arr[high]
        return (min(LM, HM))
    else:  ####超过两个元素
        mid = int((low + high) / 2)  ###取中间值
        LM = find_min(arr, low, mid)  ###前半部分进行比较
        HM = find_min(arr, mid + 1, high)  ###后半部分比较
        return min(LM, HM)

if __name__ == "__main__":
    # arr = [2,6,8,35,41]
    arr = [10000,1559,3569,15356,1220,78]
    arr1 = arr.copy()
    low = 0
    high = len(arr) - 1
    print("金块序列: " , arr)   ####调用和列表都用逗号,
    print("最大的金块:" , find_max(arr , low , high))
    print("最小的金块:" , find_min(arr1, low, high))
#####金块问题老板有一袋金块(共n块),
# 最优秀的雇员得到其中最重的一块,
# 最差的雇员得到其中最轻的一块。
# 假设有一台比较重量的仪器,我们希望用最少的比较次数找出最重的金块。
#要求:
#1)设计一算法求解该问题? (分治法解)
#2)计算其时间复杂度?(要求写出递推公式,及其求解过程)



你可能感兴趣的:(算法)