유진선14
가입: 2018년 9월 11일 올린 글: 18
|
올려짐: 2018년9월19일 15:53 주제: 2-3 질문(merge의 인자)입니다.(추가: 2-4 function definition) |
|
|
조교님 안녕하세요,
<strike>
2-3 문제를 보면 merge는 insert와 deleteMin두 가지 경우에만 호출되는 것 같습니다.
insert 에서는 이미 존재하는 왼쏠힙 h와 단일 node하나를 합치는 것을 수행하고
deleteMin에서는 이미 정렬이 된 lh와 rh을 합치는 것, 즉, 각각의 최상위 node중 어느 node를 merge한 heap의 최상위 node로 삼을지를 결정하는 과정을 수행합니다.
그러면, 이 두 가지를 제외한 merge도 염두에 두어야 할까요? 즉, 서로 아무런 연관이 없는, 완전 개별적인 서로 다른 왼쏠힙을 merge하는 상황도 일어날 수 있을까요?
부연설명: deleteMin 에서 merge를 할 경우, lh의 최상위 노드의 급수는 "무조건" (기존 힙 h의 오른쪽 node를 root로 두는 heap) rh의 최상위 노드의 급수보다 크거나 같게 됩니다.
제 질문은, 독립적으로 merge를 수행할 때 위의 조건들이 보존되지 않는 임의의 (그러나 단일 node 이상의) 두 heap을 merge할 가능성이 있는지 궁금합니다.
</strike>
해결되었습니다. merge하는 두 heap의 급수가 역순이면 위치를 바꾸기만 하면 된다는 것을 깨달았습니다.
추가적으로, merge를 포함한 함수들을 수행할 때 영향을 받는 모든 node의 rank을 개별적으로 수정해야 하는지도 궁금합니다.(아마 yes일 것으로 예상합니다.)
감사합니다.
(추가) 2-4
과제에는 enQ가
로 정의되어 있습니다. 이를
코드: |
let enQ: queue * element -> queue = fun ...
|
꼴로 해도 괜찮을까요?
또한,
int list list 에도 int list 처럼 .hd를 사용할 수 없는건가요?
제가 과제에서 type queue = int list list * int list list로 정의하고,
(중략) queue 타입의 right을 정의한다음에
right.hd를 입력하니
코드: |
Unbound record field hd
|
라는 메시지가 나왔습니다.
int list list 에는 int list처럼 hd를 못 사용하는 것 같은데, 혹시 그 이유가 있는지, 또 그럼 int list list의 첫 element 인 int list타입의 element를 추출할 수 있는 방법이 있는지(아니면 이건 학생이 알아서 해결해야 할 문제인지) 궁금합니다.
감사합니다. |
|