Меня смущает эта большая проблема с нотацией О. Этот код не похож на O (n), но для количества оборотов цикла количество слов, поэтому оно в основном не превышает 20, поэтому, если мы скажем, что Length (line.split ()) является константой c, мы можем сказать O (cn) = O (п)?

while (this.scannerMainText.hasNextLine()){
        String line = this.scannerMainText.nextLine();
        for (String word : line.split("[.!,\" ]+")) {
           some statements
         }
     }
0
umtkas 11 Май 2016 в 15:00

2 ответа

Лучший ответ

Да, количество запусков цикла незначительно влияет на продолжительность, поэтому обычно не упоминается в нотации Big-O.

Например, если цикл O (n) выполняется 20 раз, вы можете подумать, что это обозначение будет O (20n), но поскольку влияние настолько мало, оно не упоминается в нотации Big-O и, следовательно, O (20n) = O (п). То же самое касается O (20n²) = O (n²) и т. Д.

2
Jeffalee 11 Май 2016 в 12:11

Да.

Сложность по времени зависит только от количества запусков алгоритма; фактическое количество / стоимость шагов в алгоритме (c, как вы его называете) не учитываются для нотации Big-O.

Добавлено

Я недостаточно знаком с крайними случаями теории, чтобы сказать, что если все строки равны по длине, вы можете уменьшить время выполнения внутреннего цикла до константы. Обычно этот алгоритм считается O (mn).

2
arootbeer 11 Май 2016 в 12:15