python算法1——分治算法

1.“分治”:

从字面意思看是“分而治之”。也就是将一个需要解决的问题分解为多个子问题,通过解决若干个小问题,将若干子问题的答案综合起来得到问题的最终解。这就是分治算法的核心思想。

2.使用分治算法需要满足以下几个条件:

(1).该问题可以分解为有限个子问题;

(2).分解的子问题很容易求解;

(3).子问题的解可以合并为该问题的解;

(4).子问题间相互独立。也就是任意两个子问题没有公共问题。

3.分治法执行步骤:

(1).将问题分解为若干互相独立的子问题;

(2).将子问题进行求解;

(3).将所有子问题的答案进行综合得到最终解。

4.下面举一个最简单的例子说明分治算法:

例:判断一个字符串是否是回文数(回文数:一个字符串正反读是一样的)

首先看这个问题满足分治法的使用条件吗?

(1).该问题需要将对称的字符进行比对,看是否相同。由于字符串长度是有限的,所以在有限次数可以执行结束。子问题就是将对称的字符进行对比。

(2).判断两个字符是否相同很容易做到。

(3).将对称字符判断结果进行综合可以得到是否为回文数。

(4)每次比较的字符不同,所以每个问题间没有相互重叠。

通过分析,可以看到,此问题适合分治算法。

我们利用python语言解决此问题:

# -*-coding:UTF-8-*-
def is_palindromic(s):
    """判断字符串是否为回文数"""
    """回文数:正反念都一样"""
    if len(s)==0:#如果是空字符串,返回False
        return False
    if len(s)==1:#如果字符串为1,返回True
        return True
    else:
        return a[0]==a[-1] and ispel(a[1:-1])#利用递归方式判断,只要对称位置的字符不同,停止递归,返回结果
a=""
print(ispel(a))

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值