我已经用以下代码完成了项目欧拉问题14:
def longest_Collatz_sequence():
"""
returns longest Collatz
sequence based on formula:
n --> n/2 (n is even)
n --> 3n + 1 (n is odd)
"""
bestSequence = []
lengthOfLongest = 0
longestSequence = []
for n in range(999999,1,-1):
while n != 1:
l = len(longestSequence)
if n % 2 == 0:
longestSequence.append(n)
n /= 2
elif n % 2 != 0:
longestSequence.append(n)
n = (n * 3) + 1
if longestSequence[-1] == 2 and lengthOfLongest < l:
lengthOfLongest = l
bestSequence = longestSequence[:]
bestSequence.append(1)
longestSequence = []
return bestSequence[0]
将最长的Collatz数字序列从1000000降到2大约需要39秒。我想知道我是否可以缓存任何值来加速我的代码,以及如何在不获得无限循环的情况下从代码中删除if longestSequence[-1]==2,以及任何其他可以改进代码的方法。
为正整数集定义以下迭代序列:
n→n/2(n为偶数)n→3n 1(n为奇数)
使用上述规则,从13开始,我们生成以下序列:
13→ 40→ 20→ 10→ 5.→ 16→ 8.→ 4.→ 2.→ 1可以看出,该序列(从13开始,到1结束)包含10个术语。虽然这还没有被证明(科拉兹问题),但人们认为所有的起始数字都以1结束。
100万以下的哪个起始数字产生的链条最长?
注:一旦链开始,条款允许超过一百万。
每次在序列中生成一个项目时,也会生成该项目的项目。例如,对于13,您发现它生成10个项目。但在这个过程中,你还会发现40产生9个项目,20产生8个项目,10产生7个项目,等等。你可以在列表或字典中记住这些信息,这样在做13之后,你就不必再看40、20、10、5、16、4或2。
此外,当您生成以前从未见过的序列时,您可以查看此信息并将其用作快捷方式。对于13,你在看到13之前就已经看到了10,所以你只需计算40,20,10,然后你就知道10产生了7个项目,所以你只需将其添加到你已经看到的3个项目中,而不用计算其余的。
这将使用相当多的内存,但对于您必须考虑的项目数量来说,这是完全可行的。您可以使用某种截止(例如,仅存储100000或以下数字的结果),这仍然可以实现速度的极大提高,但使用的内存更少。
实现这一点的一种简单方法是重写函数,以递归方式而不是迭代方式计算序列,然后应用像这样的记忆修饰符。递归有一些开销,但记忆的好处可能会超过这一点。
我正在逐个迭代字符串对象列表中的元素: 在这里,每次我调用list上的get()时,列表都会从其一端一直迭代到第i个元素——因此上面循环的复杂性是O(n^2)。 是a.)对于增强型for循环,与上面相同,还是b.)对于循环,将指针保持在最后一个指针所在的位置,因此下面循环的复杂性是O(n)? 如果上面的情况(b)——我想是这样的——在列表上使用迭代器有什么好处吗。这是简单的迭代--没有回头路 蒂亚
本文向大家介绍MySQL 5.7增强版Semisync Replication性能优化,包括了MySQL 5.7增强版Semisync Replication性能优化的使用技巧和注意事项,需要的朋友参考一下 一 前言 前文 介绍了5.5/5.6 版本的MySQL semi sync 基础原理和配置,随着MySQL 5.7 的发布,新版本的MySQL修复了semi sync 的一些bug 并且增强了
关于Java,我非常习惯于将我的所有变量声明为私有的,并生成公共的getters和setters以符合通用的约定。 不过,我觉得很奇怪:对于除了赋值和返回请求值之外没有其他功能的getters和setters,调用以下方法不会影响性能吗: 而不是: 编译器是否在这里做了一些事情来帮助函数调用不增加额外的周期?如果不是的话,那么在更健壮的应用程序中,这一理论不就是雪球吗? 编辑:: 为了澄清,这个问
ZGC 或 Z 垃圾收集器是在 Java 11 中引入的,作为一种低延迟垃圾收集机制。ZGC 确保垃圾收集暂停时间不依赖于堆大小。无论堆大小是 2MB 还是 2GB,它都不会超过 10 毫秒。 但是 ZGC 在将未使用的堆内存返回给操作系统方面存在限制,例如 G1 和 Shenandoah 等其他 HotSpot VM GC。以下是使用 Java 13 完成的增强功能: ZGC 默认将未提交的内存
我有一个手风琴,它在我的页面内工作得很好。当你点击标题时,隐藏的div会显示,当你再次点击它时,它会再次隐藏。我想通过增加一个功能来增强手风琴,使手风琴一次只显示一个项目。换句话说,如果我打开了一个项目,并单击另一个标题,则当前打开的项目将自动关闭。 这是HTML 这是我的jQuery代码 如您所见,我有一个main(div class=“cap”)后跟一个(div class=“capitalo
除了agent和环境之外,强化学习的要素还包括策略(Policy)、奖励(reward signal)、值函数(value function)、环境模型(model),下面对这几种要素进行说明: 策略(Policy) ,策略就是一个从当环境状态到行为的映射; 奖励(reward signal) ,奖励是agent执行一次行为获得的反馈,强化学习系统的目标是最大化累积的奖励,在不同状态下执行同一个行