概要

本文只是简单的介绍动态规划递归、非递归算法实现

案例一

题目一:求数组非相邻最大和

[题目描述]

在一个数组arr中,找出一组不相邻的数字,使得最后的和最大。

[示例输入]

arr=1 2 4 1 7 8 3

[示例输出]

15

from functools import wraps

def memoDeco(func):

'''

memoDeco主要是缓存已遍历的节点,减少递归内存开销

'''

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

非递归实现

def dpMaxArray(array):

'''

代码讲解详见引用一:正月点灯笼讲解

'''

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

案例二

[题目描述]

给定一个正整数s, 判断一个数组arr中,是否有一组数字加起来等于s。

[示例输入]

arr=3 34 4 12 5 3

s=9

[实例输出]

true

递归实现

from functools import wraps

#和第一题一样,套用装饰器可以做一个缓存节点作用

def memoDeco(func):

'''

memoDeco主要是缓存已遍历的节点,减少递归内存开销

'''

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

非递归实现

'''

多维数组构建用python第三方库numpy比较方便

代码讲解详见引用一:正月点灯笼讲解

'''

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

引用

递归算法经典实例python-python-动态规划的递归、非递归实现相关推荐

  1. 递归Java_Java递归算法经典实例

    原标题:Java递归算法经典实例 简单递归定义 什么叫递归?(先定义一个比较简单的说法,为了理解,不一定对) 递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候, ...

  2. 递归算法经典实例python-Python进阶:递归算法

    一.递归定义 如果函数中包含了对其自身的调用,该函数就是递归的: 递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法: 基本要素 基线条件:确定递归到何时终止,函数 ...

  3. java古典兔子问题c语言,Java递归算法经典实例(经典兔子问题)

    Java递归算法经典实例(经典兔子问题) 题目:古典问题:3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:首先我们要明白题目的意思 ...

  4. 快排递归非递归python_Python递归神经网络终极指南

    快排递归非递归python Recurrent neural networks are deep learning models that are typically used to solve ti ...

  5. 一文彻底搞定二叉树的前序、中序、后序遍历(图解递归非递归)

    前言 大家好,我是bigsai,在数据结构与算法中,二叉树无论是考研.笔试都是非常高频的考点内容,在二叉树中,二叉树的遍历又是非常重要的知识点,今天给大家讲讲二叉树的层序遍历. 这部分很多人可能会但是 ...

  6. c语言折半查找递归程序,C语言数据结构中二分查找递归非递归实现并分析

    C语言数据结构中二分查找递归非递归实现并分析 前言: 二分查找在有序数列的查找过程中算法复杂度低,并且效率很高.因此较为受我们追捧.其实二分查找算法,是一个很经典的算法.但是呢,又容易写错.因为总是考 ...

  7. 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++

    a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...

  8. 树的深度 递归非递归实现

    树的深度 递归非递归实现 package com.dugstudio.SwordToOffer;import java.util.LinkedList;/*** 树的深度递归和非递归算法*/ clas ...

  9. java建树_Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】...

    本文实例讲述了Java实现的二叉树常用操作.分享给大家供大家参考,具体如下: import java.util.ArrayDeque; import java.util.Queue; import j ...

  10. 二叉树遍历完整版整理(含层次与递归非递归实现)

    数据结构那时二叉树学得不是很深入,理解不够,借这段时间的复习,把二叉树的先序,中序,后序,层次遍历的各种实现重新的理解了一遍,在vs2017上码了一遍,然后我把函数都逐一写进了头文件. . 其中< ...

最新文章

  1. 预告:大牛现身说法 TensorFlow在工程项目中的应用 | AI 研习社
  2. fedora17的gnome3桌面美化
  3. 动态规划训练14 [Max Sum Plus Plus HDU - 1024 ]
  4. Ubuntu 20.10 安装 fcitx5 输入法
  5. 关于如何为eclipse3.5安装cdt插件的问题
  6. 软件测试的学习之路-----基本的 HTML
  7. WebService高级,可靠消息
  8. 非参数假设性检验 Wilcoxon秩和检验 matlab
  9. 《免费下载论文的网站》
  10. Qt —— 完美制作win系统扬声器、麦克风控制程序
  11. MySQL全文索引和like
  12. 怎么利用pytorch训练好的模型测试单张图片
  13. bzoj4238 电压
  14. Hystrix使用分析
  15. 快收下这枚 Scrapy Requests 口味的爬虫“回魂丹”
  16. 数据中台架构与技术选型
  17. Python数据处理之pandas基础入门
  18. 高内聚,低偶合指的是什么?
  19. JS-小案例 关于时间--实时时间
  20. 云大计算机831参考资料,云南大学2016年考研英语语言文学专业考研初试复试经验分享-CallmeSpell...

热门文章

  1. linux超级终端配置交换机路由器
  2. 【PS】免费 使用PS批量将pdf转换成图片 pdf转图片 pdf转jpg pdf转png
  3. 花卷云解读淘宝客APP定制开发应该避免哪些坑
  4. tuxedo中间件tmadmin的命令使用
  5. tomcat设置编码问题
  6. UniWebView3 使用中遇到的坑
  7. OpenCV 网络视频传输 C++ 和 python实现
  8. 双向晶闸管触发电路工作原理图
  9. 使用BackTrack4清除/修改Windows用户密码
  10. HeadFirst 设计模式 笔记