Что означает слово «масштабируемость» с точки зрения Big O?

Я встречал множество источников, утверждающих, что:

Бенчмарки оценивают время выполнения, Big O оценивает масштабируемость.

Они объяснили значение «масштабируемости» следующим образом:

Масштабируемость говорит вам, как масштабируется время выполнения вашего алгоритма. Значение, как время вычислений увеличивается, когда вы увеличиваете размер ввода. Для О ( н ) вы удваиваете размер входных данных и удваиваете время вычислений. Для О ( н 2 ) вы удваиваете размер входных данных, в четыре раза увеличиваете время вычислений и так далее.

Это означает, что если ваш алгоритм принимает ф ( н ) шагов в худшем случае и ф е О ( н 2 ) , то отношение ф ( 2 н ) ф ( н ) равно 4 при достаточно больших значениях н (вы удваиваете размер ввода и в четыре раза увеличиваете время вычислений).

И в этом было так много смысла. Но недавно мне показали контрпример, доказывающий, что приведенное выше утверждение просто неверно. Рассмотрим функцию ф ( н ) "=" н 2 ( потому что ( н ) + 2 ) . Мы видим, что ф е О ( н 2 ) . Кроме того, для тех из вас, кто хочет заметить, что О ( н 2 ) люди обычно имеют в виду Θ ( н 2 ) мы можем легко заметить, что ф е Θ ( н 2 ) также:

введите описание изображения здесь

Но ф не масштабируется как н 2 в том смысле, что мы не можем утверждать, что ф ( 2 н ) ф ( н ) равно 4 (даже приблизительно) при любых (даже больших) значениях n. Я имею в виду, если мы знаем, что ф е О ( н 2 ) и если мы удвоим размер входных данных, мы не сможем просто вчетверо увеличить время вычислений, потому что это неправильно.

Я сделал сюжет ф ( 2 н ) ф ( н ) для вас, чтобы визуализировать это:

введите описание изображения здесь

Не похоже, что это соотношение стремится к 4.

Итак, мои вопросы:

  1. Почему люди так объясняют значение «масштабируемости»? Есть ли причина для этого или они технически неверны?

  2. Что же тогда означает это слово «масштабируемость»? Что же тогда оценивает Big O (если не «масштабируемость»)?

В общем, я ищу чисто математическое объяснение этому. Но не усложняйте, пожалуйста: я все еще изучаю исчисление одной переменной. Спасибо всем заранее!

