Обозначение Big O обеспечивает верхнюю границу для функции, тогда как Big Theta обеспечивает жесткую границу. Однако я считаю, что нотация Big O обычно (и неформально) преподается и используется, когда они действительно означают Big Theta.
например, «Быстрая сортировка - это O (N ^ 2)» может превратиться в гораздо более сильное утверждение «Быстрая сортировка - это Θ (N ^ 2)»
Хотя использование Big O технически правильно, разве более распространенное использование Big Theta не будет более выразительным и приведет к меньшему беспорядку? Есть ли какая-то историческая причина, почему этот Большой О чаще используется?
Википедия отмечает:
Неформально, особенно в компьютерных науках, часто допускается злоупотребление нотацией Big O для описания асимптотической жесткой границы, где использование нотации Big Thetata может быть более целесообразным в конкретном контексте.
Ответы:
Потому что вас обычно интересует наихудший случай при анализе производительности. Таким образом, знание верхней границы достаточно.
Когда он работает быстрее, чем ожидалось для данного ввода - это нормально, это не критическая точка. Это в основном незначительная информация.
Некоторые алгоритмы, как заметил @Peter Taylor, вообще не имеют жесткой границы. См., Например, быструю сортировку O (n ^ 2) и Omega (n).
Кроме того, жесткие границы часто сложнее вычислить.
Смотрите также:
источник
Одна из причин заключается в том, что во многих случаях known просто неизвестно. Например, Матричное умножение - это O (n ^ 2.376), но нет жесткой границы. Конечно, насколько я могу судить, это жесткая граница для матричного умножения, но мы не знаем его значение.
источник