Skip to content

Latest commit

ย 

History

History
357 lines (252 loc) ยท 15.4 KB

basic.md

File metadata and controls

357 lines (252 loc) ยท 15.4 KB

๊ธฐ๋ณธ ์ž๋ฃŒ ๊ตฌ์กฐ

์ž‘์„ฑ์ž : ์„œ๊ทธ๋ฆผ

์ž๋ฃŒ๊ตฌ์กฐ(Data Structure)๋ž€ ์ž๋ฃŒ์— ํšจ์œจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ด์•ผ๊ธฐํ•œ๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ์— ๋”ฐ๋ผ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ๋ ฌ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๊ณ  ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํŠน์ •ํ•œ ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ๋‹ค. ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ข…๋ฅ˜์—๋Š” array, linked list, stack, queue ๋“ฑ์ด ์žˆ์œผ๋ฉฐ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋กœ๋Š” tree, graph ๋“ฑ์ด ์žˆ๋‹ค.

Table of Contents

Array (๋ฐฐ์—ด)

๋™์ผํ•œ ์ž๋ฃŒํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

  • ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์ด ์šฉ์ดํ•˜๋‹ค. (์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ - Random Access๊ฐ€ ๊ฐ€๋Šฅ)
  • ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ์–ด๋ ต๋‹ค. (Shift ํ•ด์ค˜์•ผ ํ•จ)
  • ๊ตฌ์กฐ๊ฐ€ ๊ฐ„๋‹จํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ์ด ์‰ฝ๋‹ค.

Array ๊ตฌํ˜„

Java

/* ์„ ์–ธ (Declaring Arrays) */
int[] arrayOfInt;
String[] arrayOfString;

/* ์ƒ์„ฑ (Creating Arrays) */
arrayOfInt = new int[100];
arrayOfString = new String[10];

/* ์ดˆ๊ธฐํ™” (Initializing Arrays) */
for (int i = 0; i < arrayOfInt.length; i++) {
  arrayOfInt[i] = i;
}
arrayOfString = new String[]{"hello", "world"};
String[] name = {"Stacy", "Tracy", "Dorothy"};

Array ์‹œ๊ฐ„ ๋ณต์žก๋„ & ๊ณต๊ฐ„ ๋ณต์žก๋„

์‹œ๊ฐ„ ๋ณต์žก๋„

  • ๋ฐ์ดํ„ฐ ์กฐํšŒ : O(1)
  • ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œํ•˜๊ธฐ : O(n)

Linked List (์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)

๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์ผ๋ ฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ์ด ๋Š๋ฆฌ๋‹ค. (๋งํฌ๋ฅผ ํƒ€๊ณ  ๊ฐ€์„œ ์ฐพ์•„์•ผ ํ•œ๋‹ค.)
  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…/์‚ญ์ œ ์—ฐ์‚ฐ์ด ์šฉ์ดํ•˜๋‹ค.
  • ํฌ์ธํ„ฐ๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.

Linked List ๊ตฌํ˜„

Linked List ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ๋ฐ์ดํ„ฐ ์กฐํšŒ : O(n)
  • ๋งจ ์•ž/๋’ค์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œํ•˜๊ธฐ : O(1) (SinglyLinkedList์˜ ๊ฒฝ์šฐ ๋งจ ๋’ค์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์—ฐ์‚ฐ์€ O(n))
  • ์ค‘๊ฐ„์˜ ์›ํ•˜๋Š” ์œ„์น˜์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œํ•˜๊ธฐ : O(n) (์›ํ•˜๋Š” ์›์†Œ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ณผ์ •์ด ์žˆ์œผ๋ฏ€๋กœ O(n) + O(1))

