Что такое O в Big O?

23

Что такое Big и O в обозначении Big O? Я прочитал определения, и это не говорит о том, что О произносится как «о». Например - я понимаю, что O (n) - это сложность линейного алгоритма, где n может быть числом операций. но что такое O ?

Karen15
источник
13
Это 15-я буква английского алфавита. Это также 15-я буква в греческом алфавите.
Джоэл Этертон
1
Просто чтобы уточнить: вы ищете причину того, почему O является символом, который используется (вместо Q или E или что-то еще), и какое значение, если таковое имеется, O имеет над другими символами?
FrustratedWithFormsDesigner
6
@Joel: На самом деле, это Omicron, и это ключ к пониманию того, почему именно это письмо было выбрано.
Йорг Миттаг
этот ответ опровергает (я думаю, правильно) теорию Омикрона.
Соколиный Глаз Паркер

Ответы:

31

Ну, я думаю, что порядок будет совпадать с Википедией .

Изменить: (мой собственный (любые улучшения приветствуются)) перевод из немецкой статьи Википедии

Заглавная буква O (на самом деле это заглавный омикрон в то время) как символ порядка (немецкий язык: "Ordnung von") была впервые использована немецким теоретиком чисел Полом Бахманом во втором выпуске его книги по аналитической теории чисел. в 1894 г. нотация приобрела популярность благодаря работе Эдмунда Ландау, другого немецкого теоретика чисел, с которым эта номенклатура широко ассоциируется сегодня, особенно в немецкой терминологии.

back2dos
источник
5
Хотя может быть так, что многие математики называли это так, изначально это было не так. Если вы читаете книги по теории чисел начала 20-го века, вы не найдете такого объяснения. Это то, что есть, и я не могу читать по-немецки, чтобы понять, о чем он думал в записи.
Джонатан Хенсон
1
@Jonathan: сообщение обновлено.
back2dos
Очень хорошо! Я просмотрел все свои книги по теории чисел и нигде не смог найти объяснения. +1
Джонатан Хенсон
2
Я всегда произносил это как порядок того, чтобы просто сказать, что О не значит много.
Ньютопия
16

«Большой» означает «капитал», а «О» означает порядок, как в «порядке сложности». Так названо из-за соглашения о написании «порядка сложности» как O (f (x)), например, с заглавной буквой «O» или «Big O». Никто не говорит об этом много, потому что «все» понимают, что это значит, и понимание этого на самом деле не поможет вам понять сложный анализ.

Для понимания сложности анализа, я думаю, что ссылка, размещенная topgun_ivard, является хорошим началом. Хороший вводный учебник, охватывающий структуры данных или алгоритмы, также может помочь.

Этель Эванс
источник
5
Извините, но нотация Бахманна-Ландау была изобретена немецким математиком, поэтому я не думаю, что он назвал бы ее в честь английского слова. На самом деле, даже если бы он был изобретен американским математиком, он, вероятно, все равно был бы назван в честь немецкого слова, потому что, когда он был изобретен (я думаю, около 1920 года), международным языком математики был немецкий. Плюс, это даже отдаленно не имеет никакого отношения к сложности.
Йорг Миттаг
1
@ Йорг: Да, но это не было бы просто Ordnung , что немецкие претензии вики статья быть происхождение: de.wikipedia.org/wiki/Landau-Symbole#Geschichte
back2dos
1
@ Этель, не могли бы вы внести небольшие изменения в свою статью, чтобы я мог проголосовать за вас? Вы действительно правы. Вы должны отредактировать, прежде чем я смогу голосовать.
Джонатан Хенсон
1
@ Джонатан, я не уверен, какие мелкие изменения ты хочешь. Можете ли вы просто выполнить редактирование, которое хотите? Или, мы могли бы просто оставить ответ back2dos верным, похоже, что он все равно мог получить лучший ответ из-за какого-то отличного исследования :)
Этель Эванс
1
Хм, интересно. В Швеции Big Oh обычно называют «ordo» (в переводе с латинского «порядок»), а не «ordning» (шведское слово «порядок»).
Ватин
11

О означает порядок.

Первоначально он был представлен немецким математиком Полом Бахманом во втором томе его книг по теории чисел Die Analytische Zahlentheorie , опубликованном в 1894 году (с. 401) . Он отмечает, после формулы, где он впервые использует обозначение:

(...) Венна Wir Durch Дас Zeichen О (п) einde Grosse ausdrücken, Дэжэнь Ordnung в Bezug Auf п умирают Ordnung VON н NICHT überschreitet (...)

