Как бы вы говорили о следующей функции с точки зрения сложности Big O?
for (int i = 0; i < n; i++) {
for (int j = 0; j < n && j < 10; j++) {
//do something in constant time
}
}
В этом случае я бы увидел, что наихудший случай - это O (n), если бы я мог спокойно игнорировать тот факт, что это O (n ^ 2) для значений меньше 10, поскольку это далеко от «худшего» случая,
Для более реалистичного опыта.Давайте поговорим о сложности определения размера, если две строки являются перестановками друг друга.Простой способ сделать это состоит в том, чтобы взять массив целых чисел для всех значений символов (символы ascii были бы 128).
Теперь, если вы переключаетесь на вектор или хэш-карту (я бы сказал, просто использоватьмассив целых чисел, но пример, который кто-то использовал, был hashmap), вы получаете переменный размер до 128 символов.
Мы обсуждали сложность размера, и я просто сказал, что это O (1) только потому, что в худшем случае вы получите 128. Другой человек уверенно сказал, что это O (n) до 128 символов,и становится пределом O (1).У нас не было однозначного ответа.
Я никогда не слышал об использовании «лимитов» при работе с Big O. Так что же правильно в этом случае?Правильно ли я в том, что правильная сложность при оценке большой O должна учитываться только тогда, когда n "достаточно большой"?Или есть другие случаи, когда могут быть альтернативные ответы?