Skip to content

Latest commit

ย 

History

History
317 lines (264 loc) ยท 18.3 KB

linear_Data_Structure.md

File metadata and controls

317 lines (264 loc) ยท 18.3 KB

์ž๋ฃŒ๊ตฌ์กฐ (Linear_data_Structure)

์ž‘์„ฑ์ž : ์ „์ฐฌ๋ฏผ

์ž๋ฃŒ๊ตฌ์กฐ๋ž€?

์ „์‚ฐํ•™์—์„œ ์ž๋ฃŒ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ปดํ“จํ„ฐ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•. ์‹ ์ค‘ํžˆ ์„ ํƒํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ณด๋‹ค ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์„ ํ˜•๊ตฌ์กฐ(Linear) / ๋น„์„ ํ˜•๊ตฌ์กฐ(NonLinear)๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

  • ์„ ํ˜•๊ตฌ์กฐ - ๋ฐฐ์—ด(Arrays), ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Linked List), ์Šคํƒ(Stack), ํ(Queue) => ์ž๋ฃŒ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜์—ด์‹œํ‚จ ํ˜•ํƒœ

  • ๋น„์„ ํ˜•๊ตฌ์กฐ - ํŠธ๋ฆฌ(Tree), ๊ทธ๋ž˜ํ”„(Graph) => ํ•˜๋‚˜์˜ ์ž๋ฃŒ๋’ค์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž๋ฃŒ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ์ฐธ๊ณ ์ž๋ฃŒ: Github

  • ์ฐธ๊ณ ์˜์ƒ: Youtube


Array

  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ธ Array๋Š” ๋…ผ๋ฆฌ์  ์ €์žฅ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ €์žฅ์ˆœ์„œ๊ฐ€ ์ผ์น˜ํ•œ๋‹ค ๋”ฐ๋ผ์„œ index๋กœ ํ•ด๋‹น์›์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฐพ๊ณ ์ž ํ•˜๋Š” ์›์†Œ์˜ ์ธ๋ฑ์Šค ๊ฐ’์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ํ•ด๋‹น ์›์†Œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, Random access๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋Š”๊ฒƒ์ด๋‹ค.

  • ํ•˜์ง€๋งŒ ์‚ญ์ œ ๋˜๋Š” ์‚ฝ์ž…์˜ ๊ณผ์ •์—์„œ๋Š” ํ•ด๋‹น ์›์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ์ž‘์—…์„ ์™„๋ฃŒํ•œ๋’ค, ๋˜ ํ•œ๊ฐ€์ง€์˜ ์ž‘์—…์„ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฐ๋‹ค. ๋งŒ์•ฝ ๋ฐฐ์—ด์˜ ์›์†Œ ์ค‘ ์–ด๋Š ์›์†Œ๋ฅผ ์‚ญ์ œํ–ˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๋ฐฐ์—ด์˜ ์—ฐ์†์ ์ธ ํŠน์ง•์ด ๊นจ์ง€๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๊ฒŒ ๋˜๋Š”๊ฒƒ์ด๋‹ค.

  • ์‚ฝ์ž…์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ๋งŒ์•ฝ ์ฒซ๋ฒˆ์งธ ์ž๋ฆฌ์— ์ƒˆ๋กœ์šด ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๋ชจ๋“  ์›์†Œ๋“ค์˜ index๋ฅผ 1์”ฉ ์˜ฎ๊ฒจ์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„์„ ์š”๊ตฌํ•˜๊ฒŒ ๋œ๋‹ค.

Array let arr[5]= {1,2,3,4,5}; ๋ผ๋Š” ๋ฐฐ์—ด์ด ์žˆ๋‹ค. 6๋ถ€ํ„ฐ10๊นŒ์ง€ ์›์†Œ๋ฅผ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์ง€๊ธˆ ์ด ๊ตฌ์กฐ์—์„œ๋Š” ํ•  ์ˆ˜ ์—†๋‹ค. ํ•ด์•ผ ํ•œ๋‹ค๋ฉด.

let arr[10] = {1,2,3,4,5,6,7,8,9,0}; ์ด๋ผ๋Š” ๋ฐฐ์—ด์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค. Array-Plus

๋ฐฐ์—ด์˜ ํ•œ๊ณ„

    1. ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์„๊ฒฝ์šฐ

