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×6的網格。我正在經歷7列,並且每4個連續的塊垂直地看。由於有6個街區向上。每列有3個連續的塊。 State.getAt(k,h)接受x和y並返回一個值。需要幫助減少三重循環以提高效率
爲了幫助提高效率,我們需要了解更多的上下文。例如,這個計算的最終目標是什麼?這將有助於我們提出實現相同目標的替代方法。另外,爲什麼你需要使這個更快?你是否多次爲'state'的不同值調用這段代碼,或者你調用它幾次,但代碼中的一個操作(例如'state.getAt()')是昂貴的?如果是後者,那麼集中精力減少所需的昂貴操作的數量會更好(例如,可能通過記憶方法)。 – Simon 2013-05-09 03:52:07
爲什麼你需要提高這個效率?看起來並不需要太多時間。你測量/分析了它嗎? – 2013-05-09 03:54:44
它在Min_Max函數中調用,所以會被多次調用。我只允許數毫秒來產生分數。確切地說,它在評估功能中。 – user1798750 2013-05-09 03:57:38