Мой перевод:

(...) где с помощью обозначения O (n) мы указываем величину, порядок которой со ссылкой на n не превышает порядок n (...)

В отличие от того, что говорили другие, ничто в его тексте не указывает на то, что это на самом деле греческая столица омикрон. Он использует множество как греческих, так и латинских символов, так что на самом деле нет никакого способа узнать. Учитывая его продолжающееся использование «Ordnung n log n » и т. Д. В тексте, ясно, что оно в любом случае означает «Ordnung» (в переводе с немецкого означает «заказ», если есть какие-либо сомнения), но это все равно может оставить открытым использование причудливый греческий О.

Однако происхождение омикрона, скорее всего, является ретронимом благодаря Дональду Кнуту, который ввел символы омега (Ω) и тэта (() для связанных понятий в своей работе « Большой омикрон и большая омега и большая тета» , или, возможно, Харди и Литтлвуд, которые представил символ омега ранее.


источник
2
Интересный. Я полагаю, вы правы. Я только что посмотрел определения в книгах Ландау и Бахмана, и они действительно: а) используют латынь Oh, а не греческий Omikron, б) оба используют слово «Ordnung», и c) Ландау прямо заявляет, что это означает «Ordnung» , Я стою исправлено.
Йорг Миттаг
Какое лучшее слово можно найти? Я имею ввиду от немца? Орднунг ист дас хальбе лебен!
JensG
Я думаю, что первое предложение вашего (правильного, голосового, удивительного) ответа должно гласить: «O означает« Ordnung »(в переводе с немецкого означает« Порядок »). Это помогло бы этому ответу привлечь внимание других читателей.
Соколиный Глаз Паркер
5

Мне нравится эта статья , надеюсь, вы тоже найдете ее полезной!

Цитирую раздел из статьи:
Большие греческие буквы

Большой О часто используется неправильно. Big O или Big Oh - это сокращение от Big Omicron. Он представляет верхнюю границу асимптотической сложности. Таким образом, если алгоритм равен O (n log n), существует такая константа c, что верхняя граница равна cn log n.

Θ (n log n) (Большая тета) более тесно связана, чем эта. Такой алгоритм означает, что существуют две константы c1 и c2, такие что c1n log n <f (n) <c2n log n.

Ω (n log n) (Большая Омега) говорит, что алгоритм имеет нижнюю границу cn log n.

Есть и другие, но они являются наиболее распространенными, и Big O является наиболее распространенным из всех. Такое различие, как правило, неважно, но стоит отметить. В конце концов, правильное обозначение - это правильное обозначение.

Что такое Big O?

Обозначение Big O стремится описать относительную сложность алгоритма, уменьшая скорость роста до ключевых факторов, когда ключевой фактор стремится к бесконечности. По этой причине вы часто будете слышать фразу асимптотической сложности. При этом все остальные факторы игнорируются. Это относительное представление сложности.

Что не большой O?

Big O не тест производительности алгоритма. Он также является условным или абстрактным в том смысле, что он склонен игнорировать другие факторы. Сложность алгоритма сортировки обычно сводится к числу сортируемых элементов, которые являются ключевым фактором. Это хорошо, но не учитывает такие проблемы, как:

Использование памяти: один алгоритм может использовать гораздо больше памяти, чем другой. В зависимости от ситуации это может быть что угодно от абсолютно неуместного до критического; Стоимость сравнения: может случиться так, что сравнение элементов действительно дорого, что потенциально изменит любое реальное сравнение между алгоритмами; Стоимость перемещения элементов: копирование элементов обычно дешево, но это не всегда так; и т.п.

topgun_ivard
источник
5
Простая ссылка на статью не слишком полезна. Обычно хорошей идеей является перефразировать или цитировать раздел, который вы считаете особенно подходящим для темы.
Демиан Брехт
3
Действительно ли нужны отрицательные голоса? Статья, на которую он ссылается, очень актуальна, и ИМХО довольно полезна. Между тем, голосование с наибольшим количеством голосов - это ссылка на статью в Википедии. +1, чтобы компенсировать лицемерие улья.
Брэндон Моретц
1
-1, потому что artice, будучи очень хорошей и хорошо написанной статьей, не имеет ничего общего с вопросом.
Йорг Миттаг
@Jorg, я никогда не говорил, что статья решит проблему, но я поделился, потому что я нашел это полезным, когда я смотрел на эти концепции.
topgun_ivard
3
@topgun_ivard: Так что же произойдет, если он превратится в мертвую ссылку? Перефразирование позволяет: 1) аудитории этой цепочки получить версию вашей ссылки Coles notes (время - деньги), и 2) убедиться, что ваше сообщение не будет считаться неуместным по мертвой ссылке.
Демиан Брехт
2