1, 3, 4, 5 => 1๊ณผ3์‚ฌ์ด์— 2๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์„๊ฒฝ์šฐ ํ•ด์•ผํ•˜๋Š” ๋ฐฉ๋ฒ• -> 1, 2, 3, 4, 5 3,4,5๋ฅผ ํ•œ ์นธ์”ฉ ๋’ค๋กœ ๋ฐ€์–ด์•ผ ํ•œ๋‹ค. ๋น„ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

Array-Plus2

    1. ์ค‘๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

1, 2, 2, 3, 4 => 2๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์„๋•Œ ํ•ด์•ผํ•˜๋Š” ๋ฐฉ๋ฒ• -> 1, 2, 3, 4 ์ค‘๊ฐ„์— ์žˆ๋Š” 2๋ฅผ ์—†์• ๊ธฐ ์œ„ํ•ด์„  ๋’ค์— ์žˆ๋Š” 2, 3, 4๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๋ฎ์–ด์”Œ์›Œ์•ผ ํ•œ๋‹ค.

Array-Delete

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

  • ์ด๋Ÿฌํ•œ ํ•œ๊ณ„์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ linked list์ด๋‹ค. ๊ฐ๊ฐ์˜ ์›์†Œ๋“ค์€ ์ž๊ธฐ ์ž์‹  ๋‹ค์Œ์— ์–ด๋–ค ์›์†Œ์ธ์ง€๋งŒ์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ถ€๋ถ„๋งŒ ๋‹ค๋ฅธ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ์‚ญ์ œ์™€ ์‚ฝ์ž…์„ ํฐ ์‹œ๊ฐ„ ์•ˆ๋“ค์ด๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฒƒ์ด๋‹ค.

  • ํ•˜์ง€๋งŒ Linnked List ์—ญ์‹œ ํ•œ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค. ์›ํ•˜๋Š” ์œ„์น˜์— ์‚ฝ์ž…์„ ํ•˜๊ณ ์ž ํ•˜๋ฉด ์›ํ•˜๋Š” ์œ„์น˜๋ฅผ ๊ฒ€์ƒ‰๊ณผ์ •์— ์žˆ์–ด์„œ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ๋‹ค ํ™•์ธํ•ด๋ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Array์™€๋Š” ๋‹ฌ๋ฆฌ ๋…ผ๋ฆฌ์  ์ €์žฅ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ €์žฅ์ˆœ์„œ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๊ฒƒ์€ ์ผ๋‹จ ์‚ฝ์ž…ํ•˜๊ณ  ์ •๋ ฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

  • ์ด ๊ณผ์ • ๋•Œ๋ฌธ์— ์–ด๋–คํ•œ ์›์†Œ๋ฅผ ์‚ญ์ œ ๋˜๋Š” ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ–ˆ์„๋•Œ, ๊ทธ ์›์†Œ๋ฅผ ์ฐพ๊ธฐ์œ„ํ•ด ์‹œ๊ฐ„์ด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

์„ ํ˜•์ž๋ฃŒ๊ตฌ์กฐ์ง€๋งŒ ์—ฐ์†๋œ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค์„ฏ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ๊ฐ ๋–จ์–ด์ ธ ์žˆ๋‹ค. Linked-List ์ด๋Ÿฐ ๊ตฌ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š”? ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์Œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ์ฃผ์†Œ๋ฅผ ํ•จ๊ป˜ ๊ธฐ์–ตํ•œ๋‹ค Next๋ผ๋Š” ๋ฉค๋ฒ„์— ๋‹ค์Œ Node์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋–จ์–ด์ ธ์žˆ๋Š” ๊ณต๊ฐ„์ด์ง€๋งŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”๊ฒƒ ์ฒ˜๋Ÿผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

class Node {
    int data;
    Node next;
}

Linked-List2

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ˆœํšŒ

Linked-List-traversal

class LinkedList{
    Node head;
}
  • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ์ฒซ ๋…ธ๋“œ์ธ Head๋…ธ๋“œ๋ฅผ ๊ธฐ์–ตํ•œ๋‹ค.
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•ด์„  ์ฒซ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊นŒ์ง€ Next๋ฅผ ํ™•์ธํ•˜๋ฉฐ ์ด๋™ํ•ด์•ผํ•œ๋‹ค.
  • ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๋Š”๋ฐ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋Š” ๋‹ค์Œ ๋…ธ๋“œ๊ฐ€ ์—†๊ธฐ๋•Œ๋ฌธ์— Null๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ ์žˆ๋‹ค.
  • ๋งŒ์•ฝ Next๊ฐ€ Null์ด๋ผ๋ฉด ํ˜„์žฌ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์ด๊ธฐ๋•Œ๋ฌธ์— ์ˆœํšŒ๋ฅผ ๋งˆ์น  ์ˆ˜ ์žˆ๋‹ค.

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ถ”๊ฐ€

๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ๋ฆ„์ด๋‹ค . 1๊ณผ 3์‚ฌ์ด์— 2๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ์‹ถ๋‹ค. ๋ฐฐ์—ด์€ ๊ฐ’์„ ์ถ”๊ฐ€ํ• ๋ ค๋ฉด ๋’ค์— ๊ฐ’์„ ๋ฐ€์–ด๋‚ด์•ผ ํ•œ๋‹ค. 2๋ฅผ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  Node์— Next๋งŒ ๋ฐ”๊พธ๋ฉด ๋˜๊ฒŒ ๋•Œ๋ฌธ์— ์‰ฌ์šด ์ƒํ™ฉ์ด๋‹ค. ๋‹ค์‹œ ์„ค๋ช… ํ•˜์ž๋ฉด. 2๋ผ๋Š” ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ƒˆ๋กœ์šด ๋…ธ๋“œ์˜ Head๊ฐ€ Next๋ฅผ ๋ณด๊ฒŒ ๋งŒ๋“ค๊ณ  Head๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๋ณด๊ฒŒ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค. Linked-List-Plus

์ฒ˜์Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ์ƒํ™ฉ์€ ๋” ์‰ฝ๋‹ค. ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ํ˜„์žฌ Head๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋งŒ๋“ค๊ณ  Head๋ฅผ ์˜ฎ๊ฒจ์ฃผ๋ฉด๋œ๋‹ค. Linked-List-First

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์‚ญ์ œ

์‚ญ์ œ๋„ ๋น„์Šทํ•˜๊ฒŒ Next๋ฅผ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค. 2๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์œผ๋ฉด, 1Head์˜ Next๋ฅผ ๋‹ค์Œ ๋‹ค์Œ 3์„ ๋ฐ”๋ผ๋ณด๊ฒŒ ๋งŒ๋“ค๊ณ  ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ๋œ๋‹ค. Linked-List-FirstDelete

์›ํ˜• ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์ฒ˜์Œ์— ์†Œ๊ฐœํ•œ ๊ธฐ๋ณธ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ์กฐํšŒํ•˜๋ ค๋ฉด Next๋ฅผ ํƒ€๊ณ ํƒ€๊ณ  ๊ฐ€์•ผ ํ–ˆ์—ˆ๋Š”๋ฐ ์ด ๋ฐฉ์‹์ด ๋น„ํšจ์œจ์ ์ด๋ผ ๊ฐœ์„ ์„ ํ•œ๊ฒŒ ์›ํ˜• ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์ด๋‹ค.
์›ํ˜•์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๋ญ๋ฅผ ๋ฐ”๋ผ๋ณด๋“  ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ Next๋ฅผ ์ฒ˜์Œ ๋…ธ๋“œ๋ฅผ ๋ฐ”๋ผ๋ณด๊ฒŒ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋˜ ํ•˜๋‚˜ Head๋Œ€์‹ ์— ๋งˆ์ง€๋ง‰๋…ธ๋“œ์ธ tail์„ ๊ธฐ์–ตํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉด Tail๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋˜๊ณ , ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋ฉด Tail์˜ Next๋ฅผ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.
๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ๋กœ ์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰์„ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

CircularLinkedList{
    Node Tail;
}

Circular-Linked-List

์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ / ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

๋˜ ๋‹ค๋ฅธ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฒ„์ „์œผ๋กœ ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋˜๋Š” ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ผ ๋ถ€๋ฅธ๋‹ค. ์‚ฌ์ง„์—์„œ ๋ณด์ด๋“ฏ ๋‹ค์Œ ๋…ธ๋“œ์ธ Next๋ฟ๋งŒ ์•„๋‹ˆ๋ผ previous๋„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ์•ž ๋’ค๋กœ ์™”๋‹ค๊ฐ”๋‹ค ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŽธ๋ฆฌํ•˜๋‹ค.

