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]

  • 相关阅读:
    ubuntu升级显卡驱动
    __slots__属性,声明实力属性名字列表
    isinstance 与 type 的区别
    conda使用技巧
    卷积神经网络参数
    apache nginx php不显示版本号
    30个实用的Linux find命令示例
    账号的管理的那点事
    Linux 命令整理 —— 基本操作
    Linux 命令整理 —— 用户管理
  • 原文地址:https://www.cnblogs.com/Aluosen/p/12819387.html
Copyright © 2011-2022 走看看