위키 피 디아에 작성 "... 선택은 일종의 거의 항상 일종의 거품과 그놈 종류 능가."고 둘 다 가지고 있지만 선택 정렬이 버블 정렬보다 빠른 것으로 간주되는 이유를 누구에게나 설명해 줄 수 있습니까?
최악의 시간 복잡도 :
비교 횟수 :
최고의 시간 복잡성 :
- 버블 정렬 :
- 선택 정렬 :
평균 사례 시간 복잡성 :
- 버블 정렬 :
- 선택 정렬 :
위키 피 디아에 작성 "... 선택은 일종의 거의 항상 일종의 거품과 그놈 종류 능가."고 둘 다 가지고 있지만 선택 정렬이 버블 정렬보다 빠른 것으로 간주되는 이유를 누구에게나 설명해 줄 수 있습니까?
최악의 시간 복잡도 :
비교 횟수 :
최고의 시간 복잡성 :
평균 사례 시간 복잡성 :
답변:
제공 한 모든 복잡도는 사실이지만 Big O 표기법으로 표시 되므로 모든 추가 값과 상수는 생략됩니다.
귀하의 질문에 대답하기 위해 우리는이 두 알고리즘의 상세한 분석에 중점을 둘 필요가 있습니다. 이 분석은 손으로 수행하거나 많은 책에서 찾을 수 있습니다. Knuth 's Art of Computer Programming의 결과를 사용하겠습니다 .
평균 비교 횟수 :
이제 이러한 함수를 플로팅하면 다음과 같은 결과가 나타납니다.
보시다시피, 두 가지 정렬 방법이 동일한 점근 적 복잡성을 갖더라도 요소의 수가 증가함에 따라 기포 정렬이 훨씬 더 나쁩니다.
이 분석은 입력이 임의적이라는 가정을 기반으로하며 항상 사실이 아닐 수도 있습니다. 그러나 정렬을 시작하기 전에 임의의 방법을 사용하여 입력 시퀀스를 무작위로 치환하여 평균 사례를 얻을 수 있습니다.
구현에 따라 시간 복잡성 분석을 생략했지만 비슷한 방법을 사용할 수 있습니다.
함수 자체, 예를 들어 비교 및 / 또는 스왑 수는 동일한 속도로 성장하는 경우 동일한 점근 비용을 가진 두 알고리즘에 대해 다를 수 있습니다.
보다 구체적으로 말하면, 버블 정렬에는 평균적으로
요약하면 점근 적 한계는 입력 크기와 관련하여 알고리즘 비용이 어떻게 증가하는지에 대한 좋은 느낌을 주지만 동일한 세트 내에서 다른 알고리즘의 상대적인 성능에 대해서는 아무 말도하지 않습니다.
버블 정렬은 더 많은 스왑 시간을 사용하지만 선택 정렬은이를 피합니다.
정렬 선택을 사용하면 n
대부분 시간 이 바뀝니다 . 그러나 버블 정렬을 사용하면 거의 교체됩니다 n*(n-1)
. 그리고 분명히 읽기 시간은 메모리에서도 쓰기 시간보다 짧습니다. 비교 시간 및 기타 실행 시간은 무시할 수 있습니다. 따라서 스왑 시간은 문제의 중요한 병목 현상입니다.