python分治算法_python算法-分治

本文介绍了分治算法的基本思想和应用实例,包括使用分治法找出数字列表的最大值、判断列表中是否存在特定元素、爬楼梯问题以及汉诺塔问题的解决方案。通过这些例子,详细展示了分治算法如何解决问题并逐步分解问题的复杂性。
摘要由CSDN通过智能技术生成

#分治思想

#基本思想:将一个问题分成许多个规模最小子问题去解决

#注意分治法能解决的问题一般具有以下几个特征:

#1.该问题的规模小到一定程度就可以容易地解决

#2.该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质

#3.利用该问题分解出的子问题的解可以合并为该问题的解

#4.该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题

#例1.给定一个数字列表,编写一个求出其最大值的分治算法(最小规模为2个数)

def get_max(numList):

return max(numList)

def solution(numList):

n = len(numList)

if n<2:

return get_max(numList)

temp_list = [numList[i:i+2] for i in range(0,n,2)]

print('^^^^')

print(temp_list)

max_list = list(map(get_max,temp_list))

print(max_list)

if len(max_list) == 1:

return max_list[0]

else:

return solution(max_list)

print(solution([1,4,2,6,48,56,97,0,7,8,67,100,87]))

# ^^^^

# [[1, 4], [2, 6], [48, 56], [97, 0], [7, 8], [67, 100], [87

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值