数据结构与算法(12)—分治策略

Posted yeshengcqupt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法(12)—分治策略相关的知识,希望对你有一定的参考价值。

  • 分治策略

分治策略是一种解决问题的思路:

将问题分为若干更小规模的部分

通过解决每一个小规模问题,并将结果汇总得到原问题的解。

PS:递归问题则体现了分治策略。

  • 优化问题和贪心策略

  1.优化问题例子:找零兑换问题

让自动售货机每次找零给顾客最少数量硬币。

贪心策略解决:我们每次都试图解决问题尽量大的一部分对应到兑换硬币问题,就是每次一最多数量的最大面额值硬币来迅速减少找零面值。但这并不是最优解。虽然尽量保证了每次找的是最优的,但组合起来不一定是最优解,只是接近最优解。

可采用递归解法来解决:

技术图片

 

 代码:

 1 def recDC(coniValueList, change, knownResults):
 2     ‘‘‘
 3     :param coniValueList: 硬币面额数组
 4     :param change: 需要找的钱
 5     :param knownResults: 最优解的表
 6     :return: 最优查找次数
 7     ‘‘‘
 8     minCoins = change
 9     if change in coniValueList:#递归基本结束条件
10         knownResults[change] =1 #记录最优解
11     elif knownResults[change] >0:
12         return knownResults[change] #查表成功,直接用最优解
13     else:
14         for i in [c for c in coniValueList if c <=change]:
15             numConins = 1 + recDC(coniValueList,change - i,knownResults)
16 
17             if numConins < minCoins:
18                 minCoins = numConins #最小的找零次数
19                 #找到最优解,记录到表中
20                 knownResults[change] = minCoins
21     return minCoins
22 memo = [0] *64 #记录中间结果的表
23 print(recDC([1,5,10,25],63,memo))
24 print(memo)

 

以上是关于数据结构与算法(12)—分治策略的主要内容,如果未能解决你的问题,请参考以下文章

五大常见算法策略——递归与分治策略

分治策略

五大经典算法思想之分治策略

算法分析之递归与分治策略

计算机算法设计与分析之递归与分治策略——二分搜索技术

递归与分治策略