Вопрос мог бы использовать немного больше контекста.
При программировании реальной программы мы, вероятно, измерим время выполнения программы. Есть несколько потенциальных проблем с этим, хотя
1. На каком оборудовании работает программа? Сравнение двух программ, работающих на другом оборудовании, действительно не дает значимого сравнения.
2. Какое другое программное обеспечение работает? Если что-то еще работает, оно украдет циклы процессора (или любой другой ресурс, на котором работает ваша программа).
3. Какой вход? Как уже говорилось, для небольшого набора решение может выглядеть очень быстро, но масштабируемость выходит за рамки. Кроме того, некоторые входные данные проще, чем другие. Если как человек, вы дадите мне словарь и попросите разобраться, я верну его обратно и скажу, что сделано Предоставление мне набора из 50 карт (намного меньше словаря) в случайном порядке займет у меня намного больше времени.
4. Каковы начальные условия? Если ваша программа запускается впервые, есть вероятность, что ее раскрутка с жесткого диска займет большую часть времени в современных системах. Сравнение двух реализаций с небольшими входами, скорее всего, замаскирует различия между ними.
Обозначение Big O охватывает многие из этих проблем.
1. Аппаратное обеспечение не имеет значения, так как все нормируется на скорость 1 операции O (1).
2. Большой О говорит об алгоритме, свободном от других алгоритмов вокруг него.
3. Big O говорит о том, как вход изменит время работы, а не сколько времени занимает один вход. Это говорит о том, что алгоритм будет работать хуже, а не о том, как он работает при среднем или простом вводе.
4. Опять же, Big O обрабатывает алгоритмы, а не программы, работающие в физической системе.