Получить уровень по опыту
У меня есть этот код:
function getLevels($cEXP) { // $cEXP is current player experience
$i = 1;
while(!$n) {
$NextLevelXP = pow($i,3) + 2 * $i;
if($NextLevelXP > $cEXP) {
$AllLevels = $i;
break;
}
$i++;
}
}
Все, что мне нужно знать, об оптимизации возможностей для этого или альтернативе, чтобы получить количество уровней по $NextLevelXP = pow($CurrentLevel,3) + 2 * $CurrentLevel;
уравнение.
1 ответ
Решение
Вы можете даже выполнить бинарный поиск по значению, чтобы получить алгоритм O(logN) вместо O (N), но, поскольку N - это число уровней, которое, я не думаю, будет больше 1000, нет необходимости усложнять код, Вы можете сделать то же самое, что и вы, но с более коротким кодом:
function getLevels($cEXP) {
for($i = 1; ($i * $i + 2) * $i <= $cEXP; $i++);
return $i - 1;
}
PS Обратите внимание, что я избавился от pow
, старайтесь избегать этого, чтобы иметь дело только с целыми числами.