Что такое Big и O в обозначении Big O? Я прочитал определения, и это не говорит о том, что О произносится как «о». Например - я понимаю, что O (n) - это сложность линейного алгоритма, где n может быть числом операций. но что такое O ?
Что такое Big и O в обозначении Big O? Я прочитал определения, и это не говорит о том, что О произносится как «о». Например - я понимаю, что O (n) - это сложность линейного алгоритма, где n может быть числом операций. но что такое O ?
Ответы:
Ну, я думаю, что порядок будет совпадать с Википедией .
Изменить: (мой собственный (любые улучшения приветствуются)) перевод из немецкой статьи Википедии
Заглавная буква O (на самом деле это заглавный омикрон в то время) как символ порядка (немецкий язык: "Ordnung von") была впервые использована немецким теоретиком чисел Полом Бахманом во втором выпуске его книги по аналитической теории чисел. в 1894 г. нотация приобрела популярность благодаря работе Эдмунда Ландау, другого немецкого теоретика чисел, с которым эта номенклатура широко ассоциируется сегодня, особенно в немецкой терминологии.
«Большой» означает «капитал», а «О» означает порядок, как в «порядке сложности». Так названо из-за соглашения о написании «порядка сложности» как O (f (x)), например, с заглавной буквой «O» или «Big O». Никто не говорит об этом много, потому что «все» понимают, что это значит, и понимание этого на самом деле не поможет вам понять сложный анализ.
Для понимания сложности анализа, я думаю, что ссылка, размещенная topgun_ivard, является хорошим началом. Хороший вводный учебник, охватывающий структуры данных или алгоритмы, также может помочь.
О означает порядок.
Первоначально он был представлен немецким математиком Полом Бахманом во втором томе его книг по теории чисел 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» (в переводе с немецкого означает «заказ», если есть какие-либо сомнения), но это все равно может оставить открытым использование причудливый греческий О.
Однако происхождение омикрона, скорее всего, является ретронимом благодаря Дональду Кнуту, который ввел символы омега (Ω) и тэта (() для связанных понятий в своей работе « Большой омикрон и большая омега и большая тета» , или, возможно, Харди и Литтлвуд, которые представил символ омега ранее.
Мне нравится эта статья , надеюсь, вы тоже найдете ее полезной!
Цитирую раздел из статьи:
Большие греческие буквы
Большой О часто используется неправильно. 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 не тест производительности алгоритма. Он также является условным или абстрактным в том смысле, что он склонен игнорировать другие факторы. Сложность алгоритма сортировки обычно сводится к числу сортируемых элементов, которые являются ключевым фактором. Это хорошо, но не учитывает такие проблемы, как:
Использование памяти: один алгоритм может использовать гораздо больше памяти, чем другой. В зависимости от ситуации это может быть что угодно от абсолютно неуместного до критического; Стоимость сравнения: может случиться так, что сравнение элементов действительно дорого, что потенциально изменит любое реальное сравнение между алгоритмами; Стоимость перемещения элементов: копирование элементов обычно дешево, но это не всегда так; и т.п.
"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 года
РЕДАКТИРОВАТЬ: Оказывается, я не прав. Тем не менее, возможно, это помогает кому-то держать свои символы прямыми, поэтому я не собираюсь его удалять.
На самом деле это не латинская буква О , это греческая буква Омикрон . К сожалению, эти два имеет точно такой же символ, поэтому, с течением времени, оригинальная версия испортилась, и теперь это просто Ох .
Выбор символа на самом деле не имеет особого значения, он был выбран в качестве мнемонического устройства:
Вот и все. В этом нет никакого реального смысла, это просто игра слов, если хотите, чтобы помочь вам легче запомнить семантику.
ОБНОВЛЕНИЕ: Попытка очистить мой ответ и быть более точным
Обозначение Big O - это способ охарактеризовать функции в соответствии с их темпами роста. O обозначает порядок (первый порядок - n, второй порядок - n-квадрат и т. Д.). И если я не ошибаюсь, это был бы наихудший сценарий для метода времени выполнения (или хранилища) с заданными N элементами. Чем больше порядок, тем хуже метод.
Например, поиск записи в массиве - это O (1) (я верю в некоторую реализацию хеш-таблиц, что также имеет место). Добавление значения в конец списка ссылок будет O (N), потому что вам нужно добраться до конца списка, прежде чем вы сможете добавить элемент и т. Д.
Этот ответ должен быть немного более правильным, чем моя первая попытка :)