- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我们正在创建一个递归函数,如返回斐波那契数列的递归函数,并使用 lru_cache
..什么才是真正的州长max size
范围?
很明显,我们在计算每一项时只需要最后两项......但设置maxsize
至 2
并运行第一个 1000
计算需要很长时间才能完成。
我尝试使用只包含两个元素的缓存字典:
fib_cache = {0: 1, 1: 1}
def fib(n):
if n == 1:
val = 1
elif n == 2:
val = 1
elif n > 2:
val = fib_cache[0] + fib_cache[1]
fib_cache[0] = fib_cache[1]
fib_cache[1] = val
return val
lru_cache
运行一个类似的函数:
from functools import lru_cache
@lru_cache(maxsize=3)
def fib1(n):
if n == 1:
val = 1
elif n == 2:
val = 1
elif n > 2:
val = fib1(n - 1) + fib1(n - 2)
return val
maxsize
范围。我刚刚发现,对于这个特定的功能,2 需要很长时间,而 3 工作得很好。我的猜测是它将存储结果,这里
fib1(n)
,连同用于计算它的最后两项,
fib1(n - 1) and fib1(n - 2)
,但为什么结果不会立即替换最旧的项目?是否
fib1(n)
甚至在计算之前就在高速缓存中发生?
lru_cache
元素?也许这会有所帮助。
最佳答案
你说得对,仅缓存 2 个值就足以进行斐波纳契计算 .
您的功能无法正常工作,因为 递归调用未按良好顺序设置 .向您的函数添加一些打印语句,您将了解它的行为。
from functools import lru_cache
@lru_cache(maxsize=2)
def fib(n):
print(f'calling fib({n})')
if n == 1:
val = 1
elif n == 2:
val = 1
elif n > 2:
val = fib(n - 1) + fib(n - 2)
print(f'fib({n}) is being computed')
return val
fib(5)
# calling fib(5)
# calling fib(4)
# calling fib(3)
# calling fib(2)
# fib(2) is being computed
# calling fib(1)
# fib(1) is being computed
# fib(3) is being computed
# calling fib(2)
# fib(2) is being computed
# fib(4) is being computed
# calling fib(3)
# calling fib(1)
# fib(1) is being computed
# fib(3) is being computed
# fib(5) is being computed
fib(4)
计算时,需要
fib(3)
和
fib(2)
.但是
fib(3)
需要
fib(2)
然后
fib(1)
,所以最后两个电话是
fib(3)
和
fib(1
) 所以你需要再次重新计算
fib(2)
.
fib(n - 1)
和
fib(n - 2)
使其工作:
@lru_cache(maxsize=2)
def fib(n):
if n == 1:
val = 1
elif n == 2:
val = 1
elif n > 2:
val = fib(n - 2) + fib(n - 1)
return val
关于python - 如何确定lru_cache所需的maxsize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61952140/
我需要确定MAXSIZE在创建表空间时为其设置(Oracle 10g) 我确定我遗漏了一些明显的信息,但该信息在 DBA_TABLESPACES 中的信息中并未立即显现出来。 . 最佳答案 在 11g
可以在运行时获取struts.xml中定义的struts.multipart.maxSize值吗? 使用Struts2 org.apache.struts struts2-c
请指定 vector 列表的范围.... 我想在 vector<> 中存储数百万条记录。 我必须将数百万条记录从一个 vector <>复制到另一个 vector <>,然后对 vector 进行排序
在the latest Python 2 documentation : sys.maxsize The largest positive integer supported by the platf
我尝试使用 gwtupload 将上传文件的大小限制为大约 30 KB。所以我在web.xml中将参数maxSize的值设置为30360。但是,控制台记录器仍然显示: 0 [qtp3494205
我在 Centos 6.4 中使用 logrotate,希望每天或在日志达到 50MB 时轮换日志。 我面临的唯一问题是 CentOS 的 logrotate 版本是 3.7.8,它没有我需要使用的
我最近需要将 .dmp 导入到我创建的新用户中。我还使用以下命令为用户创建了一个新表空间: create tablespace my_tablespace datafile 'C:\My\Oracl
我有一个资源密集型、基于 java-8 的命令行应用程序,我经常使用飞行记录器对其进行分析。我经常注意到的是,当我在任务控制中打开飞行记录器文件 (jfr) 时,我看到了该过程运行的完整时间跨度,但我
根据 JAVA cmd Reference我可以设置 JFR 记录的 maxage 和/或 maxsize,但它不起作用。 我分享了 Intellij IDEA 使用 ant 录制和编译 scala:
我已经添加了 hbase.client.keyvalue.maxsize 0 在 hbase-site.xml 中。 我从 hbase-0.94.27/docs/hba
我正在使用 concurrent.futures 包中的 ThreadPoolExecutor 类 def some_func(arg): # does some heavy lifting
我有以下 winston 配置: 'use strict' import winston from 'winston' import config from '../../config/environ
我使用 Winston 和 maxsize 作为轮换策略,在文件(application.log)大小达到 maxsize 后,轮换按预期工作并开始写入第二个文件(application2.log)
我有一个类,其方法用 lru_cache annotation 注释: CACHE_SIZE=16384 class MyClass: [...] @lru_cache(maxsize
我在 Java 应用程序中使用 log4j。我想配置 maxsize(最大为 1Mb)和 15 天后自动删除。 # Root logger option log4j.rootLogger=INFO,
我问自己,如果我用错误的 maxsize 参数调用 strftime 函数,它会做什么。这是示例: char t[19]; struct stat b; stat(path.c_str(), &b);
在 C 中,我可以使用 char *fgets(char *s, int size, FILE *stream) 函数从标准输入读取用户输入。但是用户输入的大小限制为size。如何读取可变大小的用户输
我有一个具有受限 MaxSize 的 WinForm 窗体。如果我按下最大化按钮,此窗口会弹出到位置 0,0(左上角),并具有正确的 MaxSize。有没有办法防止表格移动? 我可以在表单移动(通过操
我正在使用 haar 级联分类器对视频流执行行人检测,并且我正在尝试通过参数 minSize 缩小检测范围来优化代码和 maxSize在detectMutliScale功能: fullbodyCasc
我正在尝试修改 sql 2008 数据文件的最大大小,但没有发生更改。 我正在使用这段代码: FileGroupCollection fcoll = database.FileGroups; fore
我是一名优秀的程序员,十分优秀!