Array์™€ Linked List์˜ ์ฐจ์ด

  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„
    • Array๋Š” ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ Random Access๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(1)๋กœ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
    • LinkedList๋Š” ์ˆœ์ฐจ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N)์ด ๊ฑธ๋ฆฐ๋‹ค.
  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…/์‚ญ์ œ ์†๋„
    • Array๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๊ฐ„์ด๋‚˜ ๋งจ ์•ž์— ์‚ฝ์ž…/์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ shift๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๋น„ํšจ์œจ์ ์ด๋‹ค.
    • LinkedList๋Š” ์ค‘๊ฐ„ ์‚ฝ์ž…/์‚ญ์ œ๋Š” ๋˜‘๊ฐ™์ด O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–์ง€๋งŒ, ๋งจ ์•ž ๋˜๋Š” ๋’ค์— ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ O(1)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • ๋‹ค๋งŒ LinkedList๋Š” ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œ๋งˆ๋‹ค ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น/ํ•ด์ œ๊ฐ€ ์ผ์–ด๋‚˜๋ฏ€๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๋น ๋ฅผ์ง€๋ผ๋„ ์‹œ์Šคํ…œ ์ฝœ(System Call)์— ์žˆ์–ด์„œ Array๋ณด๋‹ค ๋” ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
    • Array๋Š” ์ •์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง„๋‹ค. (Compile time)
    • LinkedList๋Š” ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง„๋‹ค. (Runtime)
    • Array์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์‹œ ๋ชจ๋“  ๊ณต๊ฐ„์ด ๋‹ค ์ฐจ๋ฒ„๋ ธ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜์ง€๋งŒ LinkedList๋Š” ๋™์ ์œผ๋กœ ํ• ๋‹น๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋‹ค๋ฉด LinkedList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ณ , ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋ฉด Array๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


Stack (์Šคํƒ)

  • ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
  • ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ์ด ํ•œ ๋ฐฉํ–ฅ์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.
  • LIFO(Last In First Out) : ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค.

Stack ์šฉ์–ด

  • Top : ์Šคํƒ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋  ์œ„์น˜

Stack ์ฃผ์š” ์—ฐ์‚ฐ

  • push : ์Šคํƒ์˜ top์— ์›์†Œ ์‚ฝ์ž…
  • pop : ์Šคํƒ์˜ top์— ์žˆ๋Š” ์›์†Œ ์‚ญ์ œ ๋ฐ ๋ฐ˜ํ™˜
  • peek : ์Šคํƒ์˜ top์— ์žˆ๋Š” ์›์†Œ ๋ฐ˜ํ™˜

Stack ๊ตฌํ˜„

Stack ์‹œ๊ฐ„ ๋ณต์žก๋„ & ๊ณต๊ฐ„ ๋ณต์žก๋„

  • ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œ : O(1)
  • top ๋ฐ์ดํ„ฐ ์กฐํšŒ : O(1)
  • ํŠน์ • ๋ฐ์ดํ„ฐ ์กฐํšŒ : O(n)

Stack ํ™œ์šฉ

  • ์‹œ์Šคํ…œ ์Šคํƒ(System Stack) / ์‹คํ–‰์‹œ๊ฐ„ ์Šคํƒ(Runtime stack) : ํ”„๋กœ๊ทธ๋žจ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๋ณต๊ท€์— ๋”ฐ๋ฅธ ์‹คํ–‰ ์ˆœ์„œ ๊ด€๋ฆฌ
  • ์ธํ„ฐ๋ŸฝํŠธ ๋ฃจํ‹ด ์ฒ˜๋ฆฌ
  • ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐฉ๋ฌธ ๊ธฐ๋ก ๊ด€๋ฆฌ (๋’ค๋กœ๊ฐ€๊ธฐ)
  • ์‹คํ–‰ ์ทจ์†Œ (undo)
  • ์ˆ˜์‹์˜ ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ•(Postfix Notation)
  • ์ˆ˜์‹์˜ ๊ด„ํ˜ธ์‹ ๊ฒ€์‚ฌ
  • ๊ณ„์‚ฐ๊ธฐ ๊ฒ€์‚ฌ
  • ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS, Depth-First Search)

