세션8 우선순위 큐 pop함수의 Predicate 적용 관련 질문이 있습니다.
180
4 asked
pop 함수를 보면
if (right < (int)_heap.size() && predicate(heap[next], _heap[right]))
인 left와의 비교에서 나온 결과 값을 비교하는 부분에만 predicate를 적용하였는데 위에 left와 비교하는 부분은 둘 중 더 큰 값을 next에 넣는게 목적인 코드입니다.
더 작은값을 찾을때 문제가 생길 수 있을것이라 생각이 되는데 문제가 생기지 않아 의문점이 생겨 질문 드립니다.
left쪽엔 predicate 비교를 하지 않아도 되는 이유가 무엇일까요?
Answer 3
0
그러게요. 보니까 left에도 predicate 처리를 해줘야 할 것 같아요. 하지 않으면 greater로 설정을 할 경우에 우선순위 큐의 동작이 이상해지네요.
0
제 질문의 의도는 left는 두 값을 비교해서 무조건 더 큰 값을 반환하게 하는데 우선순위 큐는 상위에 있는 노드가 최대힙, 최소힙이냐에 따라 더 큰값 또는 더 작은 값이라는 조건만 있는것으로 알고 있습니다.
하지만 left에 predicate를 설정하지 않으면 무조건 처음엔 더 큰값을 반환하게 되는데 반환되지 않은쪽의 하위에 더 적당한 값이 있을 수 있을거 같아 질문 드렸습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 서버공부중님.
우선순위 큐에서 Pop 함수는 일반적으로 힙 구조를 유지하는 과정에서 최상위 노드를 제거하고 나머지 노드를 재구성하는 역할을 합니다. 이때, Predicate는 값 비교의 조건을 설정하기 위해 사용됩니다.
질문에서 언급한 Predicate가 right와의 비교에만 사용되고 left와의 비교에는 사용되지 않는 것처럼 보일 수 있으나, 이는 구현 방식에 따라 다를 수 있습니다.
Predicate는 두 값을 비교하여 true 또는 false를 반환하는 함수 개념으로, 힙이 최소 힙인지 최대 힙인지에 따라 다르게 설정됩니다. 즉, 더 큰 값을 찾기 위한 과정에서 해당 비교 방식을 제공하는 것인데, 일반적으로 Predicate는 모든 비교 연산에 적용될 것입니다. 코드가 한 부분에서만 Predicate를 의식적으로 적용하고 다른 부분에서는 생략했다면 이는 작성자의 의도나 최적화 이유가 있을 수 있습니다.
다음의 게시물에서 Predicate에 대해 조금 더 자세히 설명해주고 있으니, 참고하시면 도움이 될 것 같습니다:
위 링크에서는 Predicate의 정의와 객체화에 대한 부분을 다뤘습니다. 이를 통해 Predicate가 다양한 비교 상황에서 어떻게 쓰이는지 더 이해하실 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
문제집은 없나요 수업을 어떻게 들어야 할지 모르겠어요
0
106
2
동적배열 Vector의 push_back 함수에서 조건문 질문
0
74
1
디버깅할때 메모리보는법 단축키가 뭐죠??
0
90
1
113-충돌처리 강의에서 22:26 부근의 SetPos()를 적용해도 충돌되지 않고 뚫고 지나가게 됩니다.
0
87
1
SaveFile에서 크래시 발생하는 분들 체크해보세요
1
70
1
수업자료 확인 부탁드립니다.
0
106
3
explicit을 붙였을 때 빨간줄이 뜨는 이유가 맞는지 궁금합니다.
0
100
0
22강에서 구조체와 포인터로 설명해주셨는데 패딩의 경우는 어떻게 되나요?
0
88
2
리소스 매니저 강의 18분 부근
0
89
1
[Service강의] owner -> shared_ptr
0
80
2
C#에서 생성자 관련 질문
0
83
2
특정 조건에서만 함수를 반환할 때
0
90
2
스택 empty
0
105
2
섹션4 배열실습 질문입니다.
0
133
1
섹션3 '파일분할' 강의 질문입니다.
0
99
1
Defines.h의 DECLARE_SINGLE관련 질문입니다.
0
110
1
섹션9 함수 포인터 관련 질문입니다.
0
137
1
exercise_A 번 문제 해결방법에 대한 질문.
0
150
1
[강의명: virtual 소멸자] 자식 클래스의 소멸자에도 virtual 을 붙이시는 이유가 궁금합니다
0
198
2
Scene과 SceneManager 강의 수강 중 키보드 입력 오류
0
147
1
Window API 강의 수강 중 LARGE_INTEGER 타입 변환 오류
0
198
3
섹션15 스마트 포인터 20:00 질문이요!
0
127
1
55강 수업자료 빌드를 하면 이상합니다.
0
132
1
virtual 소멸자 관련 질문
0
169
1

