zoukankan      html  css  js  c++  java
  • 3、递归(动态规划思想)

    # -*- coding:utf-8 -*-
    #@Time : 2020/5/2 11:06
    #@Author: Aluosen
    #@File : Recurrence.py
    ##进制转换
    def toStr(n,base):
    convertString = '0123456789ABCDEF'
    if n < base:
    return convertString[n]
    else:
    return toStr(n//base,base) + convertString[n%base]
    print(toStr(65536,16))

    #汉诺塔问题
    def moveTower(height, fromPole, withPole, toPole):
    if height >= 1:
    moveTower(height - 1, fromPole, toPole, withPole)
    moveDisk(height, fromPole, toPole)
    moveTower(height - 1, withPole, fromPole, toPole)

    def moveDisk(disk, fromPole, toPole):
    print(f'Movin disd[{disk}] from {fromPole} to {toPole}')
    moveTower(3,'#1','#2','#3')



    #零钱兑换问题-1、递归解法
    def recMC(coinValueList,change):
    minCoins = change
    if change in coinValueList: #最小规模
    return 1
    else:
    for i in [c for c in coinValueList if c <= change]: #调用自身
    numCoins = 1 + recMC(coinValueList, change - i) #减小规模
    if numCoins < minCoins:
    minCoins = numCoins
    return minCoins

    #零钱兑换问题-2、递归解法改进(增加了最优解表,中间结果记录)
    def recMC(coinValueList,change,knownResults):
    minCoins = change
    if change in coinValueList: #最小规模,递归基本结束
    knownResults[change] = 1 #记录最优解
    return 1
    elif knownResults[change] > 0:
    return knownResults[change] #查表成功
    else:
    for i in [c for c in coinValueList if c <= change]: #调用自身
    numCoins = 1 + recMC(coinValueList, change - i,knownResults) #减小规模
    if numCoins < minCoins:
    minCoins = numCoins
    #找到最优解,记录到表中
    knownResults[change] = minCoins
    return minCoins

    #零钱兑换问题-3、动态规划算法
    def dpMakeChange(coinValueList, change, minCoins):
    for cents in range(1, change + 1):
    coinCount = cents
    for j in [c for c in coinValueList if c <= cents]:
    if minCoins[cents -j] + 1 < coinCount:
    coinCount = minCoins[cents -j] +1
    minCoins[cents] = coinCount
    return minCoins[change]

  • 相关阅读:
    Linux下的inode记录
    Linux中如何使用gThumb批量调整图片大小
    U盘安装Linux安装报错及解决方案
    在Mysql中如何显示所有用户?
    【转】PowerDesigner中Table视图同时显示Code和Name
    【转】正则表达式-贪婪与非贪婪匹配
    【转】程序员书籍
    Oracle 分页、取期间数据、TOP前几
    数字信封理解
    【转】C# 利用反射动态创建对象
  • 原文地址:https://www.cnblogs.com/Aluosen/p/12819387.html
Copyright © 2011-2022 走看看