Получить уровень по опыту

У меня есть этот код:

 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, старайтесь избегать этого, чтобы иметь дело только с целыми числами.

Другие вопросы по тегам