ํ•˜๋‚˜๋งŒ ์˜ˆ๋กœ ๋“ค์ž๋ฉด ์—ญ์ˆœ์œผ๋กœ ์ˆœํšŒ๋ฅผ ํ•˜๊ณ  ์‹ถ์€๊ฒฝ์šฐ์ด๋‹ค. ๋‹จ๋ฐฉํ–ฅ์ด์˜€๋‹ค๋ฉด ๋’ค๋กœ ๊ฐˆ ์ˆ˜๊ฐ€ ์—†์–ด์„œ ๋ถˆ๊ฐ€๋Šฅํ•œ์ผ์ธ๋ฐ, ์–‘๋ฐฉํ–ฅ์ด๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค. Doubly-Linked-List

class Node{
    int data;
    Node next;
    Node previous;
}

๋™์ ๋ฐฐ์—ด VS ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋” ์ข‹์•„๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๋™์ ๋ฐฐ์—ด์„ ๋” ๋งŽ์ด ์“ด๋‹ค.

  • ์กฐํšŒ๊ฐ€ ๋Š๋ฆฌ๋‹ค.
  • ์ค‘๊ฐ„์— ์ถ”๊ฐ€, ์‚ญ์ œ ํ•˜๋Š” ๋™์ž‘๋„ ํƒ€๊ณ  ๊ฐ€์•ผํ•˜๋Š” ๋น„์šฉ์ด ์žˆ๋‹ค.
  • ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ธฐ์–ตํ•˜๋Š”๋ฐ ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํผ์ ธ ์žˆ์œผ๋ฏ€๋กœ ์บ์‹œ์˜ ํšจ๊ณผ๋ฅผ ๋ˆ„๋ฆฌ์ง€ ๋ชปํ•œ๋‹ค.

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ์žฆ์€ ์ถ”๊ฐ€์™€ ์‚ญ์ œ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
  • ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ณต๋ถ€ํ•˜๋Š” ๊ธฐ๋ฐ˜์˜ ์ง€์‹์ด ๋œ๋‹ค.

Stack

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…์œผ๋กœ Last In First Out(ํ›„์ž…์„ ์ถœ) ์ฆ‰, ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜จ๋‹ค. ์ด๊ฒƒ์€ Stack์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์ด๋‹ค. ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์ด๋Š” ๊ตฌ์กฐ๋กœ ๋จผ์ € Stack์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ ์›์†Œ๋Š” ๋งจ ๋ฐ”๋‹ฅ์— ๊น”๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋Šฆ๊ฒŒ ๋“ค์–ด๊ฐ„ ๋…€์„๋“ค์€ ๊ทธ ์œ„์— ์Œ“์ด๊ฒŒ ๋˜๊ณ  ํ˜ธ์ถœ๊ธฐ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋…€์„์ด ํ˜ธ์ถœ๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

  • ์Šคํƒ์„ ํ™œ์šฉํ•œ ๋ฏธ๋กœ ๋งŒ๋“ค๊ธฐ : Stack-Maze

![Stack](img/Stack.jpg)
๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด 1, 2, 3 ์ด ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ๋Š” ์œ„์— ์ƒ๊ธฐ๊ณ  ์ด๋ฅผ push๋ผ ํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋‚˜์ค‘์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜๊ฐ€๋Š” ์—ฐ์‚ฐ์„ pop์ด๋ผ ํ•œ๋‹ค. ๋‚˜์ค‘์— ๋“ค์–ด์˜จ 5๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ„๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. Stack๋Š” ์ฃผ๋กœ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

Queue

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…์œผ๋กœ First In First Out(์„ ์ž…์„ ์ถœ) ์ฆ‰, ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋†ˆ์ด ๋จผ์ € ๋‚˜์˜จ๋‹ค. Stack๊ณผ๋Š” ๋ฐ˜๋Œ€๋กœ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋†ˆ์ด ๋งจ ์•ž์—์„œ ๋Œ€๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๊ฒŒ ๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. ์ฐธ๊ณ ๋กœ Java Collection์—์„œ Queue๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š” Priorty queue๋“ฑ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
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();
    }
}

Tree

