대부분의 정렬 알고리즘은 결과를 얻기 위해 O (N N) 또는 O (N logN)의 복잡성을 갖습니다. 그러나 특정 입력 집합에 대해 O (N)의 복잡성을 갖는 알고리즘이 있습니다 .I 모든 경우에 O (N)의 복잡성을 갖는 정렬 알고리즘이 사용 가능한지 알고 싶습니다.시간 복잡성이 O (N) 인 정렬 알고리즘이 있습니까?
답변
두 개의 항목이 <,>, ==) 인 경우에만 값을 비교하여 비교할 수 있다면 O (n log (n))보다 더 잘 수행 할 수 없습니다. 거기에있는 알고리즘에 대한 입증 된 하한선 중 하나입니다. 증거가 너무 복잡하지는 않습니다 (자세한 내용은 위키피디아의 비교 비교를 참조하십시오). 그러나 여기에서 반복하지 않아도됩니다.
비교가 아닌 다른 일을 할 수 있다면 유연성이 높아집니다. 숫자가있는 경우 버킷 정렬 (기수 정렬 유형)을 체크하면 O (n) 정렬이 가능합니다.
아니요. 가장 빠른 범용 정렬 알고리즘은 모두 O (nlgn)입니다. 실제로는 Θ (nlgn)입니다. 왜냐하면 비교 기반 정렬 알고리즘이 더 이상 효율적이지 못하다는 것이 수학적으로 입증 되었기 때문입니다.
다음은 비교 기반 정렬 알고리즘에서 찾은 문서입니다. http://www.cs.cmu.edu/~avrim/451f11/lectures/lect0913.pdf
짧은 대답은 아니오입니다.
입력 배열의 각 요소가 유한 집합에 속하면 O (N) 알고리즘이 가능합니다. 입력이 항상 유한 집합 [0..9] 내에 있으면 말하십시오. 그런 다음 크기 10의 배열을 만들고 배열을 스캔하여 해당 인덱스를 증가시킬 수 있습니다.
그래서 모든 경우에 O (N) 정렬 알고리즘은 메모리가 무한 경우에만 가능합니다.
메모리가 무한하다면 시간이 어떻게됩니까? 아니 O (N) – smac89
- 1. 시간 복잡도가 O (sqrt (n) * log (n)) 인 알고리즘이 있습니까?
- 2. O (n) 정렬 알고리즘이 가능합니까?
- 3. O (n) 정수 정렬 알고리즘이 있습니까?
- 4. 다음 코드의 시간 복잡성이 O (n^2) 인 이유는 무엇입니까?
- 5. 기수 정렬 - O (n) 시간
- 6. 왜 Redis SET에 삽입하는 시간 복잡성이 O (n)입니까?
- 7. O (n log n)보다 일반적이고 실용적인 정렬 알고리즘이 빠릅니까?
- 8. 왜 거품 정렬 복잡성이 O (n^2)입니까?
- 9. 이것은 O (n) 알고리즘이 아닌가?
- 10. 시간 복잡도가 Ө (n²) 인 결정 알고리즘이 있습니까?
- 11. O (n) 정렬 알고리즘
- 12. O (1) 시간 걸리는 알고리즘이 있습니까?
- 13. 대부분의 프로그래밍 언어에서 시간 복잡성이 있습니까?
- 14. O (N) 정렬 알고리즘
- 15. 이 코드에서 boost :: property_map 연산자 [] O (1) 시간 복잡성이 있습니까?
- 16. 힙 정렬의 공간 복잡성이 O (1) 인 이유는 무엇입니까?
- 17. O (n)에서 배열 정렬
- 18. [0..k]의 정수 값을 취하는 n 크기의 배열의 위치 및 O (n) 시간 정렬
- 19. 시간 복잡도 O (N) 또는 O (Log N)입니까?
- 20. O (log (n)) 미만의 정렬 된 배열에서 검색 실행 시간
- 21. O (n) 시간 대괄호 패턴이있는 O (1) 부분 문자열 검색
- 22. 트리가 단일 값 트리인지 여부를 결정하는 데 시간 복잡성이 있습니까?
- 23. 바이너리 검색 전에 정렬이 완료되면 시간 복잡성이 발생합니다 ...
- 24. C++ STL 맵 컨테이너의 복잡성이 O (log (n)) 인 이유는 무엇입니까?
- 25. 왜 문자열 정렬 O (n log n)입니까?
- 26. 큰 O 복잡성이 내 프로그램에서 정확합니까?
- 27. O (n)
- 28. 충돌 탐지를위한 O (n^log n) 알고리즘
- 29. 큰 O - O (N^2) 또는 O (N^2 + 1)?
- 30. + b = O (n^2)의 시간 복잡도?
버킷 정렬을 말하는 +1. O (n log n)의 하한은 비교 기반 정렬 알고리즘에만 적용됩니다. –