최대 요소를 피벗으로 선택하면 Quicksort에 항상 2 차 런타임이 있습니까?


9

빠른 정렬 알고리즘이 있고 항상 가장 작은 (또는 가장 큰) 요소를 피벗으로 선택하는 경우 이미 정렬 된 데이터 세트를 제공하면 '이미 정렬 된'목록이 오름차순인지 내림차순인지에 관계없이 항상 최악의 성능을 얻을 것이라고 가정합니까?

내 생각은 항상 피벗에 가장 작은 요소를 선택하면 피벗을 기준으로 정렬 된 하위 집합이 항상 피벗에 따라 정렬되므로 '정렬 된'입력이 오름차순 또는 내림차순으로 정렬되는지 여부는 중요하지 않습니다. 같은 사이즈?


2
당신의 생각은 정확하지만 직접 논쟁하고 퀵 정렬의 실행 시간을 계산할 수도 있습니다. 영형(2).
Yuval Filmus

답변:


15

퀵 정렬의 최악의 경우 복잡성은 Θ(2). 이는 한 그룹에 단일 멤버 만 포함되도록 세트를 나누는 피벗을 선택함으로써 달성됩니다. 잘못된 피벗 피킹 알고리즘을 사용하면 정렬 된 세트의 한쪽 끝을 선택하여 쉽게 달성 할 수 있습니다. 당신의 가정은 맞습니다.


2
"... 이것은 한 그룹이 O (1) 멤버 만 갖도록 세트를 나누는 피벗을 선택함으로써 달성됩니다"

@Saeed Amiri : 맞습니다.하지만 정확해야합니다.
MMS

1
@SaeedAmiri : O (1)은 1에 비례한다는 것을 나타내며 k * 1 일 수 있습니다. 실제 최악의 경우는 정확히 1 일 때 달성됩니다. O (1)이 여전히 O (n ^ 2)로 이어질 수 있음을 알려드립니다.
walrii September

@MMS, 나는 썼다 영형(1) 왈리 (Walrii)는 다음과 같이 썼다. Θ(2) .. ",하지만 실제로 달성 할 수있는 유일한 방법은 Θ(2) 당신이 말한 방식이 아닙니다. 예, 당신이 묘사 한 방식은 최악의 경우입니다. Θ(2).

5

예! 당신은 생각이 절대적으로 맞아요! Yuval Filmus가 올바르게 언급했듯이 실행 시간은 Θ(2)


3

하나의 하위 배열은 0 또는 1 다른 한편으로는 (1)집단; 따라서영형(2):

()=(1)+(0)+영형()=영형(2)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.