모든 요소가 동일한 크기 n의 배열이 있다고 가정합니다. O (n)은 무엇입니까? 선형일까요?merge sort의 실행 시간 :: 모든 요소가 동일 함
1
A
답변
0
이것은 알고리즘 구현 방법에 따라 다릅니다.
mergesort의 표준 "바닐라"구현을 사용하면 배열을 정렬하는 데 필요한 시간은 각 단계에서 필요한 병합마다 선형 시간이 걸리기 때문에 항상 Θ (n log n)이됩니다.
그러나 적절한 최적화를 통해 시간 O (n)에서 실행되도록 할 수 있습니다. 많은 mergesort 구현에서는 입력 배열이 지속적으로 수정되어 더 큰 범위와 큰 범위가 정렬되고 병합 단계가 발생하면 알고리즘은 외부 버퍼를 사용하여 두 개의 인접한 정렬 된 범위를 병합합니다. 이 경우, 할 수있는 멋진 최적화가 있습니다 : 병합하기 전에 첫 번째 범위의 마지막 요소가 두 번째 범위의 첫 번째 요소보다 작거나 같은지 확인하십시오. 그렇다면 병합 된 두 범위가 이미 정렬되어 있으므로 병합을 수행 할 필요가 없습니다.
이 최적화를 수행하고 모든 요소가 이미 정렬 된 배열을 정렬한다고 가정 해 보겠습니다. 무슨 일이야? 음, mergesort를 호출 할 때마다 두 가지 더 많은 재귀 호출이 실행됩니다. 반환 된 후에는 정렬 된 범위의 끝점을 확인할 수 있으며 이미 정렬 된 순서로되어 있으므로 더 이상 작업 할 필요가 없습니다. 전반적으로, 이는 호출 당 O (1) 작업을 수행하고 있으므로, 알고리즘의 시간 복잡도이 점화식 가지고
T (N) = 2T (N/2) + O (1)
을
이것은 O (n)으로 풀리므로 선형 작업 만 수행됩니다.
관련 문제
- 1. 코코아에서 HIShapeCreateDifference와 동일 함
- 2. MYSQL의 동일 함
- 3. Jira JQL이 그룹과 동일 함
- 4. 개체가 제네릭 형식과 동일 함
- 5. MERGE - 조건부 "업데이트 된 시간"
- 6. JCL SORT의 Outfil이 작동하도록하려면
- 7. qsort와 std :: sort의 비교
- 8. Objective C가 Java의 ArrayList와 동일 함
- 9. 시간 내에 실행 된 모든 SQL 로깅
- 10. jquery check 요소가 존재 함
- 11. document.getElementById 실행 시간
- 12. R 패키지 및 실행 시간
- 13. 예상 실행 시간 대 최악의 실행 시간
- 14. Stooge Sort의 안정적인 구현은 무엇입니까?
- 15. 실행 비용과 Oracle의 실행 시간
- 16. Ruby의 실행 시간 가정
- 17. merge part in merge sort
- 18. 안드로이드 Date.toLocaleString() - 시간 요소가 없습니까?
- 19. 모든 요소가 UL 태그
- 20. 번들 실행 안 함
- 21. 확인 요소가 Cufon을 적용하기 전에 존재 함
- 22. 400 오류 - 다른 모든 시간, 모든 시간
- 23. 루프의 ArrayList.add() 이후에 모든 요소가 동일합니다. 왜?
- 24. FlexUnit 실행 시간
- 25. CUDA 프로그램에서 모든 비동기 실행 사용 안 함
- 26. FireFox 6에서 동일 원점 검사 사용 안 함
- 27. Wordpress 파일 이름이 게시물 이름과 동일 함 - 공백과 대시 유지
- 28. 기록 명령 실행 시간
- 29. 식 시퀀스에서 모든 항목이 동일 함을 테스트하려면
- 30. 모든 사진의 prettyPhoto에서 facebook 좋아하는 금액이 동일
당신은 어떻게 생각하십니까? –
미치 - 아니요, 모든 요소가 동일하지 않습니다. 결국 그들은 그렇습니다. 이 경우 O (n)이어야합니다. – Neel
그 의견을 다른 곳으로 보내시겠습니까? Mitch를 불렀던 누군가가 여기에서 논평했던 것처럼 그것은 보이지 않는다. –