Во-первых, оба алгоритма «работают» для всех входов. Вопрос в производительности.
Ответы на этот вопрос довольно дерьмовые. Один из способов сказать, что один алгоритм асимптотически более эффективен, чем другой, - это если есть некоторый (специфичный для проблемы) размер входного файла, такой, что для любого большего входного размера более эффективный алгоритм будет выполнять меньше «вычислительных шагов», обычно с помощью некоторой абстрактной меры, например количество сравнений.
Идея ответов состоит в том, что асимптотически более эффективный алгоритм может все еще потребовать большего количества шагов перед этим входным размером. Это может быть так , что асимптотически более эффективный алгоритм требует меньше шагов для всех входов, но он не должен быть так и на практике , как правило , не является. Поэтому лучше сформулировать «правильный» ответ: « будет лучшим выбором для всех входов, кроме, возможно, небольших».Икс
Формулировка все еще не так велика, хотя. Во-первых, многие факторы влияют на решение о том, какой алгоритм является «лучшим выбором», но я дам им понять, что цель в этом случае достаточно ясна. Настоящая проблема - «маленькая» и «большая». Одна из моих любимых статей - «Самый быстрый и короткий алгоритм для всех хорошо определенных задач» . В этой статье описывается алгоритм, который дает любую спецификацию функции и доказательство того, что она может быть вычислена за полиномиальное время, будет вычислять эту функцию в оптимальной временной сложности с коэффициентом плюс аддитивный член. Например, если я предоставлю ему реализацию пузырьковой сортировки в качестве спецификации функции и простое доказательство того, что это былаO ( n 2 ) O ( n lg n ) 5 c n lg n + o ( n lg n ) c o ( n lg n )5O ( n2), он будет производить алгоритм сортировки, который был . Фактически, это дало бы алгоритм, который был бы где - постоянный фактор асимптотически * оптимального алгоритма. Это потрясающе. Есть только одна проблема: постоянный член - скрытый вO ( n lgн )5 c n lgn + o ( n lgн )сo ( n lgн )в этом примере - делает алгоритм почти наверняка совершенно невозможным практически для любой реальной проблемы. Что я подразумеваю под «совершенно неосуществимым»? Я имею в виду, что тепловая смерть вселенной произойдет много раз, прежде чем этот алгоритм завершится. Тем не менее, для подходящих «больших» входов это будет быстрее, чем пузырьковая сортировка. Моя точка зрения заключается в том, что почти наверняка физически невозможно записать каким-либо образом «достаточно большой» вход, не говоря уже о вычислениях на нем.
В любом случае, как бы я сказал правильный ответ: « требует меньше шагов, чем на достаточно больших входах». Это все еще немного расплывчато, поскольку существует множество понятий «шаг», которые могут применяться, и алгоритм может быть асимптотически более эффективным по одной метрике и менее эффективным по другой. Эта формулировка избегает ценностного суждения о «лучшем выборе»; Есть много причин для выбора асимптотически менее эффективных алгоритмов или даже менее эффективных алгоритмов, когда заданы постоянные факторы / термины, такие как эффективность кэширования или простота реализации.YИксY
* Здесь есть тонкость. Асимптотически оптимальный алгоритм может иметь худший постоянный коэффициент , чем асимптотически неоптимальный алгоритм. Я думаю, что он будет иметь наилучшее значение для любого асимптотически оптимального алгоритма, но возможно, что для выживания небольшого выигрыша в асимптотической эффективности добавится огромная сложность, которая значительно увеличивает постоянный коэффициент.ссс