Связь между асимптотическими границами и временем выполнения?

Возьмем, к примеру, бинарный поиск. Лучшее время выполнения будет получено при первом сравнении, когда

key_to_find == (imin + imax)/2;

И в лучшем случае время выполнения будет представлено O (1). Я полностью это понимаю, но меня смущает, почему используется O (1) и почему я не могу использовать (1) или любую другую запись для того же.

т.е. Как определить, какую нотацию следует использовать для представления времени выполнения (лучший, средний или наихудший случай).


person Akina91    schedule 30.06.2012    source источник
comment
Говорить о лучшем случае нет никакого смысла. В лучшем случае почти всегда можно сделать очень быстро. Это ничего не значит.   -  person n. 1.8e9-where's-my-share m.    schedule 30.06.2012
comment
Перефразируя себя: как определить, какую нотацию следует использовать для представления времени выполнения (лучший, средний или худший случай)?   -  person Akina91    schedule 30.06.2012
comment
Не стоит тратить время на лучший случай. Это не интересно. Это не важно. Нет смысла когда-либо начинать говорить об этом. Что касается выбора обозначения для других случаев, это зависит от того, что вы хотите сказать. В В Википедии есть все. Обычно Θ является наиболее полезным и точным, поэтому используйте его всякий раз, когда можете.   -  person n. 1.8e9-where's-my-share m.    schedule 30.06.2012
comment
Вы можете использовать Theta в любом случае, если для этой функции действительно применяется Big Theta. Big O и Big Theta не имеют никакого отношения к делу, о котором вы говорите. Как правило, вы находите большой O времени выполнения в худшем случае, а затем этот большой O описывает время выполнения во всех случаях (поскольку это верхняя граница). Самые большие проблемы, которые вы должны обнаружить при использовании Big Theta во время выполнения, связаны с тем, что вы используете его для описания всех случаев. Сортировка вставками может выполняться линейно или квадратично, поэтому вы можете описать время ее выполнения во всех случаях с помощью одного большого тета, но вы можете это сделать для сортировки слиянием.   -  person Dylan M.    schedule 05.07.2012


Ответы (2)


O-обозначение и Θ-обозначение не имеют прямого отношения к лучшему, среднему или худшему случаю. Они используются для асимптотических оценок функций. Вы можете написать: 47n lg n = O(n lg n), 3n^2 + 4n = O(n^2)

И есть разница между обозначениями O и Θ. O означает «не более (с использованием некоторого постоянного множителя)», Θ означает «равно (с использованием некоторого постоянного множителя)», например: 47n ln n = O (n ^ 2), но это не Θ (n ^ 2).

Если вы хотите выразить лучший случай, средний случай или худший случай, вы обычно записываете их явно: «Лучший случай — O(1) (или Θ(1)), средний случай — O(lg n), худший случай — O( н)».

Иногда вы также «время работы равно O (x)», тогда вы имеете в виду, что время работы самое большее пропорционально x. Если вы говорите, что «время работы равно Θ(x)», то вы имеете в виду, что время работы всегда пропорционально x.

person usamec    schedule 30.06.2012

Вы можете использовать любые обозначения. Big Theta является наиболее точным, поэтому вы должны использовать его всякий раз, когда вы его знаете. В качестве примечания, O (1) эквивалентно Θ (1) в контексте анализа сложности (где количество операций является целым числом, т. Е. Нельзя иметь O (1 / n) как сложность).

person Franck Dernoncourt    schedule 30.06.2012
comment
O(1) эквивалентно Θ(1). - нет, это не так - person usamec; 30.06.2012
comment
В контексте анализа сложности (где количество операций является целым числом, т. е. у вас не может быть O (1/n) в качестве сложности), я считаю, что это так. Не могли бы вы привести пример, в котором это не так? - person Franck Dernoncourt; 30.06.2012
comment
n ln n = O (n ^ 2), но не Θ (n ^ 2) - person usamec; 30.06.2012
comment
Я согласен с @FranckDernoncourt, хотя вам, вероятно, следует воздерживаться от того, чтобы называть их эквивалентными, потому что они не описывают один и тот же набор функций. Вы четко изложили свою мысль, и это, конечно, самое главное. - person Dylan M.; 05.07.2012
comment
Я отредактировал свой ответ, указав контекст (то есть набор функций, в которых мы находимся). - person Franck Dernoncourt; 06.07.2012