Правильно ли я говорю, что сложность времени в большой записи O будет только O (1)?Замечание Big O только о возвращении?
public boolean size() {
return (size == 0);
}
Правильно ли я говорю, что сложность времени в большой записи O будет только O (1)?Замечание Big O только о возвращении?
public boolean size() {
return (size == 0);
}
я прав, говоря, что временная сложность в большой нотации O бы только O (1)?
No.
Это настолько распространено заблуждение среди студентов/учеников, что я могу только постоянно повторять это:
Big-O обозначение, чтобы дать сложность из что-то, с уважение к определенным мерам, над другим номером:
Например, говоря:
«Алгоритм в месте FFT имеет потребность в пространстве О (п), с п-число FFT бункеров»
говорит что-то о том, сколько FFT будет нуждаться в память, наблюдаемая для разных длины БПФ.
Таким образом, вы не указали
size
?Я хотел бы подчеркнуть, что 3: студенты-информатики часто думают, что они знают, как что-то будет вести себя, если они просто знают теоретическую сложность времени алгоритма. В действительности эти цифры имеют тенденцию иметь значение ничего. И я имею в виду это. Единая выборка переменной, которая не находится в кэше CPU, может занять 100-10000 дополнений в CPU. Вызов метода только для того, чтобы увидеть, будет ли что-то 0, потребуется несколько десятков инструкций, если они скомпилированы напрямую, и может потребоваться намного больше, если вы используете что-то, что (semi-) интерпретируется как Java; однако, в Java, в следующий раз, когда вы вызовете тот же самый метод, он уже может быть там как предварительно скомпилированный машинный код ...
Тогда, если ваш компилятор очень умный, он может не только встроить функцию, удалив стек сохранения/восстановления и вызова/возврата, но, возможно, даже слияния результата с любыми инструкциями, которые вы настраивали на этом возвращаемом значении, что по сути означает, что эта функция в крайнем случае может не выполнять один цикл для выполнения.
Так что, независимо от того, как вы это положили, вы не можете сказать«сложность времени в большом O того, что является спецификой для языка», не говоря о том, что вы меняете, и точно, что такое ваша платформа.
Ваш аргумент полностью действителен. Но вместо этого вы можете спросить: «Какова сложность возврата начального адреса памяти блока памяти размером' n', как функция 'n'?? (в основном это то, что делает Java при возвращении объекта). И вот ответ O (1). – Turing85
@ Turing85, похоже, много споров с этим ....... – Unfitacorn
@Unfitacorn с чем именно? – Turing85
Размер FYI является глобальной переменной. – Unfitacorn
Что касается 'n'? –
Да, это O (1) – ControlAltDel