O (n) - только часть истории - большая часть, и часто доминирующая часть, но не всегда доминирующая часть.Как только вы перейдете к оптимизации производительности (, которую не следует делать слишком рано в вашей разработке ), вам необходимо рассмотреть все ресурсы, которые вы используете.Вы можете обобщить Закон Амдала , чтобы обозначить, что время выполнения будет зависеть от самого ограниченного ресурса.Обратите внимание, что это также означает, что конкретное оборудование, на котором вы выполняете, также должно учитываться.Программа, которая высоко оптимизирована и чрезвычайно эффективна для массивно параллельного компьютера (например, CM или MassPar), вероятно, не будет хорошо работать с большим векторным блоком (например, Cray-2) или высокоскоростным микропроцессором.Эта программа может даже не работать на огромном массиве способных микропроцессоров (стиль отображения / уменьшения).Разные оптимизации для разных балансов кеша, связи с процессором, ввода-вывода, скорости процессора, доступа к памяти и т. Д. Означают разную производительность.
Когда я работал над оптимизацией производительности, мы стремились к этому »сбалансированная "производительность по всей системе.Супербыстрый процессор с медленной системой ввода / вывода редко имел смысл, и так далее.O () обычно учитывает только сложность процессора.Возможно, вам удастся обменять пространство памяти (развертывание циклов не имеет смысла в O (), но часто помогает реальной производительности);забота о попаданиях в кэш, т. е. линейные макеты памяти, ошибки в банках памяти; виртуальная против реальной памяти;лента против вращающегося диска против RAID и так далее.Если в вашей производительности преобладает нагрузка на процессор, а также ввод-вывод и расшатывание памяти, основной проблемой является big-O.Если ваш процессор на 5%, а сеть на 100%, возможно, вы можете уйти от big-O и работать над вводом-выводом, кэшированием и т. Д.
Многопоточность, особенно с многоядерными процессорами., делает весь этот анализ еще более сложным.Это приводит к очень обширному обсуждению.Если вы заинтересованы, Google может предоставить вам месяцы или годы ссылок.