Проблема в том, что ограничений технически не существует. Ясно, что ф является Θ ( н 2 ) по идее ограниченности, но в определении предела отмечается, что, хотя отношение функций определенно конечно и не равно нулю, предел косинуса не определен на бесконечности (колебание). Я не уверен здесь, но, может быть, даже есть основания сказать, что ф не является О ( н 2 ) вообще по этому признаку.
@FShrike, спасибо за комментарий. Но ф е О ( н 2 ) по определению Большого О.
Идея масштабируемости смешивается с осцилляциями, но из определений пределов нельзя сделать немедленный вывод о масштабируемости (хотя теперь я вспоминаю, что в определениях пределов используются верхняя и нижняя границы, чтобы обойти идею о том, что обычные пределы не существуют, поэтому я принимаю Верните часть того, что я сказал в предыдущем комментарии)
1. Примеры, подобные этому, где ф е Θ ( г ) но ф / г является колебательным, как н в реальной практике не распространены. Навскидку единственное, что приходит на ум при таком поведении, — это БПФ, и даже оно имеет фиксированное масштабирование, если вы работаете только со степенями двойки. 2. Масштабируемость по-прежнему грубо выражает скорость роста функции, насколько больше она становится, когда вы увеличиваете ввод на кучу. Большая Тета по-прежнему дает вам это грубое описание. Но ты прав, что просто зная, скажем, ф е Θ ( н 2 ) не говорит тебе этого ф ( 2 н ) / ф ( н ) будет стремиться к 4 .
В частности, в контексте теории сложности люди обычно интересуются либо наихудшими, либо типичными случаями. Худшие случаи в вашей ситуации будут означать «сравните две задачи, где н почти кратно 2 π "; типичные случаи будут означать "сравните две задачи, где н близко к нечетному кратному π / 2 ".
@Ian, спасибо за комментарий! В последнем комментарии вы утверждаете, что н 2 ( с о с ( н ) + 2 ) не может быть худшим случаем, потому что 3 н 2 еще хуже?
Я имею в виду, если фактическое время выполнения н 2 ( потому что ( н ) + 2 ) тогда худший случай для н на одном интервале длины 2 π будет, когда н является кратным 2 π и в этом случае у вас есть 3 н 2 .
@Ian, но, насколько я понимаю, фактического времени выполнения не будет, если вы сначала не укажете случай (худший, средний, лучший). С этого момента, когда вы классифицировали его как наихудший, вы выводите функцию ф ( н ) которые представляют собой количество шагов, предпринятых для наихудшего ввода длины н . Но как можно пойти еще дальше и указать отдельные точки вида 2 π к для представления поведения в худшем случае, если у нас уже есть функция ф что представляет наихудший случай поведения?
я имею в виду, что н - фактический размер ввода и ф ( н ) фактическое время выполнения и ф ( н ) колеблется, потому что каким-то образом числа близки к нечетным целым числам, кратным π с ними гораздо проще обращаться, чем с числами, близкими к четным целым кратным π (сама необычная ситуация). Так что худшее н заданного "порядка величины" - это близкие 2 π к , поэтому, если вы хотите изучить рост в худшем случае, вы смотрите на н "=" р о ты н г ( 2 π к ) , к "=" 1 , 2 , (т.е. 6 , 13 , 19 и т. д.)
@Ian, но ты согласен, что когда мы рассматриваем функцию ф ( н ) это уже означает каждый ввод н должно быть худшим? Потому что ф ( н ) по своему определению принимает только наихудшие входные данные
Нет, я говорю о локально худших значениях н (что обычно даже не стоит учитывать, но в вашем случае это важно).

Ответы (2)

Этот (очень красивый) пример весьма необычен — на практике функции ф ( н ) которые на самом деле возникают и Θ ( н 2 ) обычно удовлетворяют ф ( н ) / н 2 стремится к некоторому положительному пределу (а не просто отграничивается от 0 и ). Итак, упрощенная версия масштабируемости — лим н ф ( 2 н ) / ф ( н ) - существует и есть 4 .

Тем не менее, даже для вашей функции есть разумный смысл, в котором удвоение н , в среднем увеличивается ф ( н ) с коэффициентом 4 . Что мы можем подразумевать под «в среднем»? Ну, чтобы взять среднее, вам нужно удвоить более одного раза. Если вы удвоите дважды, чтобы перейти от ф ( н ) к ф ( 4 н ) тогда средний коэффициент масштабирования двух удвоений, который имеет смысл, представляет собой среднее геометрическое (потому что вы пытаетесь приблизиться к геометрическому росту), т.е. ф ( 4 н ) / ф ( н ) . Теперь и это не стремится к пределу, но ф ( 2 к н ) / ф ( н ) к , то есть (геометрический) средний коэффициент масштабирования от к удвоения, стремится к пределу, поскольку к , который 4 .

