Big O에서 O 란 무엇입니까?


23

Big O 표기법에서 Big과 O는 무엇입니까? 나는 정의를 읽었으며 O 가 'oh'로 발음되는 것을 말하지 않습니다 . 예를 들어, 나는 O (n)이 선형 알고리즘의 복잡성이라는 것을 알고 있습니다. 여기서 n은 연산 수입니다. 그러나 O 는 무엇 입니까?


13
영어 알파벳의 15 번째 글자입니다. 또한 그리스 알파벳의 15 번째 글자입니다.
Joel Etherton

1
명확히하기 위해 : 당신은 왜 O 가 Q 또는 E 대신에 사용되는 기호 인지에 대한 이유를 찾고 있으며 , O 가 다른 기호보다 어떤 의미 가 있습니까?
FrustratedWithFormsDesigner

6
@Joel : 사실, 그것은 Omicron이며, 이것이이 특정 편지가 선택된 이유에 대한 단서 입니다.
Jörg W Mittag

이 대답 은 Omicron 이론을 반박합니다 (정확하게 생각합니다).
Hawkeye Parker

답변:


31

글쎄, 내 추측은 wikipedia와 일치하는 순서 일 것 입니다.

편집 : 독일 위키 백과 기사 에서 (나의 (개선 된 개선 사항)) 번역

(독일어 : "Ordnung von") 순서의 상징으로 사용 된 대문자 O (실제로 대문자 omicron )는 분석 번호 이론에 관한 그의 두 번째 책에서 독일의 수 이론가 Paul Bachman이 처음 사용했습니다. 이 표기법은 다른 독일 수 이론가 인 에드먼드 란도 (Edmund Landau)의 작업으로 인해 인기를 얻었으며,이 명명법은 오늘날 특히 독일 용어에서 널리 사용됩니다.


5
많은 수학자들이 그것을 그렇게 언급 한 경우도 있지만, 원래는 그렇지 않았습니다. 20 세기 초반의 이론 수집을 읽으면 그러한 설명을 찾을 수 없습니다. 그것은 그것이 무엇이며, 그의 생각이 표기법에 무엇인지 알아 내기 위해 독일어를 읽을 수 없습니다.
Jonathan Henson

1
@Jonathan : 게시물이 업데이트되었습니다.
back2dos

아주 좋아요! 나는 나의 숫자 이론 책을 모두 보았고 어디에서나 O에 대한 설명을 찾을 수 없었다. +1
Jonathan Henson 2018 년

2
O는 그다지 의미가 없다고 말하는 순서 로 항상 발음했습니다 .
Newtopian

16

"큰"은 "자본"을 의미하고 "O"는 "복잡성의 순서"와 같이 순서를 의미합니다. 예를 들어 대문자 'O'또는 'Big O'와 같이 O (f (x))로 "복잡함 순서"를 작성하는 규칙 때문에 이름이 지정됩니다. '모두'가 의미를 이해하고 이해하는 것이 복잡성 분석을 이해하는 데 실제로 도움이되지 않기 때문에 아무도 그것에 대해 많이 이야기하지 않습니다.

복잡성 분석을 이해하기 위해 topgun_ivard에 의해 게시 된 링크가 시작하기에 좋은 장소라고 생각합니다. 데이터 구조 나 알고리즘을 다루는 훌륭한 입문 교과서도 도움이 될 수 있습니다.


5
미안하지만 Bachmann-Landau 표기법은 독일 수학자에 의해 발명되었으므로 영어 단어의 이름을 따서 명명 한 것 같지는 않습니다. 실제로 미국의 수학자가 발명 한 경우에도 , 아마도 1920 년경 (약 1920 년경) 수학의 국제 언어는 독일어 였기 때문에 독일 단어의 이름을 따서 명명했을 것입니다. 또한 원격으로 복잡성과 관련 이 없습니다 .
Jörg W Mittag

1
@ 르그 : 네,하지만 단지하지 않다고 Ordnung 독일 위키 문서 주장 기원으로, : de.wikipedia.org/wiki/Landau-Symbole#Geschichte
back2dos

