집합의 중앙값을 찾아야하는 알고리즘이나 데이터 구조가 있습니까?


14

내가 읽고있는 내 수업, 무작위 알고리즘에 대한 책. 이 특정 책에는 무작위 선택을 사용하여 배열의 중앙값을 찾는 데 전념하는 전체 섹션이 있으며, 이는 더 효율적인 알고리즘으로 이어집니다. 이제 저는 컴퓨터 과학 분야에서 이론적 인 개선 외에도이 알고리즘의 실제 적용이 있는지 알고 싶었습니다. 배열의 중앙값을 찾아야하는 알고리즘이나 데이터 구조가 있습니까?


3
중간 정렬을 피벗으로 선택하면 최악의 경우를 피할 수 있으며 (O (n ^ 2) 대신 최악의 런타임 = O (n log n)) 재귀 깊이는 다음과 같습니다. 최소화 됨 (log2 (n)).
hoffmale 2016 년

1
@hoffmale : 그러나 중간 값을 찾을 필요는 없습니다. 중앙값에 합리적으로 가까운 값을 찾아야합니다. 예를 들어, 상위 5 % 또는 하위 5 % 내에없는 피벗을 찾으면 O (n log n)가 보장됩니다.
gnasher729

1
@ gnasher729 : 그러나 재귀 깊이를 최소화하지는 않습니다. 자원 제한 실시간 환경에서 두 속성이 모두 중요합니다.
hoffmale 2009 년

@hoffmale, 우연히도, 2 번 대수에 대한 일반적인 표기법 (특히 컴퓨터 과학자들)은 (lg (n))에서와 같이 단순히 "lg"입니다.
와일드 카드

@ gnasher729 주제가 확률 론적 알고리즘이기 때문에,이 알고리즘 (= 합리적으로 가까운)은 아마도이 알고리즘들이하는 일일 것입니다.
Konrad Rudolph

답변:


17

이론적 인 개선 외에 컴퓨터 과학 분야에서이 알고리즘을 실제로 적용 할 수있는 경우

이 알고리즘의 적용은 간단합니다. 데이터 집합의 중앙값 을 계산할 때마다 (즉, 배열) 사용합니다. 이 데이터는 천문 관측, 사회 과학, 생물학적 데이터 등 다른 영역에서 나올 수 있습니다.

그러나 중간을 의미하는 것이 언제 (또는 모드) 선호하는지 언급 할 가치가 있습니다. 기본적으로 기술 통계량에서 데이터가 완전히 정규 분포 일 때 평균, 모드 및 중앙값이 동일합니다. 즉, 일치합니다. 반면에, 데이터가 왜곡 될 때, 즉 데이터의 주파수 분포가 (왼쪽 / 오른쪽) 기울어지면, 왜도가 전형적인 값에서 왼쪽 또는 오른쪽으로 드래그하기 때문에 평균이 최상의 중앙 위치를 제공하지 못합니다. 중간 값은 치우친 데이터의 영향을 크게받지 않으므로 일반적인 값을 가리키는이 위치를 가장 잘 유지합니다. 따라서 치우친 데이터를 처리 할 때 중앙값을 계산하는 것이 좋습니다.

또한 기계 학습은 통계 방법이 많이 사용되는 곳입니다 (예 : medians clustering)k .


감사합니다! 매우 도움이됩니다! 중앙값을 찾아야하는 다른 알고리즘이나 기술이 있습니까?
Sharan Duggirala

5
이것이 충분히 사실이지만 (+1), 적용되는 통계에 있지 않은 것보다 더 자주, 중앙값을 찾기 전에 데이터가 정렬 될 것입니다. 왜냐하면 중앙값을 원하는 많은 또는 대부분의 상황에서 적어도 다른 순서도 있기 때문입니다. 통계.
John Coleman

1
흥미 롭군 나는에 대해 들어 본 적이 아니라 약, -means 클러스터링 K -medians 클러스터링. kk
svick

13

중앙값 필터링 은 이미지 처리에서 특정 유형의 노이즈를 줄이는 데 일반적입니다. 특히 소금과 후추 소음. 이미지의 각 로컬 이웃에있는 각 색상 채널의 중앙값을 선택하고이를 대체하여 작동합니다. 이 지역의 규모는 다를 수 있습니다. 널리 사용되는 필터 크기 (이웃)는 예를 들어 3x3 및 5x5 픽셀입니다.


1
중간 값은 이미지의 노이즈뿐만 아니라 거의 모든 센서 판독 값의 노이즈에 적용됩니다.이 중 카메라는 센서의 한 종류에 불과합니다. 학교 교과서는 멋진 정현파 및 사각 파 형태를 보여줍니다. 실제 세계에서는 이와 같은 깨끗한 데이터가 거의 발생하지 않습니다. 그렇다면 거의 항상 다른 사람이 데이터를 가져 오기 전에 데이터를 부드럽게 처리했기 때문입니다. 예를 들어 "올바른"값을 선택해야하는보다 일반적인 센서 판독 데이터 : (1, 3, 5, 65, 68, 70, 75, 80, 82, 85, 540, 555). 더 명확하게하기 위해 데이터를 정렬했습니다.
Dunk

1
그렇습니다. 그러나 신호 처리에 사용할 수있는 모든 작은 내용을 적어두면 매우 길고 지루한 답변이 될 것입니다.
mathreadler

1
화상 처리의 중앙값은 시간적 잡음을 제거하기위한 방법이다, (5)의 순서로 또는 사진되도록 화소 당 사용될 수 (일명 뷰 차단 관광객.)
겐 폰 Eitzen

@HagenvonEitzen 당신이 맞아요! 사실 저는 며칠 전에 아주 비슷한 것을 생각하고있었습니다. 주위에 많은 관광객들이 ...
mathreadler

10

중앙값 계산은 무작위 알고리즘에서 특히 중요합니다.

종종 우리는 확률 알고리즘이 이상인 근사 알고리즘을 가지고 있습니다.341±ϵA34kA(1±ϵ)kA(1ϵ)A(1+ϵ)k

2nn


5

중간 값의 평균은 일부 응용 프로그램이 있습니다

  • O(nlogn)
  • O(n)O(n2)

1
실제로 중간 값을 사용하여 빠른 정렬을위한 피벗을 선택하면 실제로 캐시 알고리즘을 멈출 수 있기 때문에 실제로는 알고리즘이 느려질 것 같습니다. 이는 빠른 정렬의 빠른 속도의 주요 원인입니다. 그러나 최악의 경우에 대한 귀하의 의견은 물론 정확합니다.
wchargin

@wchargin 어떤 대안을 제안 하시겠습니까? 내가 아는 실용적인 퀵소트 구현은 캐시에 민감한 피벗을 사용하지 않습니다. 그렇게하는 것은 최악의 최악의 런타임에서 거래되기 때문입니다. 중요한 "정렬 기능 엔지니어링"백서는 대안에 대해 설명하며, 캐시를 인식하지 못합니다 (그러나 그럼에도 불구하고 순진한 피벗 선택을 능가하는 것은 아닙니다).
Konrad Rudolph

1
@wchargin ... 내 자신의 질문에 대답 : Java 7은 내가 알지 못하는 새로운 이중 피벗 절차로 전환했습니다. 이것은 흥미롭고 중간 피벗 알고리즘을 더 이상 사용하지 않을 수 있습니다 .
Konrad Rudolph
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.