欧拉项目14问:哪个起始数,在一百万以下,产生最长的Collatz序列?
我一直在尝试优化这个解决方案,使其在小于1s的情况下执行。前50名议员的议程。目前,它在1,2中为我执行,所以我想我希望它快20%。有什么窍门或其他方法吗?
from time import time
def rec_col(n, cache):
if n in cache:
return cache[n]
x = (rec_col(n//2, cache) if n % 2 == 0 else rec_col(3*n+1, cache))+1
cache[n] = x
我有两个矩阵= X in R^(n*m)和W in R^(k*m),其中k<<n。设x_i是X的第一行,w_j是W的第j行,我需要找到的是,对于每个x_i,使<w_j,x_i>最大化的j是什么?
我看不出有一种方法可以迭代X中的所有行,但是有一种方法可以找到最大的点乘积,而不是每次都在W上迭代?
一个幼稚的实现是:
n = 100;
m = 50;
k = 10;
X = rand(n,m);
W = rand(k,m);
Y = zeros(n, 1);
for i = 1 : n
max_ind = 1;
max_val = dot(W(1,:), X(i