ํ”„๋กœ๊ทธ๋žจ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๋ณต๊ท€์— ๋”ฐ๋ฅธ ์‹คํ–‰ ์ˆœ์„œ ๊ด€๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฐ€์ง„๋‹ค.

  1. ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋ฐœ์ƒํ•˜๋ฉด ์Šคํƒ ํ”„๋ ˆ์ž„(stack frame)์— ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ์ˆ˜ํ–‰ ํ›„ ๋ณต๊ท€ํ•  ์ฃผ์†Œ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜์—ฌ ์‹œ์Šคํ…œ ์Šคํƒ์— ์‚ฝ์ž…ํ•œ๋‹ค.
  2. ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์‹œ์Šคํ…œ ์Šคํƒ์˜ top์— ์žˆ๋Š” stack frame ์›์†Œ๋ฅผ popํ•˜๊ณ , frame์— ์ €์žฅ๋˜์–ด ์žˆ๋˜ ๋ณต๊ท€ ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ณต๊ท€ํ•œ๋‹ค.
  3. ํ•จ์ˆ˜ ํ˜ธ์ถœ - ๋ณต๊ท€์— ๋”ฐ๋ผ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๊ณ , ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰์ด ์ข…๋ฃŒ๋˜๋ฉด ์‹œ์Šคํ…œ ์Šคํƒ์€ ๊ณต๋ฐฑ ์Šคํƒ์ด ๋œ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ถœ์€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰์„ ์™„๋ฃŒํ•˜๊ณ  ๋ณต๊ท€ํ•˜๋Š” ํ›„์ž…์„ ์ถœ ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์Šคํƒ์„ ์ด์šฉํ•ด ๊ด€๋ฆฌํ•œ๋‹ค.


Queue (ํ)

  • ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
  • ํ•œ ๋ฐฉํ–ฅ์—์„œ๋Š” ์‚ฝ์ž… ์—ฐ์‚ฐ์ด, ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์—์„œ๋Š” ์‚ญ์ œ ์—ฐ์‚ฐ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.
  • FIFO(First In First Out) : ๋จผ์ € ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค.

Queue ์šฉ์–ด

  • Front / Head : ํ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋  ์œ„์น˜
  • Rear / Tail : ํ์—์„œ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฝ์ž…๋œ ์œ„์น˜

Queue ์ฃผ์š” ์—ฐ์‚ฐ

  • enQueue : ํ์˜ rear์— ์›์†Œ ์‚ฝ์ž…
  • deQueue : ํ์˜ front์— ์žˆ๋Š” ์›์†Œ ์‚ญ์ œ ๋ฐ ๋ฐ˜ํ™˜

Queue ๊ตฌํ˜„

Java์—์„œ API๋กœ Queue๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, java.util.Queue๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ, ๊ทธ ๊ตฌํ˜„์ฒด๋กœ java.util.LinkedList๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Queue<String> queue = new LinkedList<String>()๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

Queue ์‹œ๊ฐ„ ๋ณต์žก๋„ & ๊ณต๊ฐ„ ๋ณต์žก๋„

  • ๋ฐ์ดํ„ฐ ์‚ฝ์ž…/์‚ญ์ œ : O(1)
  • front ๋ฐ์ดํ„ฐ ์กฐํšŒ : O(1)
  • ํŠน์ • ๋ฐ์ดํ„ฐ ์กฐํšŒ : O(n)

Queue ํ™œ์šฉ

  • ํ”„๋กœ์„ธ์Šค ๋ ˆ๋”” ํ
  • ์Šค์ผ€์ฅด๋ง
  • ์บ์‹œ(Cache) ๊ตฌํ˜„
  • ๋„คํŠธ์›Œํฌ ํŒจํ‚ท ์ „์†ก์‹œ ํ•„์š”ํ•œ ๋ฒ„ํผ ๋Œ€๊ธฐ ํ
  • javascript์˜ Event Loop ๊ด€๋ฆฌ (๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ)
  • ํ‚ค๋ณด๋“œ ๋ฒ„ํผ
  • ํ”„๋ฆฐํ„ฐ์˜ ์ถœ๋ ฅ ์ฒ˜๋ฆฌ
  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS, Breadth-First Search)

Tree (ํŠธ๋ฆฌ)