ํŠธ๋ฆฌ๋Š” ์Šคํƒ์ด๋‚˜ ํ์™€ ๊ฐ™์€ ์„ ํ˜• ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํŠธ๋ฆฌ๋Š” ๊ณ„์ธต์  ๊ด€๊ณ„(Hierarchical Relationship)์„ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. Tree

ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๊ตฌ์„ฑ์š”์†Œ๋“ค(์šฉ์–ด)

  • Node (๋…ธ๋“œ) : ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๊ฐ๊ฐ์˜ ์š”์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • Edge (๊ฐ„์„ ) : ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋“œ์™€ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ์„ ์˜๋ฏธํ•œ๋‹ค.
  • Root Node (๋ฃจํŠธ ๋…ธ๋“œ) : ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ์ตœ์ƒ์œ„์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • leaf Node (๋‹จ๋ง ๋…ธ๋“œ) : ํ•˜์œ„์— ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • Internal Node (๋‚ด๋ถ€๋…ธ๋“œ, ๋น„๋‹จ๋ง ๋…ธ๋“œ) : ๋‹จ๋ง ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋กœ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • Sub Tree (์„œ๋ธŒ ํŠธ๋ฆฌ) : ํŠธ๋ฆฌ๋‚ด์— ๋˜ ๋‹ค๋ฅธ ํŠธ๋ฆฌํ˜•ํƒœ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • Degree (๋…ธ๋“œ์˜ ์ฐจ์ˆ˜) : ๊ฐ ๋…ธ๋“œ์—์„œ ๋ป—์–ด๋‚˜์˜จ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜
  • Depth (๋…ธ๋“œ๊ฐ„์˜ ๊ฑฐ๋ฆฌ) : ๋ฃจํŠธ์—์„œ ํŠน์ • ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜
  • Level : ํŠธ๋ฆฌ์—์„œ ๋‚˜ํƒ€๋‚ด๋Š” ๋†’์ด

ํŠธ๋ฆฌ์˜ ์ •์˜๋ฅผ ํ•œ ๋ฌธ์žฅ์œผ๋กœ ์š”์•ฝํ•˜์ž๋ฉด ํ•œ๊ฐœ์ด์ƒ์˜ ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ์ดํด์ด ์—†๋Š” ์—ฐ๊ฒฐ๊ทธ๋ž˜ํ”„๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋…ธ๋“œ๊ฐ€ ๋  ์ˆ˜ ์—†๋Š” ์กฐ๊ฑด

NoTree
์™ผ์ชฝ ์‚ฌ์ง„์€ ์‚ฌ์ดํด์ด ๋Œ์•„์„œ ํŠธ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์—†๊ณ  ์˜ค๋ฅธ์ชฝ ์‚ฌ์ง„์€ ์—ฐ๊ฒฐ๊ทธ๋ž˜ํ”„๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ํŠธ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํŠธ๋ฆฌ๊ฐ€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ณ„์ธต์ด ํ•„์š”ํ•œ ๊ตฌ์กฐ์—์„œ ์“ฐ์ธ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์กฐ์ง๋„๋ผ๋˜๊ฐ€ ํŒŒ์ผ์‹œ์Šคํ…œ์ด๋‹ค.

ํŠธ๋ฆฌ์˜ ์„ฑ์งˆ

  • ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ N๊ฐœ๋ผ๋ฉด, ์—ฃ์ง€์˜ ๊ฐœ์ˆ˜๋Š” ํ•ญ์ƒ N-1๊ฐœ์ด๋‹ค.
  • ๋…ธ๋“œ๋ฅผ ์ค‘๋ณตํ•ด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์œผ๋ฉด, ๋…ธ๋“œ๊ฐ„์˜ ๊ฒฝ๋กœ๋Š” ์œ ์ผํ•˜๋‹ค.
  • ๊ท ํ˜•์ด ์žกํ˜€์žˆ์œผ๋ฉด ํƒ์ƒ‰์—0์˜ ์ˆ˜ํ–‰์†๋„๋ฅผ ๊ฐ€์ง„๋‹ค.

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

๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋‘ ๊ฐœ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ(ํฐ ํŠธ๋ฆฌ์— ์†ํ•˜๋Š” ์ž‘์€ ํŠธ๋ฆฌ)๋กœ ๋‚˜๋‰˜์–ด ์ง„๋‹ค. ๋˜ํ•œ ๋‚˜๋‰˜์–ด์ง„ ๋‘ ์„œ๋ธŒ ํŠธ๋ฆฌ๋„ ๋ชจ๋‘ ์ด์ง„ ํŠธ๋ฆฌ์–ด์•ผ ํ•œ๋‹ค. ์žฌ๊ท€์ ์ธ ์ •์˜๋ผ ๋งž๋Š”๋“ฏ ํ•˜๋ฉด์„œ๋„ ์ดํ•ด๊ฐ€ ์‰ฝ์ง€ ์•Š์„ ๋“ฏํ•˜๋‹ค. ํ•œ ๊ฐ€์ง€ ๋ง๋ถ™์ด์ž๋ฉด ๊ณต์ง‘ํ•ฉ๋„ ์ด์ง„ ํŠธ๋ฆฌ๋กœ ํฌํ•จ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ์žฌ๊ท€์ ์œผ๋กœ ์กฐ๊ฑด์„ ํ™•์ธํ•ด๊ฐ”์„ ๋•Œ, leaf node ์— ๋‹ค๋‹ค๋ž์„ ๋•Œ, ์ •์˜๊ฐ€ ๋งŒ์กฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜ ๋ฟ์ธ ๊ฒƒ๋„ ์ด์ง„ ํŠธ๋ฆฌ ์ •์˜์— ๋งŒ์กฑํ•˜๊ฒŒ ๋œ๋‹ค.
Binary-Tree Binary-Tree2
๋‹ค์‹œ ๋ง ํ•˜์ž๋ฉด ํŠธ๋ฆฌ๋Š” ํ•œ ๋ถ€๋ชจ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ž์‹์„ 1๊ฐœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ  2๊ฐœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , 3๊ฐœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ง„ํŠธ๋ฆฌ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ 2๊ฐœ์ดํ•˜์˜ ์ž์‹๋งŒ ๊ฐ–๋Š” ํŠธ๋ฆฌ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ ์ด์ง„ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” ์ตœ๋Œ€ N์ด๊ฑฐ๋‚˜ ์ตœ์†Œ log2(n+1)์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅด๊ฒŒ ๋งํ•˜๋ฉด ์ด์ง„ํŠธ๋ฆฌ์•ˆ์˜ ์›์†Œ๋ฅผ ์ ‘๊ทผํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ตœ๋Œ€์‹œ๊ฐ„์ด N์ด๊ฑฐ๋‚˜ log2(n+1)์ด ๋ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ด๋‹ค. N์ด ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์™ผ์ชฝ๊ณผ ๊ฐ™์ด ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ ํ˜•ํƒœ์ด๊ณ , log2(n+1)์ด ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์˜ค๋ฅธ์ชฝ๊ณผ ๊ฐ™์ด ๊ท ํ˜•์ด ์žกํžŒ ํ˜•ํƒœ์ด๋‹ค. MinHeight
๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜(N)๋Š” 3๊ฐœ์ด๋‹ค. N+1์ด 4๊ฐœ์ด๋ฉด ๋†’์ด๋Š” log2(4) = 2 ์ฆ‰ 2๊ฐ€ ๋˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

MinHeight2
๋…ธ๋“œ๊ฐ€ 7๊ฐœ์ธ๊ฒƒ๋„ ๋ณด๋ฉด ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜(N)์€ 7์ด๋‹ค. N+1 = 8์ด ๋˜๋ฏ€๋กœ log2(8)์€ 2์˜3์Šน์ด๋ฏ€๋กœ ๋†’์ด๊ฐ€ 3์ด ๋œ๋‹ค.

  • ๊ท ํ˜• ํŠธ๋ฆฌ (Balanced) Balanced

* ๋ถˆ๊ท ํ˜• ํŠธ๋ฆฌ (UnBalanced) ![UnBalanced](img/UnBalanced.jpg)
* ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ (Complete Binary Tree) ![Complete](img/Complete.jpg)
์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋Š” ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ๋ ˆ๋ฒจ์ด ์™„์ „ํžˆ ์ฑ„์›Œ์ ธ ์žˆ์œผ๋ฉฐ ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ๊ฐ€๋Šฅํ•œ ์™ผ์ชฝ์— ๋ถ™์–ด์žˆ๋Š” ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์˜ค๋ฅธ์ชฝ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๊ท ํ˜•์žกํžŒ ํŠธ๋ฆฌ์ด์ง€๋งŒ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฑ„์›Œ์ง€์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค. * ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ (Perfect Binary Tree) ๋ชจ๋“  ๋ ˆ๋ฒจ์ด ๊ฝ‰ ์ฐฌ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌ์ผœ ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค. ![Perfect](img/Perfect.jpg)

์ด์ง„ํŠธ๋ฆฌ์˜ ์ˆœํšŒ ๋ฐฉ์‹

  • ์ „์œ„ (Pre Order)
  • ์ค‘์œ„ (In Order)
  • ํ›„์œ„ (Post Order)
  • ๋ ˆ๋ฒจ (Level Order) Order