1
@Ethel 투표 할 수 있도록 기사를 약간만 변경할 수 있습니까? 당신은 실제로 맞습니다. 투표하려면 먼저 편집해야합니다.
Jonathan Henson

1
@Jonathan, 나는 당신이 원하는 사소한 변화가 정확히 무엇인지 잘 모르겠습니다. 계속해서 원하는대로 편집 할 수 있습니까? 또는, 우리는 단지 back2dos의 답변을지지 할 수 있습니다. 어쨌든 그는 훌륭한 연구로 인해 최고의 답변으로 끝났을 것 같습니다 :)
Ethel Evans

1
흠, 흥미로운. 스웨덴에서 Big Oh는 일반적으로 "ordning"(스웨덴 단어)이 아니라 "ordo"(라틴어, 질서의 순서)라고합니다.
Vatine

11

O 는 주문을 나타냅니다.

이 책은 원래 1894 년에 출판 된 숫자 이론 Die Analytische Zahlentheorie에 관한 그의 두 번째 책 에서 독일의 수학자 Paul Bachmann에 의해 소개되었다 (p. 401) . 그는 공식을 사용한 후 처음 표기법을 사용합니다.

(...) wenn wir durch das Zeichen O (n) einde Grösse ausdrücken, Dezu Ordnung in Bezug auf n die Ordnung von n nicht überschreitet (...)

내 번역 :

(...) 여기서 O (n) 표기법 으로 n 을 참조 하는 차수가 n 차를 초과하지 않는 크기를 나타냅니다 (...)

다른 사람들의 말과 달리, 그의 본문에는 이것이 그리스의 수도 오 미크론이라는 것을 나타내는 내용이 없습니다. 그는 그리스어와 라틴어 문자를 많이 사용하므로 실제로 말할 방법이 없습니다. 텍스트에서 "Ordnung n log n "등을 계속 사용 하면 어떤 경우에도 "Ordnung"(의심이있는 경우 "주문"에 대한 독일어)을 나타내는 것이 분명하지만, 여전히 멋진 그리스어 O.

그러나, omikron의 기원은 기호를 도입 인해 도널드 크 누스에 retronym은 가능성이 오메가 (Ω)와 세타 (Θ)에서 관련 개념에 대한 자신의 종이 큰 미크론와 빅 오메가와 빅 세타 , 또는 가능 하디와 Littlewood 사람 앞서 오메가 심볼을 도입했습니다.


2
흥미 롭군 네 말이 맞아 방금 Landau와 Bachmann의 저서에서 정의를 찾아 보았는데 실제로 a) 그리스어 Omikron이 아닌 라틴어 Oh를 사용하고 b) "Ordnung"이라는 단어를 사용하고 c) Landau 는 "Ordnung"을 의미한다고 명시 적으로 명시 합니다. . 나는 정정되었다.
Jörg W Mittag

더 나은 단어는 무엇입니까? 독일 사람인가요? Ordnung은 das halbe Leben입니다!
JensG

나는 당신의 (정확하고, 공감하고, 굉장한) 대답의 첫 문장은 'O는 "Ordnung"(독일어는 "Order"를 의미)을 의미합니다. "라고 읽어야한다고 생각합니다. 이 답변이 다른 독자들의 관심을 끄는 데 도움이 될 것입니다.
Hawkeye Parker

5

나는 당신이 그것을 유용하게 사용하길 바라고이 기사를 좋아한다 !

기사에서 섹션 인용 :
큰 그리스 문자

Big O는 종종 오용됩니다. Big O 또는 Big Oh는 실제로 Big Omicron의 약자입니다. 점근 적 복잡성의 상한을 나타냅니다. 따라서 알고리즘이 O (n log n)이면 상한이 cn log n이되도록 상수 c가 있습니다.

Θ (n log n) (Big Theta)는 그보다 더 밀접하게 바인딩되어 있습니다. 이러한 알고리즘은 c1n log n <f (n) <c2n log n이되도록 두 상수 c1 및 c2가 있음을 의미합니다.

