Это все еще O(n)
- это потому, что он асимптотически растет с той же скоростью, что и O(n)
Большая O-нотация используется для верхней границы алгоритмического роста, то есть это функция, которую алгоритм гарантированно будет расти с той же скоростью или медленнее, чем.
В среднем случае ваш алгоритм будет расти со скоростью O(n/m)
, где m
- это некоторая оценка степени плотности индексов в ваших строках (0 = нет индексов, 1 = индекс для каждого символа). Предполагая, что это примерно постоянно по сравнению с n
, вы можете игнорировать m
и все равно сказать, что алгоритм O(n)
.
Тот факт, что в реальном мире ваш алгоритм почти наверняка будет быстрее, чем O(n)
, не останавливает его, начиная с O(n)
функции.
Взгляните на эту страницу , в частности:
Символ O используется для описания асимптотической верхней границы для величины функции в терминах другой, более простой функции.
Это означает, что при x> k, когда x стремится к бесконечности, значение f (x) всегда будет уступать C * g (x) (с C постоянным).