- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
问题链接:https://projecteuler.net/problem=14
所以我在 R 中使用一个相当“简单”的记忆化实现解决了这个问题。基本上,我只是从 1:1,000,000 开始计数,然后计算达到 1 所需的 collatz 应用程序的数量。如果我遇到数字小于当前迭代,我只是将该数字的“链”添加到当前序列。
R代码:
collatz <- function(n) {
if(n %% 2 == 0) return(n / 2)
else return(3 * n + 1)
}
chains <- rep(0, 1e6)
for(i in 1:length(chains)) {
n <- i
iter <- 0
while(n != 1) {
n <- collatz(n)
iter <- iter + 1
if(n < i) {
iter <- iter + chains[n]
break
}
}
chains[i] <- iter
}
which.max(chains)
现在这段代码运行得比较快,即使对于 R 也是如此,但我越想这个问题,就越觉得它很有趣。
似乎有很多不同的方法可以在空间和运行时方面提高效率。也许向后循环?也许先跑完奇数或偶数,再跑另一半?也许在递增时保留中间结果而不仅仅是末端链长度?可能还有一些想法本质上更“数学”,而不是与动态规划直接相关。有没有人考虑过这个问题/算法并且可以提供一些其他可能更有效的实现?
最佳答案
您正在按照 1:1000000 的严格顺序进行内存。但是,没有理由在您第一次看到一个值时不记住它。例如,从 3
开始给出序列 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
。除了仅内存 3
之外,您还可以内存 10, 5, 16, 8, 4
。
这将减少操作的数量,也许会大大减少。继续上面的例子,当你第一次看到它时记住 4
节省了以后内存它所需的 2 个步骤,而内存 5
又节省了 3 个步骤。看起来这些保存的步骤应该很快滚雪球。
关于algorithm - 欧拉计划 #14 : Collatz Conjecture - What are some algorithms to utilize memoization/speed effectively?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31351173/
我已经为 Project Euler's Challenge 14 编写了代码, 在这两个 Haskell和 C++ (ideone链接)。他们都记得他们之前在数组中所做的任何计算。 使用 ghc -
? 1 2
所以,我只是想创建一个循环来运行“3n+1”公式,当我输入负数时,我陷入了余数为 0 和 -1 的无限循环。 这是正确的还是我的代码缺少某些内容? 这是我的代码: Scanner scan =
已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 灵感来自http://xkcd.com/710/这是一个高尔夫代码。 挑战 给定一个大于 0
我用 Python3 编写了一个计算 Collatz 猜想的基本脚本。它接受一个正整数作为输入,并返回步数,直到序列下降到 1。 我的脚本非常适合小于~2 万亿的任何整数输入,但高于此阈值的输出太
我正在解决 Project Euler 问题,但我卡在了第 14 个位置,我确实设法使用蛮力解决了它,问题是: http://projecteuler.net/problem=14 The follo
问题链接:https://projecteuler.net/problem=14 所以我在 R 中使用一个相当“简单”的记忆化实现解决了这个问题。基本上,我只是从 1:1,000,000 开始计数,然
我是一名优秀的程序员,十分优秀!