์ž๋ฃŒ๋“ค ์‚ฌ์ด์˜ ๊ณ„์ธต์  ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋กœ ํ‘œํ˜„๋œ๋‹ค.

  • ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
  • ํŠธ๋ฆฌ๋Š” ๋‹ค์Œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ๋‹ค.
    • ๋ฃจํŠธ ๋…ธ๋“œ(root node)๊ฐ€ ์กด์žฌํ•œ๋‹ค. (โ†’ ํŠธ๋ฆฌ๋Š” ๋ฐ˜๋“œ์‹œ 1๊ฐœ ์ด์ƒ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.)
    • ํŠธ๋ฆฌ์˜ ๋ถ€๋ถ„ ํŠธ๋ฆฌ(sub tree) ๋˜ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

Tree ์šฉ์–ด

  • ๋ฃจํŠธ ๋…ธ๋“œ (Root Node) : ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„ ๋…ธ๋“œ. unique
  • ๋ถ€๋ชจ ๋…ธ๋“œ (Parent Node) : ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„์—์„œ ์ƒ์œ„ ๊ณ„์ธต์˜ ๋…ธ๋“œ
  • ์ž์‹ ๋…ธ๋“œ (Child Node) : ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„์—์„œ ํ•˜์œ„ ๊ณ„์ธต์˜ ๋…ธ๋“œ
  • ํ˜•์ œ ๋…ธ๋“œ : ๋ถ€๋ชจ๊ฐ€ ๋™์ผํ•œ ๋…ธ๋“œ
  • ์กฐ์ƒ ๋…ธ๋“œ : ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ ~ ๋ฃจํŠธ ๋…ธ๋“œ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค
  • ํ›„์† ๋…ธ๋“œ : ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ๋กœ ํ•˜๋Š” ๋ถ€๋ถ„ ํŠธ๋ฆฌ(sub tree)์— ์žˆ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋“ค
  • ๋‚ด๋ถ€ ๋…ธ๋“œ (internal/nonterminal node) : ์ž์‹์ด ์žˆ๋Š” ๋…ธ๋“œ
  • ์™ธ๋ถ€ ๋…ธ๋“œ (๋‹จ๋ง ๋…ธ๋“œ, ์žŽ์ƒˆ ๋…ธ๋“œ, leaf/external/terminal node) : ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ
  • ๊นŠ์ด (Depth) : ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ํ•ด๋‹น ๋…ธ๋“œ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜
    • ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๊นŠ์ด๋Š” 0
  • ๋ ˆ๋ฒจ (Level) : ๋…ธ๋“œ์˜ ๊นŠ์ด(depth) + 1
  • ๋†’์ด (Height) : ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ํ•ด๋‹น ๋…ธ๋“œ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š”๋ฐ ์ง€๋‚˜๊ฐ„ ์ •์ ์˜ ๊ฐœ์ˆ˜
    • ํŠธ๋ฆฌ์˜ ๋†’์ด : ํ•ด๋‹น ํŠธ๋ฆฌ ๋‚ด ๋ชจ๋“  ๋…ธ๋“œ์˜ ๋†’์ด ์ค‘ ์ตœ๋Œ“๊ฐ’
  • ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜ (Degree) : ๋…ธ๋“œ์˜ ์ž์‹ ์ˆ˜
    • ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜ : ํ•ด๋‹น ํŠธ๋ฆฌ ๋‚ด ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜ ์ค‘ ์ตœ๋Œ“๊ฐ’

Tree ๊ตฌํ˜„

Tree ์‹œ๊ฐ„ ๋ณต์žก๋„ & ๊ณต๊ฐ„ ๋ณต์žก๋„

  • ๋…ธ๋“œ ์‚ฝ์ž…: O(1)
  • ๋…ธ๋“œ ์‚ญ์ œ: O(1)
  • ๋…ธ๋“œ ๊ฒ€์ƒ‰: O(N)

๋…ธ๋“œ ์‚ญ์ œ์˜ ๊ฒฝ์šฐ, ์–ธ์–ด์™€ ๊ตฌํ˜„์— ๋”ฐ๋ผ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜์— ์˜ํ•ด ์ฐธ์กฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ O(1)์— ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ.

Tree ํ™œ์šฉ

  • HTML DOM ํŠธ๋ฆฌ
  • ํŒŒ์ผ ์‹œ์Šคํ…œ
  • DBMS
  • ๊ฒ€์ƒ‰ ์—”์ง„
  • ํŠธ๋ผ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜

Binary Tree (์ด์ง„ ํŠธ๋ฆฌ)

ํŠธ๋ฆฌ์˜ ์ฐจ์ˆ˜๊ฐ€ 2 ์ดํ•˜์ธ ํŠธ๋ฆฌ์ด๋‹ค.

  • ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
  • ์ž์‹์ด ์ตœ๋Œ€ 2๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹์„ ์™ผ์ชฝ ์ž์‹๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
  • ๋†’์ด๊ฐ€ N์ธ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋Š” formula๊ฐœ ์ด๋‹ค.

Binary Tree์˜ ์ข…๋ฅ˜

  • ์ • ์ด์ง„ ํŠธ๋ฆฌ (Fully Binary Tree) : ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜๊ฐ€ 0 ๋˜๋Š” 2์ธ ์ด์ง„ํŠธ๋ฆฌ
  • ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ (Perfect Binary Tree) : ์ • ์ด์ง„ ํŠธ๋ฆฌ์—์„œ ๋ชจ๋“  ์™ธ๋ถ€ ๋…ธ๋“œ(leaf node)์˜ ๊นŠ์ด๊ฐ€ ๊ฐ™์€ ์ด์ง„ ํŠธ๋ฆฌ
    • ๋†’์ด๊ฐ€ H์ธ ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋Š” formula๊ฐœ ์ด๋‹ค.
    • ๋ฐ˜๋Œ€๋กœ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ N๊ฐœ์ธ ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” formula๊ฐœ ์ด๋‹ค.
    • ๊นŠ์ด๊ฐ€ D์ธ ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ์˜ ์™ธ๋ถ€ ๋…ธ๋“œ(leaf node) ๊ฐœ์ˆ˜๋Š” formula๊ฐœ ์ด๋‹ค.
  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ (Complete Binary Tree) : ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์€ ๋…ธ๋“œ๊ฐ€ ์™ผ์ชฝ์— ๋ชฐ๋ ค์žˆ๊ณ , ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•˜๋ฉด ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋„๊ณ  ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ
  • ์‚ฌํ–ฅ ์ด์ง„ ํŠธ๋ฆฌ (Skewed Binary Tree) : linked list์ฒ˜๋Ÿผ ํ•œ ์ค„๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ํ˜•ํƒœ์˜ ์ด์ง„ ํŠธ๋ฆฌ

Binary Tree ๊ตฌํ˜„

Binary Tree ์‹œ๊ฐ„ ๋ณต์žก๋„ & ๊ณต๊ฐ„ ๋ณต์žก๋„

Binary Tree ํ™œ์šฉ


Graph (๊ทธ๋ž˜ํ”„)

๊ทธ๋ž˜ํ”„ ์ •์˜

ํ˜„์‹ค์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์ด๋‚˜ ๊ฐœ๋… ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ˆ˜ํ•™์  ๋ชจ๋ธ๋กœ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ํ‘œํ˜„ํ•œ ๊ฒƒ

  • V : ์ •์  (Vertex / Node)
  • E : ๊ฐ„์„  (Edge / Link / Arc)
  • ๊ทธ๋ž˜ํ”„ G = (V, E)