"f (x) - это большой символ g (x)"

Это математический способ прогнозирования роста функций.

Пусть f и g будут функциями от набора целых чисел или набора или действительных чисел до набора действительных чисел. Мы говорим, что f (x) есть O (g (x)), если существуют такие постоянные C и k, что | f (x) | <= C | g (x) | где бы х> к.

Вы прочитали бы это как "f (x) - это большой символ g (x)"

Big-O иногда называют символом Ландау в честь немецкого математика Эдмунда Ландау. Я не думаю, что это означает что-то еще. У вас также есть похожие нотации Big Omega и Big Theta. Символы так же произвольны, как и всегда, используя тэту, чтобы обозначить углы в ваших треугольниках, которые были в вашем классе средней школы Planar Geometry.

Исправление @ back2dos предоставило удовлетворительное объяснение О как относящегося к порядку. Отличная работа. Смотрите его ответ.

Дональд Кнут применил его для изучения сложности компьютерных программ.

Если вы хотите найти причину, по которой была использована нотация, вам следует прочитать

«Аналитически Захлентхеорие» Пола Бахмана с 1892 года

Джонатан Хенсон
источник
2

РЕДАКТИРОВАТЬ: Оказывается, я не прав. Тем не менее, возможно, это помогает кому-то держать свои символы прямыми, поэтому я не собираюсь его удалять.


На самом деле это не латинская буква О , это греческая буква Омикрон . К сожалению, эти два имеет точно такой же символ, поэтому, с течением времени, оригинальная версия испортилась, и теперь это просто Ох .

Выбор символа на самом деле не имеет особого значения, он был выбран в качестве мнемонического устройства:

  • В Omicron есть буквы MICRO, а семантика символа Omicron примерно означает «меньше чем»
  • Омега содержит буквы МЕГА, и семантика символа Омега примерно означает «больше чем»
  • Тета (Θ) выглядит как знак равенства, а семантика символа Тета примерно означает «равно»

Вот и все. В этом нет никакого реального смысла, это просто игра слов, если хотите, чтобы помочь вам легче запомнить семантику.

Йорг Миттаг
источник
2
Хотя я хотел бы верить вашему мнемоническому предложению (это действительно крутая идея), мне нужно будет найти какое-то доказательство того, что это действительно первоначальное намерение Бахманна. Предоставь это, и я +1 тебе.
Джонатан Хенсон
2
@Jonathan Henson: Профессор Кнут, очевидно, ввел меня в заблуждение :-)
Jörg W Mittag
-5

ОБНОВЛЕНИЕ: Попытка очистить мой ответ и быть более точным

Обозначение Big O - это способ охарактеризовать функции в соответствии с их темпами роста. O обозначает порядок (первый порядок - n, второй порядок - n-квадрат и т. Д.). И если я не ошибаюсь, это был бы наихудший сценарий для метода времени выполнения (или хранилища) с заданными N элементами. Чем больше порядок, тем хуже метод.
Например, поиск записи в массиве - это O (1) (я верю в некоторую реализацию хеш-таблиц, что также имеет место). Добавление значения в конец списка ссылок будет O (N), потому что вам нужно добраться до конца списка, прежде чем вы сможете добавить элемент и т. Д.

Этот ответ должен быть немного более правильным, чем моя первая попытка :)

SoftwareSavant
источник
2
-1 потому что это просто старый неверный И ответил на отдельный вопрос, чем был задан. Вопрос заключался в том, почему используется буква «О», а не «как работает система обозначений Big O?». Вы ошибаетесь в том, как работает Big-oh, хотя ... цикл по массиву - это O (n), где n - это размер массива, а не O (1). Нотация не имеет ничего общего с «циклами» алгоритма ... это измерение верхней границы времени выполнения алгоритма.
Кейси Паттон
Не для того, чтобы спорить с вами здесь, но это как раз то, что я имел в виду. Что означает время выполнения правильно? Ну, время выполнения определяется тем, что должно быть обработано на машине. Я предполагаю, что я вроде использую цикл свободно здесь. По циклу, я думаю, я должен был сказать, что итеративный или что-то в этом роде. Вы правы по поводу верхней границы, хотя, это не определяет среднее. Поэтому я принимаю понижение рейтинга.
SoftwareSavant