Ω (n log n) (Big Omega)에 따르면 알고리즘의 하한은 cn log n입니다.

다른 것들이 있지만 이것들이 가장 일반적이며 Big O가 가장 일반적입니다. 이러한 구별은 일반적으로 중요하지 않지만 주목할 가치가 있습니다. 올바른 표기법은 결국 올바른 표기법입니다.

Big O 란 무엇입니까?

Big O 표기법은 주요 요인이 무한대에 가까워 질 때 성장률을 주요 요인으로 줄임으로써 알고리즘의 상대적 복잡성을 설명하려고합니다. 이러한 이유로 종종 점근 적 복잡성이라는 문구가 들립니다. 그렇게하면 다른 모든 요소는 무시됩니다. 복잡성을 상대적으로 표현한 것입니다.

큰 O는 무엇입니까?

Big O는 알고리즘의 성능 테스트가 아닙니다. 그것은 다른 요소들을 무시하는 경향이 있다는 점에서 명 목적이거나 추상적이다. 정렬 알고리즘의 복잡성은 일반적으로 핵심 요소로 정렬되는 요소 수로 줄어 듭니다. 이것은 좋지만 다음과 같은 문제는 고려하지 않습니다.

메모리 사용 : 한 알고리즘이 다른 알고리즘보다 훨씬 많은 메모리를 사용할 수 있습니다. 상황에 따라 이것은 전혀 관련이없는 것부터 중요 할 수있는 것까지 가능합니다. 비교 비용 : 요소를 비교하는 것은 실제로 비용이 많이 들기 때문에 알고리즘 간의 실제 비교가 잠재적으로 변경 될 수 있습니다. 요소 이동 비용 : 요소를 복사하는 것이 일반적으로 저렴하지만 반드시 그런 것은 아닙니다. 기타


5
기사를 연결하는 것만으로는 도움이되지 않습니다. 일반적으로 스레드와 특히 관련이있는 섹션을 설명하거나 인용하는 것이 좋습니다.
데미안 브레히트

3
다운 투표가 정말로 필요한가요? 그가 연결 한 기사는 매우 관련이 있으며 IMHO는 매우 유용합니다. 한편, 가장 많이 투표 된 답변은 Wikipedia 기사에 대한 링크입니다. +1은 벌집의 위선을 상쇄합니다.
Brandon Moretz

1
-1은 아주 훌륭하고 잘 쓰여진 기사이지만 그 질문과 관련이 없습니다.
Jörg W Mittag

@ 조지, 나는 기사가 문제를 해결할 것이라고 말한 적이 없지만이 개념을 볼 때 유용하다고 생각했기 때문에 공유했습니다.
topgun_ivard

3
@topgun_ivard : 죽은 링크로 바뀌면 어떻게됩니까? Paraphrasing을 사용하면 1)이 스레드 사용자가 Coles 노트 버전의 링크 (시간은 돈임)를 얻을 수 있으며 2) 게시물이 죽은 링크와 관련이 없는지 확인할 수 있습니다.
데미안 브레히트

2

"f (x)는 g (x)의 큰 오입니다"

함수의 성장을 예측하는 수학적 방법입니다.

f와 g가 정수 세트 또는 세트 또는 실수에서 실수 세트까지의 함수가되게하십시오. 상수 C와 k가 있으면 f (x)는 O (g (x))이고 | f (x) | <= C | g (x) | x> k.

"f (x) is g-oh of g (x)"라고 읽습니다.

big-O는 독일 수학자 Edmund Landau의 이름을 따서 Landau 상징이라고도합니다. 나는 그것이 그것을 넘어서는 것을 의미한다고 생각하지 않습니다. 빅 오메가와 빅 세타 표기법도 비슷합니다. 기호는 항상 세타를 사용하여 삼각형의 각도를 나타내는 평면형 고등학교 클래스에있는 것처럼 임의적입니다.

정정 @ back2dos는 순서를 참조하여 O에 대한 만족스러운 설명을 제공했습니다. 잘 했어. 그의 대답을보십시오.

