본문 바로가기

전체 글113

TIL(18일차) RB트리 삭제 레드 블랙 트리의 삭제는 글만 봐서는 굉장히 어렵기 때문에 유튜버 쉬운 코드 님의 영상을 보고 공부를 하였다. 다른 자료를 찾아봐도 괜찮을 것 같다. successor를 어디다가 두냐에 따라 트리의 모양이 상이 하므로 그려보면서 연습을 하는 것이 나을 것 같다. 먼저 그전에 알아야할 RB트리의 5가지 속성 1. 모든 노드는 red 혹은 black 이다. 2. 루트 노드는 black 3. 모든 nil노드는 black 4. red의 자녀들은 black이어야한다.(red가 두번 나올 수 없다) 5. 임의의 노드에서 자손 nil노드들까지 가는 경로들의 black 수는 같다(자기 자신은 카운트에서 제외) 레드 블랙트리의 삭제 0. 삭제 전 RB트리 속성 만족한 상태확인 1. 삭제 방식은 일반적인 BST와 동일 2.. 2023. 5. 10.
TIL(17일차) 레드블랙트리 삽입 https://www.youtube.com/watch?v=2MdsebfJOyM&t=30s Red-black Tree의 대해서 이 자료 저자료 보다가 시각적으로나 영상으로나 쉬운코드님의 설명이 가장 잘 이해되어서 위 영상을 기반으로 공부를 하게 되었다. Red-Black Tree Red-black Tree은 이진 탐색 트리의 한 종류이다. 스스로 균형을 잡는 트리이다. 균형트리는 AVL 트리를 먼저 접하게 되어 대표적인 자료구조는 AVL이구나 라고 생각했다. BST(binary search tree)의 worst case O(n)이므로 이것을 O(log n)으로 개선한 것이 AVL트리라고만 생각하고 있었다. 근데 Red - black Tree는 AVL의 밸런싱 과정이 시간이 오래 걸린다는 단점을 가지고 있.. 2023. 5. 8.
TIL(16일차) 포인터 디테일 RB 트리 관련 주차인데 기존의 배웠던 포인터에 대해서 다시 보았다. 막상 배웠었으니까 쉽겠지~ 라고 생각했다가 큰 코 다쳐버렸다...ㅋㅋㅋ 개념은 알고 있다고 해도 디테일을 살리는게 굉장히 어렵다는 것을 깨달았다. 포인터의 세계는 너무 방대 한것 같다.... #include #include int main() { int i = 1; int *pint = &i; printf("*pint\n"); printf("pint = %p\n",pint); printf("i = %d\n",i); printf("*pint = %d\n\n",*pint); # 주소의 값을 올려준다. *(pint++); printf("*(pint)++\n"); printf("pint = %p\n",pint); printf("i = %d\n.. 2023. 5. 7.
TIL(15일차) 링커 오늘은 링커에 대해 간단히 공부했다. 먼저 링커를 알기 전 링킹(Linking)에 대해 알아보자 링킹 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업을 링킹이라고 한다. 컴파일시 수행되고 소스코드가 머신머신코드로 변환된다. 옛날에는 수동으로 했지만 이 링킹 작업을 현재는 링커가 자동으로 해준다. 링커는 왜 중요할까? 링커는 독립적인 컴파일을 가능하게 한다. 큰 규모의 응용프로그램을 한 개의 소스 파일로 구성하는 대신 별도로 수정 할 수있고, 컴파일할 수 있는 보다 관리가 편한 규모의 작은 모듈로 나눈다. 링커를 이해하는 것은 큰 프로그램을 작성하는데 도움이 된다. 링커를 이해해야되는 이유를 5가지를 보면 다음과 같다. 1. 큰 프로젝트 할때.. 2023. 5. 6.