【发布时间】:2013-05-09 03:31:39
【问题描述】:
for (int i = 0; i < 3; ++i) {
for (int k = 0; k < 7; ++k) {
for (int h = i; h < 4 + i; ++h) {
result = state.getAt(k, h);
if (result == 1) {
++firstpl;
}
if (result == 2) {
++secondpl;
}
if (firstpl > 0 && secondpl > 0) {
break;
}
//y = k;
}
if (firstpl == 0 && secondpl == 0) {
break;
} else if (firstpl > secondpl) {
score += firstpl * firstpl;
//if(state.getHeightAt(y)-3 < 3) score += 3+firstpl*2;
} else {
score -= secondpl * secondpl;
//if(state.getHeightAt(y)-3 < 3) score -= 3+secondpl*2;
}
firstpl = 0;
secondpl = 0;
}
}
基本上我有一个 7 x 6 的网格。我正在浏览 7 列并垂直查看每 4 个连续的块。因为向上有6个街区。每列有 3 个四个连续的块。 State.getAt(k,h) 接受 x 和 y 并返回一个值。
【问题讨论】:
-
为了帮助提高效率,我们需要了解更多上下文。例如,这个计算的最终目标是什么?这将帮助我们提出实现相同目标的替代方法。此外,为什么需要加快速度?您是针对
state的不同值多次调用此代码,还是多次调用但代码中的操作之一(例如state.getAt())很昂贵?如果是后者,那么最好专注于减少所需的昂贵操作的数量(例如,也许通过记忆化方法)。 -
为什么需要提高这个效率?看起来根本不需要太多时间。你测量/分析过它吗?
-
它在 Min_Max 函数中被调用,因此会被多次调用。我只被允许在几毫秒内产生分数。确切地说,它在评估函数中。
-
对于最终目标,将每4个连续块的得分相加并返回。
-
抱歉再次发表评论。澄清一下,状态是 7x6 网格。 getAt() 接受 x 值和 y 值并返回 0、1 或 2。
标签: java for-loop performance