2017-12-20 3 views
0

priority queue에서 최소 요소를 가져 오는 가장 효율적인 방법은 무엇입니까?최대 우선 순위 대기열에서 최소 요소 가져 오기

일반 priority queue을 생성했다고 가정 해 봅시다. 이제이 queue에는 고양이와 고양이가 들어 있습니다. 고양이가 먹는 물고기의 수를 나타내는 변수가있는 물고기가 있습니다. 가장 적은 물고기를 먹어서 더 많은 물고기를주는 고양이를 얻고 싶습니다. sortpriority queue 다시 나는 swim()를 호출하여 뿌리에 더 가깝게 먹은 물고기를 얻는다.) 그러나 priority queue이 최대 (최대, 최소 일 수는 없음)이기 때문에 어떻게하면 가장 적은 물고기를 먹은 고양이를 얻을 수 있습니까?

+1

적절한 StackOverflow 질문을 만들려면 사용 사례 (TBH, 지금은 숙제 문제를 수행하도록 StackOverflow에 문의하는 것처럼 들린다)를 설명하고, 조사한 것, 시도한 것, 작동하지 않는 곳 및/또는 혼란스러운 곳에서 발생합니다. –

+0

@RookieRick 당신은 정확합니다, 나는 2 일 동안이 질문에 어려움을 겪었습니다. 그래서 나는 그것을 조금 더 잘 구성하고 다시 묻습니다. 팁을 주셔서 감사합니다. 비록 지금은 스택 오버 플로우에 대해 수년간 컨설팅을 해왔지만 질문을하는 것은 이번이 처음입니다. 의견을 보내 주셔서 감사합니다! –

+0

도움이 될만한 https://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions에서 "숙제"유형 질문에 답변하는 방법에 대한 토론이 있습니다. 좋은 답변을 얻는 데 (공식적인 입장이나 정책은 없지만 문제의 양측에 강력한 의견이 있음을 알고 있습니다.) 행운을 빕니다!! –

답변

0

최상위 요소가 가장 큰 우선 순위 큐가 주어진다면, 가장 작은 항목을 얻는 유일한 방법은 큐에서 모든 요소를 ​​제거하는 것입니다. 마지막으로 제거한 항목이 가장 작은 항목입니다. 이 접근법의 복잡성은 O (n log n)입니다. 마지막으로 팝업 한 항목을 제거한 후에는 팝업 한 항목을 저장하고 다시 대기열에 넣어야합니다.

우선 순위 큐를 이진 최대 힙으로 구현 한 것처럼 보입니다. 이 경우, 가장 작은 항목은 마지막 n/2 항목에 정의에 의해 잎이됩니다. 따라서 보조 배열에 대한 액세스 권한이있는 경우 가장 작은 항목에 대해 마지막 n/2 항목을 검색 할 수 있습니다. 그것은 O (n) 연산입니다.

가장 작은 항목을 제거하는 것이 정기적으로 수행해야하는 경우 min-max heap을 구현하는 것이 좋습니다.

0

물고기의 주문 속성을 재정의하십시오.

comparator 개념을 사용하는 언어로 작업하는 경우,이를 수행하는 한 가지 방법은 물고기의 기본 순서 지정 속성을 바꾸는 비교기를 작성하는 것입니다. 또 다른 대안은 고양이를 만들거나 밀 때 생선 수의 음수를 저장하는 것입니다. 논리는 고양이 개체에 내장 될 수 있으므로 사용자는 양의 양의 물고기 만보고 조작하지만 내부적으로는 음수 값으로 저장됩니다.

관련 문제