Wolfram mathematica 如何专门用mathematica编写这个程序的代码?

Wolfram mathematica 如何专门用mathematica编写这个程序的代码?,wolfram-mathematica,Wolfram Mathematica,我在Mathematica中实现了以下问题的解决方案,但是计算kis的f或大数的集合B需要很长的时间(小时) 某人建议在C++中实现这一点在不到10分钟内就产生了一个解决方案。C++是一个学习这些问题的好语言,还是可以改进我的Mathematica代码来解决性能问题? 我对C或C++一无所知,学习这门语言应该很困难。我更喜欢用mathematica改进或编写新代码 问题描述 假设$f$是一个算术函数,并且 A={k1,k2,…,kn}是中的整数 递增顺序 现在我想从k1开始,然后 比较f(ki)

我在Mathematica中实现了以下问题的解决方案,但是计算
ki
s的
f
或大数的集合B需要很长的时间(小时)

某人建议在C++中实现这一点在不到10分钟内就产生了一个解决方案。C++是一个学习这些问题的好语言,还是可以改进我的Mathematica代码来解决性能问题? 我对C或C++一无所知,学习这门语言应该很困难。我更喜欢用mathematica改进或编写新代码

问题描述

假设$f$是一个算术函数,并且 A={k1,k2,…,kn}是中的整数 递增顺序

现在我想从k1开始,然后 比较f(ki)和f(k1)。如果 f(ki)>f(k1),将ki作为k1

现在从ki开始,比较f(kj) 对于f(ki),对于j>i。如果f(kj)>f(ki), 把kj作为ki,重复这个 程序

最后我们将有一个子序列 B={L1,…,Lm}通过此属性:
f(L(i+1))>f(L(i)),对于任何1,代码中的大部分时间都花费在除数IGMA中,因为它需要对整数进行因子运算。但它只需要考虑它们,因为您已经将它们相乘,并且丢失了信息

但问题的直接解决方法是预计算f[k[[i]]

k = List[k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, 
   k15, k16, k17, k18, k19, k20];
fk = ParallelMap[f, k]; (* precompute *)

i = 1;
count = 0;
For[j = i, j <= 20, j++, 
  If[fk[[j]] - fk[[i]] > 0, i = j; Print["k", i];
   count = count + 1]];
Print["count= ", count]
k=List[k1,k2,k3,k4,k5,k6,k7,k8,k9,k10,k11,k12,k13,k14,
k15、k16、k17、k18、k19、k20];
fk=平行映射[f,k];(*预计算*)
i=1;
计数=0;
对于[j=i,j0,i=j;Print[“k”,i];
计数=计数+1]];
打印[“count=”,count]

听起来您的现有实现存在性能问题。我建议您将现有代码发布到StackOverflow.com,并征求改进建议。这是一个属于那里而不是这里的问题。我试图编辑这个问题,使它更清晰易读。我仍然认为它应该迁移到SO,但它可能有更好的机会以这种形式生存。如果我的编辑是有害的,请随时回复。在C++中实现相同的算法可能不会更快。Mathematica已经相当快了。您的表格[…]用法错误;你想要列表[k1,k2…]你能解释一下你想要达到的目标吗?您的示例函数似乎有点奇怪。那些才是你要对付的人吗?
««««««««««««««««««««««««««««««««««««
k = List[k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, 
   k15, k16, k17, k18, k19, k20];
fk = ParallelMap[f, k]; (* precompute *)

i = 1;
count = 0;
For[j = i, j <= 20, j++, 
  If[fk[[j]] - fk[[i]] > 0, i = j; Print["k", i];
   count = count + 1]];
Print["count= ", count]