首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Argmax语句求值Java

Argmax语句求值Java
EN

Stack Overflow用户
提问于 2013-10-11 02:02:01
回答 3查看 4.7K关注 0票数 3

我有以下伪码:

代码语言:javascript
复制
for j = 0 to argmax {l where t mod 2^l = 0} do

T是在这个for循环之外递增的计数器。我的问题是如何评价argmax的陈述?

我相信代码中的“我”是个错误。不可能是对的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-11 07:33:05

没有封闭形式的argmax函数.

Argmax说,查找参数(参数),使函数最大化。

它可以是任意复杂的,如果在语句中有一个复杂的表达式。

在这里,它可能可以实现为一个一行行的数学表达式,作者只是懒得拼写,因为线的长度。否则,如果您有一个有限整数域,您可以使用一个循环来实现它:

代码语言:javascript
复制
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 )可用。

在这种情况下,您可能希望将循环实现为:

代码语言:javascript
复制
for (int j=0, i=t; (i&1)==0; j++, i>>>=1) {
  ...
}
票数 3
EN

Stack Overflow用户

发布于 2013-10-11 02:05:02

不太确定我是否明白你问题的要点?

代码语言:javascript
复制
for (int j = 0; j < argmax; j++) {...}

因此,由于argmax是一个函数,那么

代码语言:javascript
复制
for (int j = 0; j < argmax(); j++) {...}

private int argmax () {return some int}
票数 1
EN

Stack Overflow用户

发布于 2013-10-11 02:43:17

与其将argmax实现为一个函数,甚至不是直接计算argmax,我认为只这样做会更简单:

代码语言:javascript
复制
int j=0;
for(int s=t*2; s%2==0; s/=2){
  // loop code goes here
  j++;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19309083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档