Donald Knuth는 컴퓨터 프로그램의 복잡성을 연구하는 데 적용했습니다.

표기법이 사용 된 이유를 찾으려면 읽어야합니다.

1892 년 Paul Bachmann의 "Analytische Zahlentheorie"


2

편집 : 내가 틀렸다는 것이 밝혀졌습니다. 그럼에도 불구하고 아마도 누군가가 심볼을 똑바로 유지하는 데 도움이 될 것이므로 삭제하지는 않을 것입니다.


사실, 그것은 라틴 문자 가 아닙니다 . , 그리스 문자 Omicron 입니다. 불행히도 그 두 문자는 똑같은 글리프를 가지므로 시간이 지남에 따라 원래 버전이 손상되었으며 이제는 입니다.

기호 선택은 실제로 특별한 의미가 없으며 니모닉 장치 로 선택되었습니다 .

  • Omicron 에는 MICRO라는 문자가 있으며 Omicron 기호의 의미는 대략 "보다 작음"을 의미합니다.
  • 오메가 에는 MEGA라는 글자가 있으며 오메가 기호의 의미는 대략 "보다 큼"을 의미합니다.
  • 세타 (Θ)는 등호처럼 보이며 세타 기호의 의미는 대략 "같음"을 의미합니다.

그게 다야. 그것에 의미가 없습니다. 의미론을 더 쉽게 기억할 수 있도록 도와주는 단어에 대한 놀이 일뿐입니다.


2
나는 당신의 니모닉 제안을 믿기를 원하지만 (실제로는 멋진 아이디어입니다), 이것이 이것이 바흐 만의 실제 의도라는 증거를 볼 필요가 있습니다. 제공하면 +1하겠습니다.
Jonathan Henson

2
@ 조나단 헨슨 : 분명히, 내가 :-) 교수 누스에 의해 잘못 인도 한
요 르그 W MITTAG

-5

업데이트 : 내 대답을 정리하고보다 정확하려고합니다.

Big O 표기법은 성장률에 따라 기능을 특성화하는 방법입니다. O는 차수를 나타냅니다 (1 차 차수 n 차 제곱 차수 등). 그리고 내가 실수하지 않으면 이것은 N 요소가 주어진 런타임 (또는 스토리지) 메소드의 최악의 시나리오 일 것입니다. 순서가 클수록 방법이 수행하는 것이 최악입니다.
예를 들어 배열에서 레코드를 찾는 것은 O (1)입니다 (해시 테이블의 일부 구현도 믿습니다). 링크 목록의 끝에 값을 추가하면 요소 등을 추가하기 전에 목록의 끝에 도달해야하기 때문에 O (N)이됩니다.

이 답변은 첫 번째 시도보다 약간 더 정확해야합니다. :)


2
-1 이것은 단지 오래된 오래된 잘못이며 요청 된 것과는 다른 질문에 대답했기 때문에. 문제는 "Big O 표기법은 어떻게 작동합니까?"가 아니라 "O"라는 문자를 사용하는 이유입니다. Big-oh의 작동 방식에 대해서는 잘못되었습니다 ... 배열을 통한 루핑은 O (n)입니다. 여기서 n은 O (1)이 아닌 배열의 크기입니다. 이 표기법은 알고리즘의 "사이클"과 아무 관련이 없습니다. 알고리즘의 런타임 상한을 측정 한 것입니다.
케이시 패튼

여기서 당신과 논쟁 할 필요는 없지만, 그것은 제가 의미 한 바입니다. 런타임은 무엇을 의미합니까? 런타임은 머신에서 처리해야 할 내용에 따라 결정됩니다. 나는 여기서 일종의 사용주기를 자유롭게 생각한다. 사이클별로 반복 또는 이와 유사한 것을 말해야한다고 생각합니다. 당신은 상한에 대해 맞습니다, 그것은 평균을 결정하지 않습니다. 따라서 다운 그레이드를 수락합니다.
SoftwareSavant
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.