Что такое стандартный расчет, который принимает O (log N) в обозначениях Big O? - PullRequest
2 голосов
/ 21 апреля 2020

Я студент информатики, и мне нужно написать анализ, выполненный с использованием различных алгоритмов больших О. Чтобы облегчить нам, наш профессор дал нам несколько методов, чтобы переопределить, чтобы контролировать время наших реализаций.

Первый метод должен содержать реализацию проанализированного алгоритма Big O, а второй - стандартную «контрольную» строку.

Например, квадратик c время :

  public void method1(int n) {
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        analyser();
      }
    }
  }

Управление:

  public int method2(int n) {
    return n*n;
  }

Теперь для логарифми c функция:

  public void method1(int n) {
    for (int i = 1; i < n; i = i*2) {
        analyser();
    }
  }


  @Override
  public int method2(int n) {
    return (int) Math.log(n);
  }

К сожалению, второй метод возвращает бесконечные значения, и я не могу понять, почему. Есть ли другие простые вычисления, которые я мог бы использовать вместо Math.log(n), чтобы использовать в качестве «контроля» для сравнения времени двух методов? Спасибо.

1 Ответ

1 голос
/ 21 апреля 2020

method2 вернет неопределенное значение для n=0, поскольку log(0) по определению не определено. Вы можете изменить это, просто заявив, что n больше 0 в методе. Если это утверждение не выполняется, вызовы трассировки стека и / или прохождение в отладке помогут определить, где method2 вызывается с n=0.

...