java - Argmax 语句评估 Java

标签 java algorithm

我有以下伪代码:

for j = 0 to argmax {l where t mod 2^l = 0} do

t 是一个在此 for 循环之外递增的计数器。我的问题是如何评估 argmax 语句?

enter image description here

我认为代码中的“i”是一个拼写错误。 “t”可能是正确的。

最佳答案

没有封闭形式的 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.")

如果你有两个整数,你可以使用嵌套循环;如果你的参数是 double 的并且你有一个光滑的凸函数,你可以使用梯度下降法。

在这种特殊情况下,最大 l 应该是 i 的尾随零的数量。有更有效的方法(可能还有一个库函数,例如 Java 中的 Long.numberOfLeadingZeros)可用。

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

for (int j=0, i=t; (i&1)==0; j++, i>>>=1) {
  ...
}

关于java - Argmax 语句评估 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19309083/

相关文章:

java - JComboBox运行3次后给出一个数组[jdbc]

algorithm - 如何找到一组数据点的中心?

algorithm - 每个区间在其范围内的最大重叠数

java - Camel - 设计可扩展的动态数据流

java - Spring数据分页和排序存储库,具有多个字段和日期

algorithm - 查找数字之和为质数的数字

algorithm - 如何在粒子滤波算法中确定性地选择基础样本?

c++ - 构建分数面试挑战

JavaFx TableView 未填充所有必需的列

java - 在 Java Web 应用程序中实现双因素身份验证