๊ทธ๋ž˜ํ”„ ์šฉ์–ด

  1. ์ •์ , ๋…ธ๋“œ (Vertex, Node)
  2. ๊ฐ„์„  (Edge)
    • ๋ฌดํ–ฅ ๊ฐ„์„  (Undirected Edge) : ๋ฐฉํ–ฅ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ„์„ , ์–‘๋ฐฉํ–ฅ
    • ์œ ํ–ฅ ๊ฐ„์„  (Directed Edge) : ๋ฐฉํ–ฅ์ด ์กด์žฌํ•˜๋Š” ๊ฐ„์„ 
  3. ์ธ์ ‘ (Adjacent) : (์ •์  ๊ด€์ ) ๋‘ ์ •์  A, B ์‚ฌ์ด์— ๊ฐ„์„ ์ด ์กด์žฌํ•œ๋‹ค๋ฉด A, B๋Š” ์ธ์ ‘ํ•œ๋‹ค.
  4. ๋ถ€์† (Incident) : (๊ฐ„์„  ๊ด€์ ) ๋‘ ์ •์  A, B ์‚ฌ์ด์— ๊ฐ„์„  e๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ฐ„์„  e๋Š” ์ •์  A, B์— ๋ถ€์†ํ•œ๋‹ค.
  5. ์ฐจ์ˆ˜ (Degree) : ํ•œ ์ •์ ์— ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์˜ ์ˆ˜
    • (๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„) in-degree : ์ •์ ์— ๋“ค์–ด์˜ค๋Š” ๊ฐ„์„ ์˜ ์ˆ˜, out-degree : ๋‚˜๊ฐ€๋Š” ๊ฐ„์„ ์˜ ์ˆ˜
  6. ์ž๊ธฐ ๊ฐ„์„ ๊ณผ ๋‹ค์ค‘ ๊ฐ„์„ 
    • ์ž๊ธฐ ๊ฐ„์„  (Self-loop) : ์ž์‹ ์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ค๋Š” ๊ฐ„์„ 
    • ๋‹ค์ค‘ ๊ฐ„์„  (Multiple / Parallel edges) : ๋‘ ๊ฐœ ์ด์ƒ์˜ ๊ฐ„์„ ์ด ๋˜‘๊ฐ™์€ ๋‘ ์ •์ ์— ๋ถ€์†ํ•  ๋•Œ
  7. ๊ฒฝ๋กœ (Path) : ์ •์  + ๊ฐ„์„ ์ด ๊ต๋Œ€๋กœ ๊ตฌ์„ฑ๋œ sequence
    • ๋‹จ์ˆœ ๊ฒฝ๋กœ (Simple Path) : ๊ฐ™์€ ์ •์ ์„ ๋‘ ๋ฒˆ ์ด์ƒ ๊ฐ€์ง€ ์•Š๋Š” ๊ฒฝ๋กœ
  8. ํšŒ๋กœ (Cycle) : A ์ •์ ์—์„œ ์ถœ๋ฐœํ–ˆ์„ ๋•Œ ๋‹ค์‹œ A ์ •์ ์œผ๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒฝ๋กœ
    • ๋‹จ์ˆœ ํšŒ๋กœ (Simple Cycle) : ๊ฐ™์€ ์ •์ ์„ ๋‘ ๋ฒˆ ์ด์ƒ ๊ฐ€์ง€ ์•Š๋Š” ์‹ธ์ดํด
  9. ์—ฐ๊ฒฐ๋จ (Connected) : ์ •์  A์—์„œ ์ •์  B๋กœ์˜ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•  ๋•Œ A์™€ B๋Š” ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค.

๊ทธ๋ž˜ํ”„ ์ข…๋ฅ˜

  1. ๋ฌดํ–ฅ ๊ทธ๋ž˜ํ”„ (Undirected Graph) : ๋ฌด๋ฐฉํ–ฅ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ž˜ํ”„
  2. ์œ ํ–ฅ ๊ทธ๋ž˜ํ”„ (Directed Graph) : ๋ฐฉํ–ฅ ๊ฐ„์„ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ž˜ํ”„
  3. ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„ (Weighted Graph) : ๊ฐ€์ค‘์น˜(๋น„์šฉ)๋ฅผ ๊ฐ–๋Š” ๊ฐ„์„ ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ž˜ํ”„
  4. ์ •๊ทœ ๊ทธ๋ž˜ํ”„ (Regular Graph) : ๋ชจ๋“  ์ •์ ์ด ๋™์ผํ•œ ์ฐจ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ๊ทธ๋ž˜ํ”„
  5. ์™„์ „ ๊ทธ๋ž˜ํ”„ (Complete Graph) : ๋ชจ๋“  ์ •์ ์ด ์„œ๋กœ ์ธ์ ‘ํ•ด์žˆ๋Š” ๊ทธ๋ž˜ํ”„, ์™„์ „ ๊ทธ๋ž˜ํ”„๋Š” ์ •๊ทœ ๊ทธ๋ž˜ํ”„
  6. ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„ (Connected Graph) : ๋ชจ๋“  ์ •์ ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์„œ ๋ชจ๋“  ์ •์ ๋ผ๋ฆฌ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ทธ๋ž˜ํ”„
  7. ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„ : ์–ด๋–ค ๊ทธ๋ž˜ํ”„์˜ ๋ถ€๋ถ„ ๋ถ€๋ถ„
  8. ํŠธ๋ฆฌ ๊ทธ๋ž˜ํ”„ : ์‹ธ์ดํด์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„, ๋ชจ๋“  ์ •์ ์— ๋Œ€ํ•ด์„œ ๊ฒฝ๋กœ๊ฐ€ ์ •ํ™•ํžˆ 1๊ฐœ ์กด์žฌํ•œ๋‹ค.