์ „์œ„ / ์ค‘์œ„ / ํ›„์œ„ ์ˆœํšŒ๋Š” ๋ถ€๋ชจ๋ฅผ ์–ธ์ œ ๋ฐฉ๋ฌธํ•˜๋Š”์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๋Š”๋‹ค. ์ „์œ„ ์ˆœํšŒ๋Š” ๋ถ€๋ชจ๋ฅผ 1์ˆœ์œ„๋กœ ๋ฐฉ๋ฌธํ•˜๊ณ , ์ค‘์œ„ ์ˆœํšŒ๋Š” ๋ถ€๋ชจ๋ฅผ 2์ˆœ์œ„, ํ›„์œ„ ์ˆœํšŒ๋Š” 3์ˆœ์œ„๋กœ ๋ฐฉ๋ฌธํ•œ๋‹ค. ๋ ˆ๋ฒจ ์ˆœํšŒ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ ˆ๋ฒจ ์ˆœ์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

BST (Binary Search Tree) - ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ํŠน๋ณ„ํ•œ ์„ฑ์งˆ์„ ๋งŒ์กฑํ•˜๋Š” ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ง ํ•˜๋Š” ํŠน๋ณ„ํ•œ ์„ฑ์งˆ์€ ์™ผ์ชฝ ์ž์‹์€ ๋ถ€๋ชจ๋ณด๋‹ค ์ž‘๊ณ , ์˜ค๋ฅธ์ชฝ ์ž์‹์€ ๋ถ€๋ชจ๋ณด๋‹ค ํฌ๋‹ค๋Š” ์„ฑ์งˆ์„ ๋งํ•œ๋‹ค. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐํƒ์ƒ‰์„ ํšจ์œจ์ ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๊ฐ€ ์ฐพ๋Š” ๊ฐ’๋ณด๋‹ค ๋” ํฌ๊ฑฐ๋‚˜ ์ž‘์€์ง€ ํŒ๋ณ„ํ•˜๋ฉด์„œ ๋‚ด๋ ค๊ฐ€๋ฉด ์„ ํ˜•์‹œ๊ฐ„์ด๋˜ ํƒ์ƒ‰ ์ˆ˜ํ–‰์†๋„๋ฅผ ๋กœ๊ทธ์‹œ๊ฐ„์œผ๋กœ ์ค„์ผ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์„ฑ์งˆ

  • ์ค‘๋ณต๋œ ๊ฐ’์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰ ํ‚ค๊ฐ’์€ ์œ ์ผํ•˜๋‹ค.
  • ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  • ์‚ฝ์ž…
    • ์‚ฝ์ž…ํ•˜๋ ค๋Š” ์„ฑ์งˆ์—์„œ ๋ถ€๋ชจ๋ณด๋‹ค ๊ฐ’์ด ์ž‘์œผ๋ฉด ์™ผ์ชฝ, ๊ฐ’์ด ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ๋œ๋‹ค. Search

