두 개의 스택을 사용하여 큐를 구현했으며 큐의 상위 N % 요소를 찾고 싶습니다. 예를 들어큐의 상위 n 개 요소
는 :
큐는 {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
10 %의 요소 (20) = 2
의 10 %가 이에 대한 답변이
19 20이되어야 수단이 순서대로 요소를 가져 내가 생각할 수있는 두 가지 방법이 있습니다.
- 대기열을 정렬하고 항목 수 (X)를 N % 최상위 X 요소를 잡아라.
- Selection algorithm. (방금이 알고리즘과 quicksort 아이디어를 기반으로했다. 그래서 아마 전체 큐를 배열로 복사 한 다음 알고리즘을 적용해야 할 것이다)
이 문제를 해결하는 더 좋은 방법이 있습니까?
"두 개의 스택을 사용하여 대기열을 구현했습니다."순전히 기능적 솔루션에 관심이 있습니까? 아니면 그냥 운동입니까? –
이것은 단지 운동에 불과합니다. 알고리즘을 비교 한 아이디어조차도 가능합니다. 위의 두 가지 접근 방식은 O (nlogn)와 O (n)입니다. 둘 다 꽤 빠르다.그러나 나는 그것을 할 수있는 더 나은 방법을 알고 싶습니다 또는 아주 간단하게 이들이 유일한 두 가지 방법이고 내가 선택 알고리즘을 사용해야하는지 여부 –
O (1)에서 MAX를 항상 제공 할 수있는 MAXQUEUE의 일반화를 찾고 있습니까?)? 이 경우 N은 대기열의 주어진 인스턴스에 대한 고정 값입니까? – rici