Спасибо за ответ! Но не похоже ли, что мы только что придумали из воздуха способ оправдать первоначальное значение слова «масштаб»?
Кроме того, почему среднее арифметическое хуже в этом случае? Мне это кажется столь же разумным, как и среднее геометрическое.
@mathgeek Это в основном потому, что если мы масштабируем с коэффициентом Икс а затем масштабировать с коэффициентом у , то общий масштаб равен Икс у нет Икс + у . Идея получения среднего значения заключается в том, «какой список к одинаковые вещи больше всего походили бы на этот список к разные вещи?» Здесь масштабирование к разные факторы должны давать тот же общий результат, что и масштабирование по «среднему» фактору к раз, и это работает, если под «средним» подразумевается среднее геометрическое.
Я не мог ожидать объяснения лучше, чем это! Спасибо! Но я с трудом могу представить людей, думающих обо всех этих вычислениях, когда они говорят, что время выполнения растет «порядка квадрата размера ввода». Не могли бы вы пояснить, о чем думают такие люди (что они на самом деле имеют в виду), говоря это, и правомерно ли вообще так говорить об этом? ф , данный ф е О ( н 2 ) ?
Это все еще правильно, просто он может дать сбой на уровне сравнения двух конкретных значений функции, если ф странно. И я действительно не могу не подчеркнуть, насколько нетипичен ваш пример в реальном асимптотическом анализе, особенно в теории сложности.
@ Jean-ClaudeArbaut Я не понимаю, почему это вводит в заблуждение. Я конкретно говорю о примере OP, который (как конкретно говорит OP) является примером функции, которая Θ ( н 2 ) но, похоже, не масштабируется, как ожидалось. Если вы знаете, что функция О ( н 2 ) , то во втором абзаце в принципе нужно заменить лим к лим суп и 4 к 4 .

Символы Ландау не заботятся о точном поведении функций. ф е О ( г ) означает, что для больших Икс у нас есть ф весы в лучшем случае так плохо, как г в смысле ф ограничен кратным г .

Когда люди объясняют это так, как вы упомянули, они чрезмерно упрощают это, вероятно, предполагая, что другая сторона иначе не поняла бы, о чем идет речь.

Спасибо за ответ! Но если вы посмотрите на мой первый сюжет, вы заметите, что ф масштабируется хуже, чем н 2 с интервалом ( 10 ;   12 ) например. Таким образом, он не «масштабируется МАКСИМАЛЬНО так плохо, как г ".
@mathgeek Мы рассматриваем ограничения как н в стандартном определении, а не как н ( 10 , 12 )
Я просто привел пример, чтобы вы могли легко увидеть его по сюжету. Но я уверен, вы видите, что мое утверждение верно для любого н (вы можете сделать его настолько большим, насколько хотите).
@mathgeek Это одно из предостережений с нотацией Ландау. Масштабирование — это термин, который мы используем для аргумента, который становится большим, но мы не указываем, насколько большим он будет. Обратите внимание, что если ф является непрерывным и г непрерывно и нигде 0 то на любом отрезке мы всегда найдем с с ф с г на этом интервале (мин./макс. конт. функций на компактах). И даже тогда определение символов Ландау всегда уточняет: Для всех Икс > Икс 0 для некоторого произвольного Икс 0 . Таким образом, в основном мы не заботимся о конечных значениях.
Вы можете думать об этом так: если ф е О ( г ) тогда асимптотика лим суп ф ( Икс ) г ( Икс ) конечно. Если ф е Θ ( г ) тогда также 0 < лим инф ф ( Икс ) г ( Икс ) .
Да, ваш последний комментарий - это определение, но, к сожалению, оно не объясняет значение слова «шкала» и почему оно имеет смысл в свете моего опубликованного вопроса.
Ну, масштабирование обычно не используется в чистой математике, а скорее в контексте алгоритмов и тому подобного. И здесь масштабирование просто означает: если я увеличу ввод, как изменится требуемое время. Например, если вам нужно отсортировать список размером н лучшие алгоритмы, которые работают без больших предположений, имеют порядок н бревно н сравнения. Поэтому, если я увеличу размер своего списка, требуемое усилие увеличится чуть больше, чем линейно, но меньше, чем квадратично. Конечно, есть несколько вещей, которые вы можете рассмотреть: В лучшем случае? Худший случай? Средний случай?
Хорошо, когда вы указали, что «масштабирование обычно не используется в чистой математике, а скорее в контексте алгоритмов», это начало обретать смысл. Вы привели пример работы алгоритма в О ( бревно н ) время. Не могли бы вы уточнить, что вы подразумеваете под «квадратичным увеличением»? Пожалуйста, имейте в виду пример неправильного объяснения «квадратичного увеличения», который я дал в своем вопросе.