I just started Python and I've got no idea what memoization is and how to use it. Also, may I have a simplified example?

解决方案

Memoization effectively refers to remembering ("memoization" → "memorandum" → to be remembered) results of method calls based on the method inputs and then returning the remembered result rather than computing the result again. You can think of it as a cache for method results. For further details, see page 387 for the definition in Introduction To Algorithms (3e), Cormen et al.

A simple example for computing factorials using memoization in Python would be something like this:

factorial_memo = {}

def factorial(k):

if k < 2: return 1

if k not in factorial_memo:

factorial_memo[k] = k * factorial(k-1)

return factorial_memo[k]

You can get more complicated and encapsulate the memoization process into a class:

class Memoize:

def __init__(self, f):

self.f = f

self.memo = {}

def __call__(self, *args):

if not args in self.memo:

self.memo[args] = self.f(*args)

#Warning: You may wish to do a deepcopy here if returning objects

return self.memo[args]

Then:

def factorial(k):

if k < 2: return 1

return k * factorial(k - 1)

factorial = Memoize(factorial)

A feature known as "decorators" was added in Python 2.4 which allow you to now simply write the following to accomplish the same thing:

@Memoize

def factorial(k):

if k < 2: return 1

return k * factorial(k - 1)

The Python Decorator Library has a similar decorator called memoized that is slightly more robust than the Memoize class shown here.

python中factorial什么意思,什么是备忘录,如何在Python中使用备忘录?相关推荐

  1. python包含多个元组的元组_如何在python中将多个”列出的”元组连接成一个元组?...

    在python中,关于这个问题的答案很少,如何将一个元组列表连接到一个列表中?,如何在python中合并两个元组?,如何在python中合并任意数量的元组?所有的答案都引用了元组列表,所以提供的解决方 ...

  2. 中boxplot函数的参数设置_如何在Python中生成图形和图表

    在本章中,我们将学习如何在Python中生成图形和图表,同时将使用函数和面向对象的方法来可视化数据. Python中常用的一些可视化数据包括以下几种. Matplotlib. Seaborn. ggp ...

  3. python对文件每行数据计算_如何在python中对pandas数据帧的每一行进行计算?

    我是python的新手,我正在尝试将我在R中创建的函数转换为python,R函数描述如下: 从我的阅读来看,在python中实现这一点的最佳方法是使用一个for循环,该循环采用以下形式for line ...

  4. python中换行符怎么写_语法 - 如何在Python中执行换行符(换行符)?

    语法 - 如何在Python中执行换行符(换行符)? 我有一长串代码,我希望在多行之间分解. 我使用什么,语法是什么? 例如,添加一串字符串, e = 'a' + 'b' + 'c' + 'd' 并将 ...

  5. python中声明变量注意事项_我们如何在Python中声明变量?

    简短的答案是,无需在Python中声明变量. 以下是更详细的描述. 静态类型语言(C,C ++,Java,C#)要求在程序中使用变量之前,必须先声明要使用的变量的名称和类型声明.相应的语言编译器确保将 ...

  6. python一次输入多个值_如何在Python的一行中从用户输入多个值?

    为了读取语言C中的多个变量,我们编写类似-//Read three variable in one line scanf("%d %d %d", &x, &y, & ...

  7. vba中取小数点后两位数_如何在Excel中提取小数点后面的数字?

    Excel中,如果某个单元格中包含一个带小数,要用公式提取该数值小数点后面的数字,例如A1单元格中包含一个数值"59178.68",在B1单元格中输入下面的公式: =RIGHT(A ...

  8. jenkins中maven的安装及配置,如何在jenkins中创建maven任务。

    本文介绍了在jenkins中maven的安装及配置(安装maven及jdk的方法),以及如何在jenkins中创建maven任务. 有三点需要注意的地方. maven一定要安装在jenkins服务器上 ...

  9. php中判断星座的代码怎么写,如何在php中根据日期判断星座

    如何在php中根据日期判断星座 发布时间:2021-02-18 17:02:34 来源:亿速云 阅读:78 作者:Leah 如何在php中根据日期判断星座?相信很多没有经验的人对此束手无策,为此本文总 ...

  10. python怎么设置环境变量_百度经验_如何在Python中设置环境变量

    sisanared.. 49 os.environ行为类似于python字典,因此可以执行所有常见的字典操作.除了其他答案中提到的get和set操作之外,我们还可以简单地检查是否存在密钥 Python ...

最新文章

  1. AI突破难题才能预见未来
  2. 多通道接收机幅相校准测试系统的设计
  3. C语言信息系统贴吧,急 c语言学生信息管理系统
  4. 网络查找文档比自己电脑上还方便?
  5. python快速接手别人的代码_十步教你如何接手别人的代码!
  6. 洛谷P1984 SDOI2008烧水问题
  7. Go本地浏览Web服务器
  8. 【大数据之路-阿里巴巴大数据实践】第一篇 数据技术篇
  9. java开发系统架构_Java开发:ECP系统J2EE架构开发平台
  10. 初二生态系统思维导图_有关初中生态系统的思维导图
  11. 如何快速提取手机微信数据?
  12. BAT机器学习面试1000题系列大集合整理(320)
  13. LeetCode: 872. Leaf-Similar Trees
  14. 【商品架构day6】阿里闲鱼亿级商品结构化 - 用技术的力量去降低商户录入成本
  15. 全球及中国中线静脉插管行业研究及十四五规划分析报告
  16. 微信小程序 实时搜索并高亮关键字
  17. 阿里云轻量级云服务器部署Java项目
  18. uefi怎么念_uefi和legacy是什么意思
  19. 基于Unity3D的相机功能的实现(六)—— 上帝视角(王者荣耀视角)
  20. GM7123视频编码电路:TTL转VGA,替换SDA7123转换芯片

热门文章

  1. 华为 TD-LTE AT 指令
  2. 2021-12-8 Leetcode 914.卡牌分组
  3. 数字孪生技术搭建的智慧楼宇安防综合管控系统,在智慧城市发展中有何亮点?
  4. 平面设计和UI设计有哪些区别?
  5. android自动发送dtmf,Android通话中发送DTMF信号
  6. 【ArcGIS|空间分析】数字地形分析
  7. 智慧磐石之武器装备智能化管理解决方案
  8. 可视化字幕创作软件:Arctime Pro for Mac
  9. python:初始化方法
  10. 微信第三方平台开发错误码集合,各种 code