Другие языки программирования и технологии

Зачем нужны алгоритмы О(n), O(n!)?

Зачем нужны эти алгоритмы, если есть более быстрые.
Извините если какую-то фигню сказал, я только начал изучать алгоритмы
Миша Лосев
Миша Лосев
158
О (n) - это значит что алгоритм выполняется за линейное время. То есть как раз очень быстро. Медленно это О (n ^ 2) - квадратичная сложность. Например сортировка пузырьком. Но и эти алгоритмы тоже нужны хотя бы для понимания информатики
ЮС
Юрий Сушков
87 847
Лучший ответ
Миша Лосев Просто не очень понял зачем применять более медленные алгоритмы
>Извините если какую-то фигню сказал, я только начал изучать алгоритмы
Извиняем, изучай дальше - авось поймешь, что сморозил.
Хабиров Роман
Хабиров Роман
97 866
O(n) - это очень быстрый алгоритм. Быстрее только O(log(n)) и O(1). Найти значение в неотсортированном массиве быстрее, чем O(n) ты не сможешь. Поиск в отсортированном массиве - уже O(log(n)), но чтобы отсортировать массив, понадобится O(n*log(n)) - что дольше, чем O(n).

O(n!) - это сложность нахождения наилучшего решения для всех NP-полных задач. Более быстрых алгоритмов для них не придумали. Потому, в реальной жизни для этих задач ищут не наилучшее решение, а решение, близкое к оптимальному - что можно сделать намного быстрее.
Яков Кох
Яков Кох
74 239
Люди не специально создают O(n) алгоритмы и O(n!) - просто находят алгоритм решения задачи, какой-то алгоритм за O(n) решает, а какой-то за O(n!).
Если найдётся эффективный и универсальный алгоритм отсортировки за O(log(n)) - то все быстро на него перейдут, а O(n) будет только в учебниках как пример.
А где-то O(n!) это хорошо, вот скажем, ты бы хотел, чтобы твой пароль взламывался за O(n) времени или за O(n!)? Андрей уже упомянул NP-полные задачи. Одной из задач тысячелетия как раз и является, можно ли NP задачи решать за полиномиальное время (O(n в какой-то степени)). Если NP задачу можно быстро проверить, то можно ли её быстро решить?
Витя Постников
Витя Постников
28 652