Хоча інші відповіді дають хороші бали, я вважаю, що все ще трохи не погоджуюся. Отже, я поділюсь власними думками з цього приводу.
Коротше кажучи, я думаю, що показник постійного "як є" - це в кращому випадку пропущена можливість. Можливо, це найкраще, що ми можемо отримати зараз, але це далеко не ідеально.
Але по-перше, я вважаю, що коротка екскурсія є несекретною.
Коли у нас дієвий алгоритм?
Коли Даніель Санк запитав мене, що б я робив, якби був алгоритм розбиття простих чисел на a 106прискорення фактора на тестовому наборі серйозних випадків, я спершу відповів, що сумніваюся, це буде пов’язано з алгоритмічними вдосконаленнями, але іншими факторами (або машиною, або реалізацією). Але я думаю, зараз у мене інша реакція. Дозвольте додати вам тривіальний алгоритм, який може визначати дуже великі числа протягом мілісекунд і, тим не менш, дуже неефективний :
- Візьміть набір П (досить великих) прайменів.
- Обчислити П2, набір усіх композитів з рівно двома факторами П. Для кожного композиту збережіть, яку пару простих ліній використовують для його побудови.
- Тепер, коли дано екземпляр від П2, просто подивіться на факторизацію в нашій таблиці та повідомте про це. В іншому випадку повідомте про "помилку"
Я сподіваюся, що очевидно, що цей алгоритм є сміттям, оскільки він працює лише правильно, коли наш вхід є П2. Однак чи можемо ми побачити це, коли алгоритм заданий як чорний ящик і "за збігом" лише тест із вхідними данимиП? Звичайно, ми можемо спробувати перевірити багато прикладів, але це зробити дуже простоП дуже великий, але алгоритм неефективний для входів з П2 (можливо, ми хочемо використовувати хеш-карту чи щось таке).
Тож, це нерозумно, що наш алгоритм сміття, можливо, випадково має "чудодійні" скорочення. Зараз, звичайно, існує багато методик проектування експериментів, які можуть зменшити ризик, але, можливо, більш розумні «швидкі» алгоритми, які все ще не спрацьовують у багатьох, але недостатньо прикладів можуть нас обманути! (також зауважте, що я припускаю, що жоден дослідник не є шкідливим , що робить ще гірше!)
Отже, я б зараз відповів: "Пробудьте мене, коли буде кращий показник ефективності".
Як нам тоді зробити краще?
Якщо ми можемо дозволити собі протестувати наш алгоритм «чорної скриньки» на всіх випадках, ми не можемо обдурити вищесказане. Однак для практичних ситуацій це неможливо. (Це може зробити в теоретичних моделях!)
Замість цього ми можемо створити статистичну гіпотезу для деякого параметризованого часу роботи (як правило, для вхідного розміру), щоб перевірити це, можливо, адаптувати нашу гіпотезу і знову перевірити, поки ми не отримаємо гіпотезу, яка нам подобається, і відхилення нуля здається розумним. (Зверніть увагу, що є ймовірно інші фактори, які я ігнорую. Я практично математик. Дизайн експерименту - це не те, що в моїй експертизі)
Перевага статистичного тестування при параметризації (наприклад, це наш алгоритм О ( н.)3)? ) полягає в тому, що модель більш загальна, і тому її важче «обдурити», як у попередньому розділі. Це не неможливо, але принаймні статистичні твердження про те, чи є це розумним, можуть бути виправдані.
Отже, що робити з константами?
Я думаю, що лише констатуючи "109 прискорення, вау! "- це поганий спосіб вирішення цієї справи. Але я також думаю, що повністю знехтувати цим результатом також погано.
Я думаю, що найкорисніше вважати допитливу константу аномалією , тобто це твердження, яке саме по собі вимагає подальшого дослідження. Я думаю, що створення гіпотез на основі більш загальних моделей, ніж просто «наш алгоритм займає X час» - це хороший інструмент для цього. Тож, хоча я не думаю, що тут ми можемо просто перейняти конвенції про CS, повністю знехтувати «зневагою» до констант також є поганою ідеєю.