* ์‚ญ์ œ * ์ง€์šฐ๋Š” ๋…ธ๋“œ๊ฐ€ ์ž์‹์ด ์—†๋Š” ๊ฒฝ์šฐ - ๊ทธ๋ƒฅ ์ง€์šฐ๋ฉด ๋œ๋‹ค. * ์ง€์šฐ๋Š” ๋…ธ๋“œ๊ฐ€ ์ž์‹์ด 1๊ฐœ์ธ ๊ฒฝ์šฐ - ์ž์‹์ด ๋ถ€๋ชจ์˜ ์œ„์น˜๋ฅผ ๋Œ€์‹ ํ•œ๋‹ค. * ์ง€์šฐ๋Š” ๋…ธ๋“œ์˜ ์ž์‹์ด 2๊ฐœ๊ฐ€ ์žˆ๋Š”๊ฒฝ์šฐ - ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ์„ฑ์งˆ์„ ์ƒ๊ฐํ•˜๋ฉด ๋ถ€๋ชจ๋ณด๋‹ค ์ž‘์€๊ฐ’์€ ์™ผ์ชฝ ํฐ ๊ฐ’์€ ์˜ค๋ฅธ์ชฝ์— ๊ฐ€๋ฉด๋œ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ํƒ์ƒ‰ ์—ฐ์‚ฐ์€ O(log n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์‚ฌ์‹ค ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด O(h)๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค. ํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ ํ•˜๋‚˜์”ฉ ๋”ํ•ด๊ฐˆ์ˆ˜๋ก ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋‘ ๋ฐฐ์”ฉ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” Skewed Tree(ํŽธํ–ฅ ํŠธ๋ฆฌ)๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ €์žฅ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ณ„์† ํ•œ ์ชฝ์œผ๋กœ๋งŒ ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋˜๋ฉฐ, ํƒ์ƒ‰์˜ Worst Case ๊ฐ€ ๋˜๊ณ  ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋น…์˜คํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋”ฐ์กŒ์„๋•Œ O(n)์ด ๋œ๋‹ค.

๋ฐฐ์—ด๋ณด๋‹ค ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ–ˆ์ง€๋งŒ ํƒ์ƒ‰์— ํ•„์š”ํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๊ฐ™๊ฒŒ ๋˜๋Š” ๋น„ํšจ์œจ์ ์ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Rebalancing ๊ธฐ๋ฒ•์ด ๋“ฑ์žฅํ•˜์˜€๋‹ค. ๊ท ํ˜•์„ ์žก๊ธฐ ์œ„ํ•œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ์žฌ์กฐ์ •์„ Rebalancing์ด๋ผ ํ•œ๋‹ค.

Heap

Heap
๋ถ€๋ชจ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ž์‹๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜(์ž‘๊ฑฐ๋‚˜)๊ฐ™์€ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ ํ˜น์€ ํฌํ™” ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค. ํž™ํŠธ๋ฆฌ๋Š” ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์™€ ๋น„์Šทํ•œ ํ˜•ํƒœ์ด์ง€๋งŒ ์ž์‹๊ณผ ๋ถ€๋ชจ์‚ฌ์ด์˜ ๋Œ€์†Œ๊ด€๊ณ„๊ฐ€ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์™€๋Š” ๋‹ค๋ฅด๋‹ค. ๋ถ€๋ชจ๋…ธ๋“œ๊ฐ€ ์ž์‹๋…ธ๋“œ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด Heap, ๋ถ€๋ชจ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์œผ๋ฉด ์™ผ์ชฝ, ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ์ด๋ฉด ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ํฐ ๊ฐ’, ๊ฐ€์žฅ ์ž‘์€๊ฐ’ ์™ธ์—๋Š” ํŠน์ • ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค. ๋ถ€๋ชจ๋…ธ๋“œ๋Š” ์ž์‹๋…ธ๋“œ๋ณด๋‹ค ์ž‘๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๊ธฐ์— ํƒ์ƒ‰ํ•ด์„œ ๋“ค์–ด๊ฐ€๋Š”๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

  • ์‚ฝ์ž… : ์‹ ๊ทœ ์ง์›์„ ๋ง๋‹จ์— ์œ„์น˜์‹œํ‚จ๋’ค, ์Šน์ง„
  • ์‚ญ์ œ : ๋ง‰๋‚ด ์ง์›์„ ๋น„์–ด์žˆ๋Š” ์ด์‚ฌ์ง์— ์˜ฌ๋ฆฐ ๋’ค ๊ฐ•๋“ฑ ์‹œํ‚จ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

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

BST vs HEAP

BST๋Š” ํŠน์ •์›์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์ „์ฒด๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์ค‘์œ„์ˆœํšŒ๋ฅผ ํ†ตํ•ด ์ถ”๊ฐ€์ ์ธ ์ •๋ ฌ์ž‘์—… ์—†์ด ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ  ์ค‘๋ณต๋œ ์›์†Œ์˜ ์‚ฝ์ž…์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

HEAP์€ ๋ถ€๋ชจ๊ฐ€ ๋‹จ์ˆœํžˆ ์ž์‹๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ํฌ๊ฑฐ๋‚˜ ํ•˜๋Š” ์„ฑ์งˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ •์›์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ์›์†Œ์— ์ ‘๊ทผํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๋ฃจํŠธ์˜ ๋…ธ๋“œ๋งŒ ๋ณด๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— O(1)์˜ ์‹œ๊ฐ„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต๋œ ์›์†Œ์˜ ์‚ฝ์ž…์„ ํ—ˆ์šฉํ•œ๋‹ค.

  • ํŠธ๋ฆฌ ์ฐธ๊ณ  ์˜์ƒ : Tree
  • ํŠธ๋ฆฌ ์ฐธ๊ณ  ์˜์ƒ : Tree2