亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

分析python動(dòng)態(tài)規(guī)劃的遞歸、非遞歸實(shí)現(xiàn)

 更新時(shí)間:2018年03月04日 15:25:44   作者:Geekrun  
本文小編給大家詳細(xì)分析了python動(dòng)態(tài)規(guī)劃的遞歸、非遞歸實(shí)現(xiàn)過(guò)程以及相關(guān)代碼,有興趣的朋友可以學(xué)習(xí)下。

概要

本文只是簡(jiǎn)單的介紹動(dòng)態(tài)規(guī)劃遞歸、非遞歸算法實(shí)現(xiàn)

案例一

題目一:求數(shù)組非相鄰最大和

[題目描述]

在一個(gè)數(shù)組arr中,找出一組不相鄰的數(shù)字,使得最后的和最大。

[示例輸入]

arr=1 2 4 1 7 8 3

[示例輸出]
15

from functools import wraps
def memoDeco(func):
  '''
  memoDeco主要是緩存已遍歷的節(jié)點(diǎn),減少遞歸內(nèi)存開(kāi)銷(xiāo)
  '''
  cashe={}
  @wraps(func)
  def wrapper(*args):
    if args not in cashe:
      cashe[args]=func(*args)
    return cashe[args]
  
  return wrapper

@memoDeco
def recMaxArray(array,index):
  if index==0:
    return array[0]
  elif index==1:
    return max(array[0],array[1])
  else:
    return max(recMaxArray(array,index-2)+array[index],recMaxArray(array,index-1))
  
if __name__=="__main__":
  array=(1,2,4,1,7,8,3)
  print(recMaxArray(array,len(array)-1))

非遞歸實(shí)現(xiàn)

def dpMaxArray(array):
  '''
  代碼講解詳見(jiàn)引用一:正月點(diǎn)燈籠講解
  '''
  lens=len(array)
  maxArray=[0]*(lens)
  maxArray[0]=array[0]
  maxArray[1]=max(array[0],array[1])
  for i in range(2,lens):
    maxArray[i]=max(maxArray[i-2]+array[i],maxArray[i-1])
  return maxArray[-1]

  
if __name__=="__main__":
  array=(1,2,4,1,7,8,3)
  print(dpMaxArray(array))

案例二

[題目描述]

給定一個(gè)正整數(shù)s, 判斷一個(gè)數(shù)組arr中,是否有一組數(shù)字加起來(lái)等于s。

[示例輸入]

arr=3 34 4 12 5 3

s=9

[實(shí)例輸出]

true

遞歸實(shí)現(xiàn)

from functools import wraps

#和第一題一樣,套用裝飾器可以做一個(gè)緩存節(jié)點(diǎn)作用
def memoDeco(func):
  '''
  memoDeco主要是緩存已遍歷的節(jié)點(diǎn),減少遞歸內(nèi)存開(kāi)銷(xiāo)
  '''
  cashe = {}
  
  @wraps(func)
  def wrapper(*args):
    if args not in cashe:
      cashe[args] = func(*args)
    return cashe[args]
  
  return wrapper


@memoDeco
def recSubSet(arr, index, tar_num):
  if index == 0:
    return arr[0] == tar_num
  elif tar_num == 0:
    return True
  elif arr[index] > tar_num:
    return recSubSet(arr, index - 1, tar_num)
  else:
    return recSubSet(arr, index - 1, tar_num) or recSubSet(arr, index - 1, tar_num - index)


if __name__ == "__main__":
  arr = (3, 34, 4, 12, 5, 3)
  tar_num = 13
  index = len(arr) - 1
  print(recSubSet(arr, index, tar_num))

非遞歸實(shí)現(xiàn)

'''
多維數(shù)組構(gòu)建用python第三方庫(kù)numpy比較方便
代碼講解詳見(jiàn)引用一:正月點(diǎn)燈籠講解
'''
import numpy as np


def dpSubSet(arr, tar_num):
  subSet = np.zeros((len(arr), tar_num + 1), dtype=bool)
  subSet[:, 0] = True
  subSet[0, :] = False
  subSet[0, arr[0]] = True
  for i in range(1, len(arr)):
    for j in range(1, tar_num + 1):
      if arr[i] > j:
        subSet[i, j] = subSet[i - 1, j]
      else:
        subSet[i, j] = subSet[i - 1, j] or subSet[i - 1, j - arr[i]]
  return subSet[-1, -1]


if __name__ == "__main__":
  arr = (3, 34, 4, 12, 5, 3)
  tar_num = 13
  print(dpSubSet(arr, tar_num))

相關(guān)文章

  • python基于tkinter實(shí)現(xiàn)gif錄屏功能

    python基于tkinter實(shí)現(xiàn)gif錄屏功能

    一直在思索實(shí)現(xiàn)一個(gè)透明的窗體,然后可以基于這個(gè)窗體可以開(kāi)發(fā)出各種好玩的應(yīng)用,這一期,我們將實(shí)現(xiàn)有趣的GIF錄屏功能
    2021-05-05
  • python神經(jīng)網(wǎng)絡(luò)AlexNet分類(lèi)模型訓(xùn)練貓狗數(shù)據(jù)集

    python神經(jīng)網(wǎng)絡(luò)AlexNet分類(lèi)模型訓(xùn)練貓狗數(shù)據(jù)集

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)AlexNet分類(lèi)模型訓(xùn)練貓狗數(shù)據(jù)集,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • pandas把所有大于0的數(shù)設(shè)置為1的方法

    pandas把所有大于0的數(shù)設(shè)置為1的方法

    今天小編就為大家分享一篇pandas把所有大于0的數(shù)設(shè)置為1的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python生成pdf目錄書(shū)簽的實(shí)例方法

    Python生成pdf目錄書(shū)簽的實(shí)例方法

    在本篇文章里小編給大家整理了關(guān)于Python生成pdf目錄書(shū)簽的實(shí)例方法,有需要的朋友們可以學(xué)習(xí)下。
    2020-10-10
  • Python?內(nèi)置logging?使用詳細(xì)介紹

    Python?內(nèi)置logging?使用詳細(xì)介紹

    提供日志記錄的接口和眾多處理模塊,供用戶存儲(chǔ)各種格式的日志,幫助調(diào)試程序或者記錄程序運(yùn)行過(guò)程中的輸出信息,這篇文章主要介紹了Python?內(nèi)置logging?使用講解,需要的朋友可以參考下
    2022-07-07
  • python下的opencv畫(huà)矩形和文字注釋的實(shí)現(xiàn)方法

    python下的opencv畫(huà)矩形和文字注釋的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇python下的opencv畫(huà)矩形和文字注釋的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • 使用python繪制3維正態(tài)分布圖的方法

    使用python繪制3維正態(tài)分布圖的方法

    今天小編就為大家分享一篇使用python繪制3維正態(tài)分布圖的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python減少循環(huán)層次和縮進(jìn)的技巧分析

    Python減少循環(huán)層次和縮進(jìn)的技巧分析

    這篇文章主要介紹了Python減少循環(huán)層次和縮進(jìn)的技巧,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python優(yōu)化代碼跳出循環(huán)以減少循環(huán)層次的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-03-03
  • 最新評(píng)論