또는 등과 같은 여러 표기법 이 있습니다 . 실제로 또는 와 같은 변형이 있거나 수학적으로 부 정확한지 궁금합니다.
아니면 를 로 향상시킬 수 있다고 말하는 것이 ? 나는 아직 런타임을 알아낼 필요가 없으며 아무것도 개선 할 필요가 없지만 이것이 실제로 함수를 설명하는 방법인지 알아야합니다.
또는 등과 같은 여러 표기법 이 있습니다 . 실제로 또는 와 같은 변형이 있거나 수학적으로 부 정확한지 궁금합니다.
아니면 를 로 향상시킬 수 있다고 말하는 것이 ? 나는 아직 런타임을 알아낼 필요가 없으며 아무것도 개선 할 필요가 없지만 이것이 실제로 함수를 설명하는 방법인지 알아야합니다.
답변:
나는 실제로 같은 것들의 변형이 있는지 궁금합니다. 또는 또는 수학적으로 잘못된 경우.
예, 또는 유효한 변형입니다.
그러나 특히 최종 결과에서 전혀 볼 수 없다면 거의 볼 수 없습니다. 그 이유는 이다 . 비슷하게, 이다 . 초보자에게는 놀랍습니다. 그러나 이러한 평등은 그 이유가 큰 이유입니다종종 고정하기 어렵고 상대적으로 중요하지 않은 곱하기 상수 인자를 숨기기 위해 표기법이 도입되었습니다.
그것이 개선 될 수 있다고 말하는 것이 옳은가? 에 ?
알고리즘의 시간 복잡성이 다음과 같이 바뀌면 전혀 개선되지 않습니다. 에 또는 에 , 때문에 이다 동안 이다 . 따라서 시간 복잡성이 개선되었다고 말하는 것은 잘못입니다. 에 . 알고리즘의 시간 복잡성이 개선되었다고 말하는 것이 옳습니다. 에 , 물론이야.
1. 운동 보기 것을.
2. 운동 보기 것을.
3. 운동 보기 것을.
이 표기법 을 전혀 사용 하지 않아도 됩니다. 즉, 기능을 결정할 수 있습니다최대한 정확하게, 그리고 그것을 개선하려고 노력하십시오. 예를 들어 정렬 알고리즘을 만들 수 있습니다 비교, 그래서 당신은 할 수있는 다른 정렬 알고리즘을 생각해 볼 수 있습니다 비교. 물론 모든 종류의 기능 (이론적으로) 존재하며 (실제로) 올 수도 있습니다.
Big Oh 표기법을 마법사와상의하여 무언가를 할 수 있는지 묻는 신비한 마술로 취급하는 대신, 그 정의를 살펴 봐야합니다 . 정의를 존중 한 다음 작업을 수행하는 데 필요한 모든 작업을 수행하십시오.
허용 대답은 아주 좋은하지만, 여전히 진짜 이유에 접촉하지 않는 이유 .
핵심적으로 Big-O Notation은 알고리즘 실행 시간에 대한 설명이 아닙니다. 또한 알고리즘이 수행하는 단계, 코드 라인 또는 비교 수에 대한 설명도 아닙니다. 입력 수에 따라 알고리즘이 확장되는 방식을 설명하는 데 가장 유용합니다.
예를 들어 이진 검색을 수행하십시오. 정렬 된 목록이 주어지면 그 안에 임의의 값을 어떻게 찾습니까? 글쎄, 당신은 중간에서 시작할 수 있습니다. 목록이 정렬되었으므로 중간 값은 대상 값이있는 목록의 절반을 알려줍니다. 따라서 검색해야하는 목록이 반으로 나뉩니다. 이것은 재귀 적으로 적용 된 다음 새 목록의 중간으로 이동하여 목록 크기가 1이고 값을 찾을 때까지 (또는 목록에 존재하지 않을 때) 계속 진행할 수 있습니다. 목록의 크기를 두 배로 늘리면 알고리즘에 하나의 추가 단계 만 추가되며 이는 로그 관계입니다. 따라서이 알고리즘은. 로그는 기수 2이지만 중요하지 않습니다. 관계의 핵심은 목록에 상수 값을 곱하면 상수 값만 시간에 추가된다는 것입니다.
정렬되지 않은 목록을 통한 표준 검색과 대조-이 경우 값을 검색하는 유일한 방법은 각 값을 확인하는 것입니다. 최악의 시나리오 (Big-O가 구체적으로 암시하는 것)는 가치가 맨 끝에 있다는 것입니다. 이는 크기 목록을 의미합니다., 확인해야합니다 가치. 목록의 크기를 두 배로 늘리면 확인해야하는 횟수가 두 배가되며 이는 선형 관계입니다.. 그러나 각 값에 대해 두 가지 작업을 수행해야하더라도 선형 관계와 같은 일부 처리는 여전히 유효합니다. 설명자와 같은 확장 성을 설명하기 때문에 단순히 설명 자로 유용하지 않습니다. .
이러한 답변 중 많은 부분이 기본적으로 Big-O의 정의를 읽음으로써 이러한 결론에 도달하라고 알려주는 것에 감사합니다. 그러나이 직관적 이해는 내 머리를 감싸는 데 꽤 오랜 시간이 걸렸으므로 가능한 한 평범하게 당신에게 그것을 배치했습니다.
You can write for any function and it makes perfect sense. As per the definition, if there is some constant such that for all large enough . Nothing in that definition says that must be some sort of "nice" function.
But, as other answers have pointed out, and describe exactly the same situation: if for all all large enough , then we also have , so , also (taking the constant to be ).
As a side issue, don't write "", because it's not 100% clear what it means. You could say that it obviously means but almost everybody would write that as , so it puts doubt in the reader's mind.
Also, note that big- notation has nothing to do with runtimes per se. It's just a notation for relationships between functions. Those functions are often used to measure the runtimes of algorithms but that's just one application, just like measuring people's heights is just one application of numbers.
Look at the definition of O(f(n)), and you see that for example O(2n^2) and O(n^2) are exactly the same. Changing an algorithm from 5n^2 to 3n^2 operations is a 40 percent improvement. Changing from O(5n^2) to O(3n^2) isn’t actually any change, they are the same.
Again, read the definition of O(f(n)).
It may be helpful to understand that Big-O describes a set of functions. That is
The usage of is kind of unfortunate and using would make that relationship a lot clearer. but the set notation symbols are a bit difficult to type so now we are stuck with the current convention.
This then shows that Or that constant factors don't matter when defining the Big O.