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))