๊ทธ๋ž˜ํ”„ ํ‘œํ˜„

๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„ ๋ฐฉ์‹์—๋Š” ๊ฐ„์„  ๋ฆฌ์ŠคํŠธ, ์ธ์ ‘ ํ–‰๋ ฌ, ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ 3๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

์ •์  ๊ฐœ์ˆ˜ : V๊ฐœ, ๊ฐ„์„  ๊ฐœ์ˆ˜ : E๊ฐœ

๊ฐ„์„  ๋ฆฌ์ŠคํŠธ (Edge List)

  • E x 2 (or E x 3) ์ด์ฐจ์› ๋ฐฐ์—ด A์— ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋‘ ์ •์  x, y ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„  k์— ๋Œ€ํ•ด์„œ A[k][0] = x, A[k][1] = y
  • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ A[k][2] ์— ๊ฐ€์ค‘์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

แ„€แ…กแ†ซแ„‰แ…ฅแ†ซแ„…แ…ตแ„‰แ…ณแ„แ…ณ

์ธ์ ‘ ํ–‰๋ ฌ (Adjacency Matrix)

  • V x V ์ด์ฐจ์› ๋ฐฐ์—ด A์— ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • Vi, Vj๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์ด ์กด์žฌํ•œ๋‹ค๋ฉด A[i][j] = 1, ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด A[i][j] = 0
  • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ 1 ๋Œ€์‹  ๊ฐ€์ค‘์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋ณต์žก๋„๊ฐ€ V2 ์ด๊ธฐ ๋•Œ๋ฌธ์— V์˜ ๊ฐ’์ด ํด ๊ฒฝ์šฐ ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 100 ์ดํ•˜์˜ ๊ฐ’์ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

แ„‹แ…ตแ†ซแ„Œแ…ฅแ†ธแ„’แ…ขแ†ผแ„…แ…งแ†ฏ

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ (Adjacent List)

  • V ๊ฐœ์˜ Linked List๋กœ ๊ทธ๋ž˜ํ”„ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„์˜ ๊ฒฝ์šฐ (์ •์  ์ •๋ณด, ๊ฐ€์ค‘์น˜ ์ •๋ณด)๋ฅผ ํ•จ๊ป˜ ์ €์žฅํ•œ๋‹ค. (C++ : pair, Java : class)

แ„‹แ…ตแ†ซแ„Œแ…ฅแ†ธแ„…แ…ตแ„‰แ…ณแ„แ…ณ

๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ๋ฐฉ์‹ ๋น„๊ต

์ •์  ๊ฐœ์ˆ˜ : V๊ฐœ, ๊ฐ„์„  ๊ฐœ์ˆ˜ : E๊ฐœ

๊ฐ„์„  ๋ฆฌ์ŠคํŠธ ์ธ์ ‘ ํ–‰๋ ฌ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
๊ณต๊ฐ„ E V2 V + E
์ •์  Va ์˜ ๋ถ€์† ๊ฐ„์„  E V Va ์ฐจ์ˆ˜
์ •์  Va, Vb ์˜ ์ธ์ ‘ ์—ฌ๋ถ€ E 1 min(Va ์ฐจ์ˆ˜, Vb ์ฐจ์ˆ˜)
์ •์  ์‚ฝ์ž… 1 V2 1
๊ฐ„์„  ์‚ฝ์ž… 1 1 1