์์ฑ์ : ์ ์ฐฌ๋ฏผ
์ ์ฐํ์์ ์๋ฃ๋ฅผ ํจ์จ์ ์ผ๋ก ์ด์ฉํ ์ ์๋๋ก ์ปดํจํฐ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ. ์ ์คํ ์ ํํ ์๋ฃ๊ตฌ์กฐ๋ ๋ณด๋ค ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
์๋ฃ๊ตฌ์กฐ๋ ์ ํ๊ตฌ์กฐ(Linear) / ๋น์ ํ๊ตฌ์กฐ(NonLinear)๋ก ๊ตฌ๋ถํ๋ค.
-
์ ํ๊ตฌ์กฐ - ๋ฐฐ์ด(Arrays), ์ฐ๊ฒฐ๋ฆฌ์คํธ(Linked List), ์คํ(Stack), ํ(Queue) => ์๋ฃ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋์ด์ํจ ํํ
-
๋น์ ํ๊ตฌ์กฐ - ํธ๋ฆฌ(Tree), ๊ทธ๋ํ(Graph) => ํ๋์ ์๋ฃ๋ค์ ์ฌ๋ฌ๊ฐ์ ์๋ฃ๊ฐ ์กด์ฌํ ์ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
-
์ฐธ๊ณ ์๋ฃ: Github
-
์ฐธ๊ณ ์์: Youtube
-
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐ์ธ Array๋ ๋ ผ๋ฆฌ์ ์ ์ฅ์์์ ๋ฌผ๋ฆฌ์ ์ ์ฅ์์๊ฐ ์ผ์นํ๋ค ๋ฐ๋ผ์ index๋ก ํด๋น์์์ ์ ๊ทผํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐพ๊ณ ์ ํ๋ ์์์ ์ธ๋ฑ์ค ๊ฐ์ ์๊ณ ์์ผ๋ฉด ํด๋น ์์๋ก ์ ๊ทผํ ์ ์๋ค. ์ฆ, Random access๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋๊ฒ์ด๋ค.
-
ํ์ง๋ง ์ญ์ ๋๋ ์ฝ์ ์ ๊ณผ์ ์์๋ ํด๋น ์์์ ์ ๊ทผํ์ฌ ์์ ์ ์๋ฃํ๋ค, ๋ ํ๊ฐ์ง์ ์์ ์ ์ถ๊ฐ์ ์ผ๋ก ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ๋ ๊ฑธ๋ฆฐ๋ค. ๋ง์ฝ ๋ฐฐ์ด์ ์์ ์ค ์ด๋ ์์๋ฅผ ์ญ์ ํ๋ค๊ณ ํ์ ๋, ๋ฐฐ์ด์ ์ฐ์์ ์ธ ํน์ง์ด ๊นจ์ง๊ฒ ๋๋ค. ์ฆ, ๋น ๊ณต๊ฐ์ด ์๊ธฐ๊ฒ ๋๋๊ฒ์ด๋ค.
-
์ฝ์ ์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. ๋ง์ฝ ์ฒซ๋ฒ์งธ ์๋ฆฌ์ ์๋ก์ด ์์๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ๋ค๋ฉด ๋ชจ๋ ์์๋ค์ index๋ฅผ 1์ฉ ์ฎ๊ฒจ์ผ ํ๋ฏ๋ก ์๊ฐ์ ์๊ตฌํ๊ฒ ๋๋ค.
let arr[5]= {1,2,3,4,5}; ๋ผ๋ ๋ฐฐ์ด์ด ์๋ค. 6๋ถํฐ10๊น์ง ์์๋ฅผ ๋ฃ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ์ง๊ธ ์ด ๊ตฌ์กฐ์์๋ ํ ์ ์๋ค. ํด์ผ ํ๋ค๋ฉด.
let arr[10] = {1,2,3,4,5,6,7,8,9,0}; ์ด๋ผ๋ ๋ฐฐ์ด์ ์๋ก
์์ฑํด์ผํ๋ค.
-
- ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ถ์๊ฒฝ์ฐ
1, 3, 4, 5 => 1๊ณผ3์ฌ์ด์ 2๋ฅผ ์ ์ฅํ๊ณ ์ถ์๊ฒฝ์ฐ ํด์ผํ๋ ๋ฐฉ๋ฒ -> 1, 2, 3, 4, 5 3,4,5๋ฅผ ํ ์นธ์ฉ ๋ค๋ก ๋ฐ์ด์ผ ํ๋ค. ๋นํจ์จ์ ์ผ๋ก ๋์ํ๋ค.
-
- ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
1, 2, 2, 3, 4 => 2๋ฅผ ์ญ์ ํ๊ณ ์ถ์๋ ํด์ผํ๋ ๋ฐฉ๋ฒ -> 1, 2, 3, 4 ์ค๊ฐ์ ์๋ 2๋ฅผ ์์ ๊ธฐ ์ํด์ ๋ค์ ์๋ 2, 3, 4๋ฅผ ์ฐจ๋ก๋๋ก ๋ฎ์ด์์์ผ ํ๋ค.
-
์ด๋ฌํ ํ๊ณ์ ์ ํด๊ฒฐํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๊ฐ linked list์ด๋ค. ๊ฐ๊ฐ์ ์์๋ค์ ์๊ธฐ ์์ ๋ค์์ ์ด๋ค ์์์ธ์ง๋ง์ ๊ธฐ์ตํ๊ณ ์๋ค. ๋ฐ๋ผ์ ์ด ๋ถ๋ถ๋ง ๋ค๋ฅธ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ์ญ์ ์ ์ฝ์ ์ ํฐ ์๊ฐ ์๋ค์ด๊ณ ํด๊ฒฐํ ์ ์๋๊ฒ์ด๋ค.
-
ํ์ง๋ง Linnked List ์ญ์ ํ๊ฐ์ง ๋ฌธ์ ์ ์ด ์๋ค. ์ํ๋ ์์น์ ์ฝ์ ์ ํ๊ณ ์ ํ๋ฉด ์ํ๋ ์์น๋ฅผ ๊ฒ์๊ณผ์ ์ ์์ด์ ์ฒซ๋ฒ์งธ ์์๋ถํฐ ๋ค ํ์ธํด๋ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. Array์๋ ๋ฌ๋ฆฌ ๋ ผ๋ฆฌ์ ์ ์ฅ์์์ ๋ฌผ๋ฆฌ์ ์ ์ฅ์์๊ฐ ์ผ์นํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๊ฒ์ ์ผ๋จ ์ฝ์ ํ๊ณ ์ ๋ ฌํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
-
์ด ๊ณผ์ ๋๋ฌธ์ ์ด๋คํ ์์๋ฅผ ์ญ์ ๋๋ ์ถ๊ฐํ๊ณ ์ ํ์๋, ๊ทธ ์์๋ฅผ ์ฐพ๊ธฐ์ํด ์๊ฐ์ด ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๊ฒ ๋๋ค.
์ ํ์๋ฃ๊ตฌ์กฐ์ง๋ง ์ฐ์๋ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์๋๋ค. ๋ค์ฏ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๊ฐ ๋จ์ด์ ธ ์๋ค. ์ด๋ฐ ๊ตฌ์กฐ๊ฐ ๊ฐ๋ฅํ ์ด์ ๋? ๋ฐ์ดํฐ๊ฐ ๋ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ ์ฃผ์๋ฅผ ํจ๊ป ๊ธฐ์ตํ๋ค Next๋ผ๋ ๋ฉค๋ฒ์ ๋ค์ Node์ ์์น๋ฅผ ์ ์ฅํ๋ค. ๊ทธ๋ฌ๋ฉด ๋จ์ด์ ธ์๋ ๊ณต๊ฐ์ด์ง๋ง ์ฐ๊ฒฐ๋์ด ์๋๊ฒ ์ฒ๋ผ ๋ง๋ค ์ ์๋ค.
class Node {
int data;
Node next;
}
class LinkedList{
Node head;
}
- ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ์ฒซ ๋ ธ๋์ธ Head๋ ธ๋๋ฅผ ๊ธฐ์ตํ๋ค.
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ํํ๊ธฐ ์ํด์ ์ฒซ ๋ ธ๋๋ถํฐ ๋ง์ง๋ง ๋ ธ๋๊น์ง Next๋ฅผ ํ์ธํ๋ฉฐ ์ด๋ํด์ผํ๋ค.
- ๋ง์ง๋ง ๋ ธ๋์ ๋๋ฌํ๋๋ฐ ๋ง์ง๋ง ๋ ธ๋๋ ๋ค์ ๋ ธ๋๊ฐ ์๊ธฐ๋๋ฌธ์ Null๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๋ค.
- ๋ง์ฝ Next๊ฐ Null์ด๋ผ๋ฉด ํ์ฌ ๋ง์ง๋ง ๋ ธ๋์ด๊ธฐ๋๋ฌธ์ ์ํ๋ฅผ ๋ง์น ์ ์๋ค.
๊ฐ์ ์ถ๊ฐํ๋ ํ๋ฆ์ด๋ค . 1๊ณผ 3์ฌ์ด์ 2๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค. ๋ฐฐ์ด์ ๊ฐ์ ์ถ๊ฐํ ๋ ค๋ฉด ๋ค์ ๊ฐ์ ๋ฐ์ด๋ด์ผ ํ๋ค. 2๋ฅผ ๊ฐ์ง๋ ์๋ก์ด ๋ ธ๋๋ฅผ ๋ง๋ค๊ณ Node์ Next๋ง ๋ฐ๊พธ๋ฉด ๋๊ฒ ๋๋ฌธ์ ์ฌ์ด ์ํฉ์ด๋ค. ๋ค์ ์ค๋ช ํ์๋ฉด. 2๋ผ๋ ๋ ธ๋๋ฅผ ๋ง๋ค๊ณ ์๋ก์ด ๋ ธ๋์ Head๊ฐ Next๋ฅผ ๋ณด๊ฒ ๋ง๋ค๊ณ Head๋ ์๋ก์ด ๋ ธ๋๋ฅผ ๋ณด๊ฒ ๋ง๋ค๋ฉด ๋๋ค.
์ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ์ํฉ์ ๋ ์ฝ๋ค. ์๋ก์ด ๋ ธ๋๋ฅผ ๋ง๋ค๊ณ ํ์ฌ Head๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ๋ง๋ค๊ณ Head๋ฅผ ์ฎ๊ฒจ์ฃผ๋ฉด๋๋ค.
์ญ์ ๋ ๋น์ทํ๊ฒ Next๋ฅผ ๋ฐ๊พธ๋ฉด ๋๋ค. 2๋ฅผ ์ญ์ ํ๊ณ ์ถ์ผ๋ฉด, 1Head์ Next๋ฅผ ๋ค์ ๋ค์ 3์ ๋ฐ๋ผ๋ณด๊ฒ ๋ง๋ค๊ณ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ฉด ๋๋ค.
์ฒ์์ ์๊ฐํ ๊ธฐ๋ณธ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๋ง์ง๋ง ๋
ธ๋๋ฅผ ์กฐํํ๋ ค๋ฉด Next๋ฅผ ํ๊ณ ํ๊ณ ๊ฐ์ผ ํ์๋๋ฐ
์ด ๋ฐฉ์์ด ๋นํจ์จ์ ์ด๋ผ ๊ฐ์ ์ ํ๊ฒ ์ํ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ด๋ค.
์ํ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๋ญ๋ฅผ ๋ฐ๋ผ๋ณด๋ ๋ง์ง๋ง ๋
ธ๋์ Next๋ฅผ ์ฒ์ ๋
ธ๋๋ฅผ ๋ฐ๋ผ๋ณด๊ฒ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ํ๋ Head๋์ ์ ๋ง์ง๋ง๋
ธ๋์ธ tail์ ๊ธฐ์ตํ๋ค.
์ด๋ ๊ฒ ๋ง์ง๋ง ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฉด Tail๋ฅผ ์ดํด๋ณด๋ฉด ๋๊ณ ,
์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ฉด Tail์ Next๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
๊ฐ๋จํ ๋ฐ์ดํฐ๋ก ์ฒ์๊ณผ ๋ง์ง๋ง์ ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋์๋ค.
CircularLinkedList{
Node Tail;
}
๋ ๋ค๋ฅธ ์ ๊ทธ๋ ์ด๋ ๋ฒ์ ์ผ๋ก ์ด์ค์ฐ๊ฒฐ๋ฆฌ์คํธ ๋๋ ์๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ผ ๋ถ๋ฅธ๋ค. ์ฌ์ง์์ ๋ณด์ด๋ฏ ๋ค์ ๋ ธ๋์ธ Next๋ฟ๋ง ์๋๋ผ previous๋ ๊ธฐ์ตํ๊ณ ์๋ค. ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด ์ ๋ค๋ก ์๋ค๊ฐ๋ค ํ ์ ์๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํ๋ค.
ํ๋๋ง ์๋ก ๋ค์๋ฉด ์ญ์์ผ๋ก ์ํ๋ฅผ ํ๊ณ ์ถ์๊ฒฝ์ฐ์ด๋ค. ๋จ๋ฐฉํฅ์ด์๋ค๋ฉด ๋ค๋ก ๊ฐ ์๊ฐ ์์ด์ ๋ถ๊ฐ๋ฅํ์ผ์ธ๋ฐ, ์๋ฐฉํฅ์ด๋ฉด ๊ฐ๋ฅํ๋ค.
class Node{
int data;
Node next;
Node previous;
}
์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ๋ ์ข์๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ณด๋ค ๋์ ๋ฐฐ์ด์ ๋ ๋ง์ด ์ด๋ค.
- ์กฐํ๊ฐ ๋๋ฆฌ๋ค.
- ์ค๊ฐ์ ์ถ๊ฐ, ์ญ์ ํ๋ ๋์๋ ํ๊ณ ๊ฐ์ผํ๋ ๋น์ฉ์ด ์๋ค.
- ๋ค์ ๋ ธ๋๋ฅผ ๊ธฐ์ตํ๋๋ฐ ์ถ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ํผ์ ธ ์์ผ๋ฏ๋ก ์บ์์ ํจ๊ณผ๋ฅผ ๋๋ฆฌ์ง ๋ชปํ๋ค.
- ์ฆ์ ์ถ๊ฐ์ ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถํ๋ ๊ธฐ๋ฐ์ ์ง์์ด ๋๋ค.
์ ํ ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข
์ผ๋ก Last In First Out(ํ์
์ ์ถ) ์ฆ, ๋์ค์ ๋ค์ด๊ฐ ์์๊ฐ ๋จผ์ ๋์จ๋ค.
์ด๊ฒ์ Stack์ ๊ฐ์ฅ ํฐ ํน์ง์ด๋ค. ์ฐจ๊ณก์ฐจ๊ณก ์์ด๋ ๊ตฌ์กฐ๋ก ๋จผ์ Stack์ ๋ค์ด๊ฐ๊ฒ ๋ ์์๋ ๋งจ ๋ฐ๋ฅ์ ๊น๋ฆฌ๊ฒ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฆ๊ฒ ๋ค์ด๊ฐ ๋
์๋ค์ ๊ทธ ์์ ์์ด๊ฒ ๋๊ณ ํธ์ถ๊ธฐ ๊ฐ์ฅ ์์ ์๋ ๋
์์ด ํธ์ถ๋๋ ๊ตฌ์กฐ์ด๋ค.
- ์คํ์ ํ์ฉํ ๋ฏธ๋ก ๋ง๋ค๊ธฐ : Stack-Maze
![Stack](img/Stack.jpg)
๊ทธ๋ฆผ์ผ๋ก ์ค๋ช ํ์๋ฉด 1, 2, 3 ์ด ์๋ ์ํฉ์์ ์๋ก ์ถ๊ฐ๋ ๋ฐ์ดํฐ๋ ์์ ์๊ธฐ๊ณ ์ด๋ฅผ push๋ผ ํ๋ค. ๋ฐ๋๋ก ๋์ค์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋๊ฐ๋ ์ฐ์ฐ์ pop์ด๋ผ ํ๋ค. ๋์ค์ ๋ค์ด์จ 5๊ฐ ๋จผ์ ๋๊ฐ๊ฑธ ๋ณผ ์ ์๋ค. Stack๋ ์ฃผ๋ก ๋ฐฐ์ด๋ก ๊ตฌํํ๋ค.
์ ํ ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข
์ผ๋ก First In First Out(์ ์
์ ์ถ) ์ฆ, ๋จผ์ ๋ค์ด๊ฐ ๋์ด ๋จผ์ ๋์จ๋ค.
Stack๊ณผ๋ ๋ฐ๋๋ก ๋จผ์ ๋ค์ด๊ฐ ๋์ด ๋งจ ์์์ ๋๊ธฐํ๊ณ ์๋ค๊ฐ ๋จผ์ ๋์ค๊ฒ ๋๋ ๊ตฌ์กฐ์ด๋ค.
์ฐธ๊ณ ๋ก Java Collection์์ Queue๋ ์ธํฐํ์ด์ค์ด๋ค. ์ด๋ฅผ ๊ตฌํํ๊ณ ์๋ Priorty queue๋ฑ์ ์ฌ์ฉ ํ ์ ์๋ค.
๊ทธ๋ฆผ์ผ๋ก ์ค๋ช
ํ์๋ฉด 1, 2, 3 ์ด ์๋ ์ํฉ์์ ์๋ก ์ถ๊ฐ๋ ๋ฐ์ดํฐ๋ ๋ค์ ์๊ธด๋ค.
์ด๋ฌํ ์ฐ์ฐ์ ๋ณดํต enqueue๋ผ ๋ถ๋ฅธ๋ค. ๋ฐ๋๋ก ์ด๋ฏธ ์ถ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋นผ๋ ์ฐ์ฐ
์ฆ, queue์์ ๊ฐ์ฅ ์ค๋๋ ๋ฐ์ดํฐ๊ฐ ๋น ์ ธ๋๊ฐ๋ ์ฐ์ฐ์ dequeue๋ผ ํ๋ค.
Queue๋ ๋ฐฐ์ด๋ก๋ ๊ตฌํํ ์ ์๊ณ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก๋ ๊ตฌํํ ์ ์๋๋ฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌํ ํ๋ค๋ฉด ์ด๋ฏธ ์ฐ๊ฒฐ๋ฆฌ์คํธ์๋ Head์ Tail์ ์ถ๊ฐ, ์ญ์ ๋ฅผ ์ฝ๊ฒ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฆฌ์คํธ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ง ํธ์ถ ํด์ฃผ๋ฉด Queue๊ตฌํ์ ๋์ด๋ผ ํ ์์๋ค. ํ์ง๋ง ๋ณดํต ๋ฐฐ์ด๋ก ๋ Queue๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค. ๋ฐฐ์ด์ ์ฌ์ฉํ๋๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ก๋ ์ฑ๋ฅ์ ์ผ๋ก ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด Queue๋ฅผ ์ฌ์ฉํ๋ค.
class Queue {
LinkedList list;
void enqueue(int data) {
list.addFirst(data);
}
int dequeue() {
return list.popLast();
}
}
ํธ๋ฆฌ๋ ์คํ์ด๋ ํ์ ๊ฐ์ ์ ํ ๊ตฌ์กฐ๊ฐ ์๋ ๋น์ ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ํธ๋ฆฌ๋ ๊ณ์ธต์ ๊ด๊ณ(Hierarchical Relationship)์ ํํํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- Node (๋ ธ๋) : ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ณ ์๋ ๊ฐ๊ฐ์ ์์๋ฅผ ์๋ฏธํ๋ค.
- Edge (๊ฐ์ ) : ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ๋ ธ๋์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ ์ ์๋ฏธํ๋ค.
- Root Node (๋ฃจํธ ๋ ธ๋) : ํธ๋ฆฌ ๊ตฌ์กฐ์์ ์ต์์์ ์๋ ๋ ธ๋๋ฅผ ์๋ฏธํ๋ค.
- leaf Node (๋จ๋ง ๋ ธ๋) : ํ์์ ๋ค๋ฅธ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๋ ธ๋๋ฅผ ์๋ฏธํ๋ค.
- Internal Node (๋ด๋ถ๋ ธ๋, ๋น๋จ๋ง ๋ ธ๋) : ๋จ๋ง ๋ ธ๋๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ ธ๋๋ก ๋ฃจํธ ๋ ธ๋๋ฅผ ํฌํจํ๋ค.
- Sub Tree (์๋ธ ํธ๋ฆฌ) : ํธ๋ฆฌ๋ด์ ๋ ๋ค๋ฅธ ํธ๋ฆฌํํ๊ฐ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
- Degree (๋ ธ๋์ ์ฐจ์) : ๊ฐ ๋ ธ๋์์ ๋ป์ด๋์จ ๊ฐ์ ์ ๊ฐ์
- Depth (๋ ธ๋๊ฐ์ ๊ฑฐ๋ฆฌ) : ๋ฃจํธ์์ ํน์ ๋ ธ๋์ ๋๋ฌํ๊ธฐ ์ํ ๊ฐ์ ์ ๊ฐ์
- Level : ํธ๋ฆฌ์์ ๋ํ๋ด๋ ๋์ด
ํธ๋ฆฌ์ ์ ์๋ฅผ ํ ๋ฌธ์ฅ์ผ๋ก ์์ฝํ์๋ฉด ํ๊ฐ์ด์์ ๋ ธ๋๋ก ์ด๋ฃจ์ด์ง ์ฌ์ดํด์ด ์๋ ์ฐ๊ฒฐ๊ทธ๋ํ๋ผ ํ ์ ์๋ค.
์ผ์ชฝ ์ฌ์ง์ ์ฌ์ดํด์ด ๋์์ ํธ๋ฆฌ๊ฐ ๋ ์ ์๊ณ
์ค๋ฅธ์ชฝ ์ฌ์ง์ ์ฐ๊ฒฐ๊ทธ๋ํ๊ฐ ์กด์ฌํ์ง ์์ ํธ๋ฆฌ๊ฐ ๋ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ํธ๋ฆฌ๊ฐ ๋ฐ์ ํ๊ฒ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ ๊ณ์ธต์ด ํ์ํ ๊ตฌ์กฐ์์ ์ฐ์ธ๋ค.
์๋ฅผ๋ค์ด ์กฐ์ง๋๋ผ๋๊ฐ ํ์ผ์์คํ
์ด๋ค.
- ๋ ธ๋์ ๊ฐ์๊ฐ N๊ฐ๋ผ๋ฉด, ์ฃ์ง์ ๊ฐ์๋ ํญ์ N-1๊ฐ์ด๋ค.
- ๋ ธ๋๋ฅผ ์ค๋ณตํด ๋ฐฉ๋ฌธํ์ง ์์ผ๋ฉด, ๋ ธ๋๊ฐ์ ๊ฒฝ๋ก๋ ์ ์ผํ๋ค.
- ๊ท ํ์ด ์กํ์์ผ๋ฉด ํ์์0์ ์ํ์๋๋ฅผ ๊ฐ์ง๋ค.
๋ฃจํธ ๋
ธ๋๋ฅผ ์ค์ฌ์ผ๋ก ๋ ๊ฐ์ ์๋ธ ํธ๋ฆฌ(ํฐ ํธ๋ฆฌ์ ์ํ๋ ์์ ํธ๋ฆฌ)๋ก ๋๋์ด ์ง๋ค. ๋ํ ๋๋์ด์ง ๋ ์๋ธ ํธ๋ฆฌ๋ ๋ชจ๋ ์ด์ง ํธ๋ฆฌ์ด์ผ ํ๋ค. ์ฌ๊ท์ ์ธ ์ ์๋ผ ๋ง๋๋ฏ ํ๋ฉด์๋ ์ดํด๊ฐ ์ฝ์ง ์์ ๋ฏํ๋ค. ํ ๊ฐ์ง ๋ง๋ถ์ด์๋ฉด ๊ณต์งํฉ๋ ์ด์ง ํธ๋ฆฌ๋ก ํฌํจ์์ผ์ผ ํ๋ค. ๊ทธ๋์ผ ์ฌ๊ท์ ์ผ๋ก ์กฐ๊ฑด์ ํ์ธํด๊ฐ์ ๋, leaf node ์ ๋ค๋ค๋์ ๋, ์ ์๊ฐ ๋ง์กฑ๋๊ธฐ ๋๋ฌธ์ด๋ค. ์์ฐ์ค๋ฝ๊ฒ ๋
ธ๋๊ฐ ํ๋ ๋ฟ์ธ ๊ฒ๋ ์ด์ง ํธ๋ฆฌ ์ ์์ ๋ง์กฑํ๊ฒ ๋๋ค.
๋ค์ ๋ง ํ์๋ฉด ํธ๋ฆฌ๋ ํ ๋ถ๋ชจ๊ฐ ์ฌ๋ฌ๊ฐ์ ์์์ ๊ฐ์ง ์ ์๋ค. ์์์ 1๊ฐ๋ฅผ ๊ฐ์ง ์ ์๊ณ 2๊ฐ๋ฅผ ๊ฐ์ง ์ ์๊ณ , 3๊ฐ๋ฅผ ๊ฐ์ง ์ ์๋ค. ํ์ง๋ง ์ด์งํธ๋ฆฌ๋ ๋ชจ๋ ๋
ธ๋๊ฐ 2๊ฐ์ดํ์ ์์๋ง ๊ฐ๋ ํธ๋ฆฌ๋ฅผ ๋งํ๋ ๊ฒ์ด๋ค.
๋ํ ์ด์งํธ๋ฆฌ์ ๋์ด๋ ์ต๋ N์ด๊ฑฐ๋ ์ต์ log2(n+1)์ด ๋ ์ ์๋ค.
๋ค๋ฅด๊ฒ ๋งํ๋ฉด ์ด์งํธ๋ฆฌ์์ ์์๋ฅผ ์ ๊ทผํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์ต๋์๊ฐ์ด N์ด๊ฑฐ๋ log2(n+1)์ด ๋ ์ ์๋ค๋ ๋ง์ด๋ค.
N์ด ๋๋ ๊ฒฝ์ฐ๋ ์ผ์ชฝ๊ณผ ๊ฐ์ด ํ์ชฝ์ผ๋ก ์น์ฐ์น ํํ์ด๊ณ , log2(n+1)์ด ๋๋ ๊ฒฝ์ฐ๋ ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ด ๊ท ํ์ด ์กํ ํํ์ด๋ค.
๋
ธ๋์ ๊ฐ์(N)๋ 3๊ฐ์ด๋ค. N+1์ด 4๊ฐ์ด๋ฉด ๋์ด๋ log2(4) = 2 ์ฆ 2๊ฐ ๋๋ ๊ฑธ ๋ณผ ์ ์๋ค.
๋
ธ๋๊ฐ 7๊ฐ์ธ๊ฒ๋ ๋ณด๋ฉด ๋
ธ๋์ ๊ฐ์(N)์ 7์ด๋ค. N+1 = 8์ด ๋๋ฏ๋ก log2(8)์ 2์3์น์ด๋ฏ๋ก ๋์ด๊ฐ 3์ด ๋๋ค.
* ๋ถ๊ท ํ ํธ๋ฆฌ (UnBalanced) ![UnBalanced](img/UnBalanced.jpg)
* ์์ ์ด์ง ํธ๋ฆฌ (Complete Binary Tree) ![Complete](img/Complete.jpg)
์์ ์ด์ง ํธ๋ฆฌ๋ ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ๊ณ ๋ชจ๋ ๋ ๋ฒจ์ด ์์ ํ ์ฑ์์ ธ ์์ผ๋ฉฐ ๋ง์ง๋ง ๋ ๋ฒจ์ ๋ชจ๋ ๋ ธ๋๋ ๊ฐ๋ฅํ ์ผ์ชฝ์ ๋ถ์ด์๋ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ค๋ฅธ์ชฝ ๊ฐ์ ๊ฒฝ์ฐ๋ ๊ท ํ์กํ ํธ๋ฆฌ์ด์ง๋ง ์ผ์ชฝ๋ถํฐ ์ฑ์์ง์ง ์์์ผ๋ฏ๋ก ์์ ์ด์ง ํธ๋ฆฌ๊ฐ ๋ ์ ์๋ค. * ํฌํ ์ด์ง ํธ๋ฆฌ (Perfect Binary Tree) ๋ชจ๋ ๋ ๋ฒจ์ด ๊ฝ ์ฐฌ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌ์ผ ํฌํ ์ด์ง ํธ๋ฆฌ๋ผ๊ณ ํ๋ค. ![Perfect](img/Perfect.jpg)
์ ์ / ์ค์ / ํ์ ์ํ๋ ๋ถ๋ชจ๋ฅผ ์ธ์ ๋ฐฉ๋ฌธํ๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ๋๋ค. ์ ์ ์ํ๋ ๋ถ๋ชจ๋ฅผ 1์์๋ก ๋ฐฉ๋ฌธํ๊ณ , ์ค์ ์ํ๋ ๋ถ๋ชจ๋ฅผ 2์์, ํ์ ์ํ๋ 3์์๋ก ๋ฐฉ๋ฌธํ๋ค. ๋ ๋ฒจ ์ํ๋ ๋ง ๊ทธ๋๋ก ๋ ๋ฒจ ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ ๊ฒ์ ๋งํ๋ค.
์ด์ง ํ์ ํธ๋ฆฌ๋ ํน๋ณํ ์ฑ์ง์ ๋ง์กฑํ๋ ํธ๋ฆฌ๋ฅผ ๋งํ๋ค. ์ฌ๊ธฐ์ ๋ง ํ๋ ํน๋ณํ ์ฑ์ง์ ์ผ์ชฝ ์์์ ๋ถ๋ชจ๋ณด๋ค ์๊ณ , ์ค๋ฅธ์ชฝ ์์์ ๋ถ๋ชจ๋ณด๋ค ํฌ๋ค๋ ์ฑ์ง์ ๋งํ๋ค. ์ด์ง ํ์ ํธ๋ฆฌ๋ ๋ฐ์ดํฐํ์์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๋ฐฉ๋ฌธํ ๋ ธ๋๊ฐ ์ฐพ๋ ๊ฐ๋ณด๋ค ๋ ํฌ๊ฑฐ๋ ์์์ง ํ๋ณํ๋ฉด์ ๋ด๋ ค๊ฐ๋ฉด ์ ํ์๊ฐ์ด๋ ํ์ ์ํ์๋๋ฅผ ๋ก๊ทธ์๊ฐ์ผ๋ก ์ค์ผ์ ์๊ฒ ๋๋ค.
- ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ์ง ์๋๋ค. ์ฆ ํค๊ฐ์ ์ ์ผํ๋ค.
- ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๋ค.
- ์ฝ์
* ์ญ์ * ์ง์ฐ๋ ๋ ธ๋๊ฐ ์์์ด ์๋ ๊ฒฝ์ฐ - ๊ทธ๋ฅ ์ง์ฐ๋ฉด ๋๋ค. * ์ง์ฐ๋ ๋ ธ๋๊ฐ ์์์ด 1๊ฐ์ธ ๊ฒฝ์ฐ - ์์์ด ๋ถ๋ชจ์ ์์น๋ฅผ ๋์ ํ๋ค. * ์ง์ฐ๋ ๋ ธ๋์ ์์์ด 2๊ฐ๊ฐ ์๋๊ฒฝ์ฐ - ์ด์งํ์ํธ๋ฆฌ์ ์ฑ์ง์ ์๊ฐํ๋ฉด ๋ถ๋ชจ๋ณด๋ค ์์๊ฐ์ ์ผ์ชฝ ํฐ ๊ฐ์ ์ค๋ฅธ์ชฝ์ ๊ฐ๋ฉด๋๋ค.
์ด์ง ํ์ ํธ๋ฆฌ์ ํ์ ์ฐ์ฐ์ O(log n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค. ์ฌ์ค ์ ํํ ๋งํ๋ฉด O(h)๋ผ๊ณ ํํํ๋ ๊ฒ์ด ๋ง๋ค. ํธ๋ฆฌ์ ๋์ด๋ฅผ ํ๋์ฉ ๋ํด๊ฐ์๋ก ์ถ๊ฐํ ์ ์๋ ๋ ธ๋์ ์๊ฐ ๋ ๋ฐฐ์ฉ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์ด๋ฌํ ์ด์ง ํ์ ํธ๋ฆฌ๋ Skewed Tree(ํธํฅ ํธ๋ฆฌ)๊ฐ ๋ ์ ์๋ค. ์ ์ฅ ์์์ ๋ฐ๋ผ ๊ณ์ ํ ์ชฝ์ผ๋ก๋ง ๋ ธ๋๊ฐ ์ถ๊ฐ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ด ๊ฒฝ์ฐ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋ฉฐ, ํ์์ Worst Case ๊ฐ ๋๊ณ ์๊ฐ ๋ณต์ก๋๋ ๋น ์คํ๊ธฐ๋ฒ์ผ๋ก ๋ฐ์ก์๋ O(n)์ด ๋๋ค.
๋ฐฐ์ด๋ณด๋ค ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง๋ง ํ์์ ํ์ํ ์๊ฐ ๋ณต์ก๋๊ฐ ๊ฐ๊ฒ ๋๋ ๋นํจ์จ์ ์ธ ์ํฉ์ด ๋ฐ์ํ๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Rebalancing ๊ธฐ๋ฒ์ด ๋ฑ์ฅํ์๋ค. ๊ท ํ์ ์ก๊ธฐ ์ํ ํธ๋ฆฌ ๊ตฌ์กฐ์ ์ฌ์กฐ์ ์ Rebalancing์ด๋ผ ํ๋ค.
๋ถ๋ชจ๋
ธ๋์ ๊ฐ์ด ์์๋
ธ๋์ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋(์๊ฑฐ๋)๊ฐ์ ์์ ์ด์งํธ๋ฆฌ ํน์ ํฌํ ์ด์งํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
ํํธ๋ฆฌ๋ ์ด์งํ์ํธ๋ฆฌ์ ๋น์ทํ ํํ์ด์ง๋ง ์์๊ณผ ๋ถ๋ชจ์ฌ์ด์ ๋์๊ด๊ณ๊ฐ ์ด์งํ์ํธ๋ฆฌ์๋ ๋ค๋ฅด๋ค.
๋ถ๋ชจ๋
ธ๋๊ฐ ์์๋
ธ๋๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด Heap, ๋ถ๋ชจ๋
ธ๋๋ณด๋ค ์์ผ๋ฉด ์ผ์ชฝ, ํฌ๋ฉด ์ค๋ฅธ์ชฝ์ด๋ฉด ์ด์งํ์ํธ๋ฆฌ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ํฐ ๊ฐ, ๊ฐ์ฅ ์์๊ฐ ์ธ์๋ ํน์ ๋
ธ๋์ ๋ํ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅ ํ๋ค.
๋ถ๋ชจ๋
ธ๋๋ ์์๋
ธ๋๋ณด๋ค ์๋ค๋ ๊ฒ๋ง ์๊ธฐ์ ํ์ํด์ ๋ค์ด๊ฐ๋๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์งํ์ํธ๋ฆฌ์๋ ๋ค๋ฅด๊ฒ ์ค๋ณต๋ ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
- ์ฝ์ : ์ ๊ท ์ง์์ ๋ง๋จ์ ์์น์ํจ๋ค, ์น์ง
- ์ญ์ : ๋ง๋ด ์ง์์ ๋น์ด์๋ ์ด์ฌ์ง์ ์ฌ๋ฆฐ ๋ค ๊ฐ๋ฑ ์ํจ๋ค๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
Heap๊ฐ์ ๊ฒฝ์ฐ ์ต๋, ์ต์๊ฐ ์ ๊ทผ์ ์ํ์๋๋ O(1)์ด๊ณ ์ฝ์ , ์ญ์ ์ ์ํ์๋๋ ๊ท ํ์กํ ์ด์งํธ๋ฆฌ์์์ ๋์ด์ ๋น๋กํ๋ฏ๋ก O(log2N)์ ์ํ์๋๋ฅผ ๊ฐ์ง๋ค.
BST๋ ํน์ ์์์ ๋ํ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ ์ ์ฒด๊ฐ ์ ๋ ฌ๋ ์ํ๋ฅผ ์ ์งํ๋ค. ์ค์์ํ๋ฅผ ํตํด ์ถ๊ฐ์ ์ธ ์ ๋ ฌ์์ ์์ด ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ณ ์ค๋ณต๋ ์์์ ์ฝ์ ์ ํ์ฉํ์ง ์๋๋ค.
HEAP์ ๋ถ๋ชจ๊ฐ ๋จ์ํ ์์๋ณด๋ค ์๊ฑฐ๋ ํฌ๊ฑฐ๋ ํ๋ ์ฑ์ง์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ํน์ ์์์ ๋ํ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅ ํ๋ค. ํ์ง๋ง ๊ฐ์ฅ ํฌ๊ฑฐ๋ ์์ ์์์ ์ ๊ทผํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ฃจํธ์ ๋ ธ๋๋ง ๋ณด๋ฉด ๋๊ธฐ ๋๋ฌธ์ O(1)์ ์๊ฐ์ ์ํํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ณต๋ ์์์ ์ฝ์ ์ ํ์ฉํ๋ค.