Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[3주차] 정렬 (버블, 선택, 삽입, 셀, 머지, 퀵, 힙) #6

Open
wants to merge 9 commits into
base: main
Choose a base branch
from

Conversation

whoodongpyo
Copy link

@whoodongpyo whoodongpyo commented Jan 22, 2024

3주차도 화이팅입니다! :)

질문

힙 정렬 강의 중에서 5:44 에서 다음과 같이 언급해주셨는데요.

배열의 1/2 지점 이상부터 진행하는 이유는 1/2 이상부터는 자식 노드들이 없기 때문에 할 필요가 없다.

image

이미지 상으로 배열 1/2 지점 이후 (6), (3) 에는 자식 노드가 없어서
싱크할 필요가 없는 것이다라고 이해했는데 맞는지 모르겠네요. 😢

어느 경우에든 1/2 지점 이후에는 자식 노드가 없다라는 것이 보장이 되는 것일까요?

@hannut91
Copy link
Contributor

hannut91 commented Jan 29, 2024

어느 경우에든 1/2 지점 이후에는 자식 노드가 없다라는 것이 보장이 되는 것일까요?

네 맞습니다. 만약 강의에서 주어진 힙이 꽉차 있더라도 아래 그림처럼 1/2지점이 자식이 있는 노드의 첫번째가 되는거죠.

제목_없는_아트워크

아래 그림에서는 자신 노드가 있는 첫 번째 노드가 5번째 노드가 되고요.

image

이게 바이너리 트리의 특징인데

첫번째 depth는 2^0 개
두번째 depth는 2^1 개
세번재 depth는 2^2개
네번째 depth는 2^3개 잖아요. 그러니까 네번째 depth를 제외한다는 것은 2^3 -> 2^2로 만드는 거니까 1/2을 하면 나오죠.

다르게 생각하면 가장 마지막 노드의 부모라고 생각할 수도 있어요. 노드의 부모는 자신의 인덱스의 1/2이잖아요. 그러면 자식 노드가 있는 가장 마지막 노드를 선택하게 되는거죠

@@ -1,4 +1,26 @@
const exchange = (array, index1, index2) => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이런 일은 swap이라는 말을 더 많이 사용하는 것 같네요.

[array[index1], array[index2]] = [array[index2], array[index1]];
};

const isFirstBiggerThanSecond = (a, b) => a > b;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

함수가 하는 일을 굉장히 자세하게 작성하셨네요. 아마도 각 파라미터가 무엇을 의미하는지까지 명시해주고 싶으셨던 것 같습니다. isGreaterThen 정도도 괜찮을 것 같네요.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아마도 각 파라미터가 무엇을 의미하는지까지 명시해주고 싶으셨던 것 같습니다.

정확히 제가 의도한 바가 맞습니다. ㅎㅎ
함수명이 너무 길어지는 것 같긴하지만 나중에 제 코드를 제가 다시 읽을 때도
무슨 의미였는지 잘 기억나는 효과가 있어서 이런 식으로 작성해보려고 합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants