我有以下伪码:
for j = 0 to argmax {l where t mod 2^l = 0} doT是在这个for循环之外递增的计数器。我的问题是如何评价argmax的陈述?

我相信代码中的“我”是个错误。不可能是对的。
发布于 2013-10-11 07:33:05
没有封闭形式的argmax函数.
Argmax说,查找参数(参数),使函数最大化。
它可以是任意复杂的,如果在语句中有一个复杂的表达式。
在这里,它可能可以实现为一个一行行的数学表达式,作者只是懒得拼写,因为线的长度。否则,如果您有一个有限整数域,您可以使用一个循环来实现它:
def argmaximod2l(maxl, i):
for l in range(maxl, 0, -1):
if i % (2**l) == 0: return l
raise Exception("No l was divisible by i.")如果你有两个整数,你可以使用嵌套循环;如果你的参数是双倍的,并且你有一个光滑的凸函数,你可以使用梯度下降方法。
在这种情况下,最大l应该是i的尾随零数。还有更有效的方法(也可能有一个库函数,例如Long.numberOfLeadingZeros )可用。
在这种情况下,您可能希望将循环实现为:
for (int j=0, i=t; (i&1)==0; j++, i>>>=1) {
...
}发布于 2013-10-11 02:05:02
不太确定我是否明白你问题的要点?
for (int j = 0; j < argmax; j++) {...}因此,由于argmax是一个函数,那么
for (int j = 0; j < argmax(); j++) {...}
private int argmax () {return some int}发布于 2013-10-11 02:43:17
与其将argmax实现为一个函数,甚至不是直接计算argmax,我认为只这样做会更简单:
int j=0;
for(int s=t*2; s%2==0; s/=2){
// loop code goes here
j++;
}https://stackoverflow.com/questions/19309083
复制相似问题