Data Structures

Array & ArrayList & LinkedList

Array์™€ LinkedList์˜ ๋น„๊ต์ด๋‹ค.

โœจ Array

  • ๋ฐฐ์—ด์ด๋ฉฐ, ๋…ผ๋ฆฌ์  ์ €์žฅ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ €์žฅ์ˆœ์„œ๊ฐ€ ์ผ์น˜ํ•œ๋‹ค.

  • ํŠน์ • ์ž๋ฃŒํ˜•๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ƒ์—์„œ ์—ฐ์†์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

  • immutableํ•˜๋‹ค.

  • ์ธ๋ฑ์Šค๋กœ ํ•ด๋‹น ์›์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ธ๋ฑ์Šค๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์›์†Œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, Random Access๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ์‚ญ์ œ ๋˜๋Š” ์‚ฝ์ž… ๊ณผ์ •์—์„œ๋Š” ํ•ด๋‹น ์›์†Œ์— ์ ‘๊ทผํ•˜์—ฌ ์ž‘์—…์„ ์™„๋ฃŒํ•œ ๋’ค, shiftํ•ด์ค˜์•ผ ํ•˜๋ฏ€๋กœ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. O(n)

  • ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ™œ์šฉ์— ์ œ์•ฝ์ด ์žˆ๋‹ค.

โœจ LinkedList

  • ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ์‹œ ์ฒ˜์Œ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœํšŒํ•ด์•ผ ํ•œ๋‹ค. ์ด์œ ๋Š” ๋…ผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. O(n)

  • ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ƒ์—์„œ ๊ฐ ๋…ธ๋“œ๋“ค์ด ์—ฐ์†์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์ง€ ์•Š๊ณ  ํฉ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ์˜ ๋‹ค์Œ ๋…ธ๋“œ์˜ ์œ„์น˜๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ํ˜•ํƒœ์ด๋‹ค.

  • ๊ฐ ๋…ธ๋“œ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์ƒ์˜ ์–ด๋””์— ์œ„์น˜ํ•˜๋Š”์ง€๋Š” ๊ฐ๊ฐ์˜ ๋…ธ๋“œ๋“ค๋งŒ ์•Œ๊ณ  ์žˆ๊ณ , ์‚ฌ์šฉ์ž๋Š” ์ œ์ผ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ์˜ ์œ„์น˜๋งŒ ์•Œ๊ณ  ์žˆ๋Š” ์ƒํƒœ์ด๋‹ค.

  • ์–ด๋–ค ์›์†Œ๋ฅผ ์‚ฝ์ž…, ์‚ญ์ œ ์‹œ ๊ทธ ์›์†Œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด O(n)์˜ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ์‹œ๊ฐ„๊นŒ์ง€ O(n)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

  • ๊ฒฐ๊ตญ, LinkedList๋Š” ๊ฒ€์ƒ‰๊ณผ ์‚ฝ์ž…, ์‚ญ์ œ ๊ณผ์ • ๋ชจ๋‘ O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

โœจ Dynamic Array(ArrayList)

  • ์ด๋ฆ„์ฒ˜๋Ÿผ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

  • ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์— ์ ํ•ฉํ•˜๊ณ  ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

    • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(1)

  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ ์‹œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด ๋ณต์‚ฌํ•˜๋ฏ€๋กœ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•  ๊ฒฝ์šฐ ์†๋„๊ฐ€ ๋А๋ฆฌ๋ฉฐ ๋ถ€์ ํ•ฉํ•˜๋‹ค.

    • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)

  • ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ Vector๋ณด๋‹ค ๋น ๋ฅด๋‹ค.

โœจ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„

  • Array

    • ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.

    • Random Access๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • LinkedList

    • ํŠน์ • ์›์†Œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋‹ค.

โœจ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์†๋„

  • Array

    • ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๊ฐ„์ด๋‚˜ ๋งจ ์•ž์— ์‚ฝ์ž…ํ•  ๊ฒฝ์šฐ, ์ดํ›„์˜ ๋ฐ์ดํ„ฐ๋ฅผ Shiftํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ถ”๊ฐ€ ๊ณผ์ •๊ณผ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.

    • ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ, ๋น„ํšจ์œจ์ ์ด๋‹ค.

    • O(N)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

  • LinkedList

    • ์ค‘๊ฐ„ ์‚ฝ์ž… ์—†์ด ๋งจ ์•ž๊ณผ ๋งจ ๋’ค์—๋งŒ ์‚ฝ์ž…ํ•œ๋‹ค๋ฉด O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

    • ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ์ฐพ๊ณ (O(N))๊ณผ ์‚ฝ์ž… ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

    • ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Array๋ณด๋‹ค ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๊ฐ–๋Š”๋‹ค.

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

โœจ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์†๋„

  • Array

    • ๋ฐ์ดํ„ฐ ์‚ญ์ œ์˜ ๊ฒฝ์šฐ, ๊ทธ ์œ„์น˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ ํ›„ ์ „์ฒด์ ์œผ๋กœ Shiftํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

  • LinkedList

    • ์‚ญ์ œํ•  ์›์†Œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๊ณ  ์‚ญ์ œํ•œ๋‹ค. ํ•˜์ง€๋งŒ, Array๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์‚ญ์ œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

โœจ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

  • Array

    • ๋ฉ”๋ชจ๋ฆฌ์—๋Š” Array๊ฐ€ ์„ ์–ธ๋˜์ž ๋งˆ์ž Compile time์— ํ• ๋‹น๋˜์–ด ์ง„๋‹ค.

    • ์ •์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • LinkedList

    • ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด Node๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ runtime์— ํ• ๋‹น๋˜์–ด ์ง„๋‹ค.

    • ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด๋ผ๊ณ  ํ•œ๋‹ค.

โœจ ๊ฒฐ๋ก 

  • ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚œ๋‹ค๋ฉด LinkedList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚œ๋‹ค๋ฉด Array๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

  • ๋ฐ์ดํ„ฐ์˜ ๊ฒ€์ƒ‰์ด ์ฃผ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” Dynamic Array(ArrayList)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.

  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋‹ค๋ฉด Dynamic Array(ArrayList)๋ณด๋‹ค๋Š” LinkedList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๋‚ซ๋‹ค.

Stack & Queue (์Šคํƒ & ํ)

์Šคํƒ๊ณผ ํ๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

โœจ Stack

  • ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค.

  • LIFO(Last in First Out)์˜ ๊ตฌ์กฐ.

  • ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์Šคํƒ์ด ์‚ฌ์šฉ๋œ๋‹ค.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)

  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)

  • ์–ธ์ œ ์‚ฌ์šฉ? ํ•จ์ˆ˜์˜ ์ฝœ ์Šคํƒ, ๋ฌธ์ž์—ด ์—ญ์ˆœ ์ถœ๋ ฅ, ์—ฐ์‚ฐ์ž ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ๋“ฑ

โœจ Queue

  • ๋จผ์ € ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค.

  • FIFO(First in First out)์˜ ๊ตฌ์กฐ.

  • ํ๋Š” ํ™œ์šฉ ๋ถ„์•ผ๊ฐ€ ๋˜๊ฒŒ ๋งŽ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ฒฝ์šฐ, ๋ฃจํผ์˜ ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ์˜ˆ์‹œ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n)

  • ๊ณต๊ฐ„ ๋ณต์žก๋„ : O(n)

  • ์–ธ์ œ ์‚ฌ์šฉ? ๋ฒ„ํผ, ๋งˆ๊ตฌ ์ž…๋ ฅ๋œ ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ, bfs ํƒ์ƒ‰ ๋“ฑ

โœจ 2๊ฐœ์˜ ์Šคํƒ์œผ๋กœ ํ ๊ตฌํ˜„

๊ฐ€๋” ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฉด์ ‘์—์„œ ๋‚˜์˜จ๋‹ค๊ณ  ํ•œ๋‹ค. ์–ด๋ ต๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. inbox์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค(push) -> A,B

  2. inbox์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ(pop)ํ•˜์—ฌ outbox์— ์‚ฝ์ž…(push) ํ•œ๋‹ค. -> B,A

  3. outbox์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ(pop)ํ•œ๋‹ค. -> A,B ์ˆœ์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

์ฆ‰, inbox ์Šคํƒ์— A,B ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋ฉด ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์Šคํƒ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  inbox ์Šคํƒ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ popํ•ด์„œ outbox๋กœ ์˜ฎ๊ธด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด outbox์—๋Š” B,A ์ˆœ์„œ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ธ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ outbox ์Šคํƒ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ popํ•˜๊ฒŒ ๋˜๋ฉด A,B ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

โœจ Stack ๊ตฌํ˜„

TODO

โœจ Queue ๊ตฌํ˜„

TODO

Tree(ํŠธ๋ฆฌ)

โœจ ํŠธ๋ฆฌ์˜ ๊ฐœ๋…

ํŠธ๋ฆฌ๋ผ๋Š” ์ด๋ฆ„์ด ๋‚˜์˜จ ์ด์œ ๋Š” ์‹ค์ œ ๋‚˜๋ฌด๋ฅผ ๊ฑฐ๊พธ๋กœ ์„ธ์›Œ๋†“์€ ๋“ฏํ•œ ๋ชจ์–‘์ด๋ผ์„œ ํŠธ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ ๋“ฑ๋„ ์กด์žฌํ•˜์ง€๋งŒ, ํŠธ๋ฆฌ๊ฐ€ ๋‚˜์˜จ ์ด์œ ๋Š” ๋ญ˜๊นŒ?

์ผ๋ฐ˜ ๋ฐฐ์—ด์—์„œ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๋ฅผ ํ•˜๋Š”๋ฐ O(N)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์š”์†Œ๋“ค์„ ํ•œ ์นธ์”ฉ ๋’ค๋กœ ๋ฏธ๋ค„์•ผ ํ•˜๋ฏ€๋กœ ์ตœ์•…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N)์ด ๋‚˜์˜จ๋‹ค. ํ•˜์ง€๋งŒ, ํŠธ๋ฆฌ๋Š” ํŽธํ–ฅ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์ด์ƒ ์ผ๋ฐ˜์ ์ธ ํŠธ๋ฆฌ์—์„œ๋Š” O(log N) ์ •๋„์˜ ์‹œ๊ฐ„์œผ๋กœ ์ค„์—ฌ์ง„๋‹ค.

๋˜ํ•œ ํŠธ๋ฆฌ๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ด๋ฃจ๋Š” ๊ฒฝ์šฐ์— ๊ต‰์žฅํžˆ ์ข‹๋‹ค.

ํšŒ์‚ฌ์˜ ์กฐ์ง๋„๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋งจ ์œ„์— ํšŒ์žฅ๋‹˜, ์‚ฌ์žฅ๋‹˜์ด ์žˆ๊ณ , ๋ถ€์„œ๋ณ„, ํŒ€๋ณ„๋กœ ๊ฐ๊ฐ ํŠธ๋ฆฌ๊ฐ€ ์ƒ๊ธธ ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ, ์›ํ•˜๋Š” ๋ถ€์„œ๋ฅผ ํƒ€๊ณ  ๋‚ด๋ ค๊ฐ€๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๋‹ค๋ฅธ ์ž๋ฃŒ ๊ตฌ์กฐ๋ณด๋‹ค ์ฐพ๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฌ์šธ ๊ฒƒ์ด๋‹ค.

โœจ ํŠน์ง•

  • Tree๋Š” Stack์ด๋‚˜ Queue์™€ ๊ฐ™์ด ์„ ํ˜• ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

  • ๊ณ„์ธต์  ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋งŒ์„ ๊ฐ–๋Š”๋‹ค.

โœจ ํŠธ๋ฆฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ

  • Node : ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ ์š”์†Œ.

  • Edge : ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋“œ์™€ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ .

  • Root Node : ํŠธ๋ฆฌ ๊ตฌ์กฐ์—์„œ ์ตœ์ƒ์œ„์— ์žˆ๋Š” ๋…ธ๋“œ.

  • Terminal Node : ํ•˜์œ„์— ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋…ธ๋“œ.

  • Internal Node : ๋‹จ๋ง ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋กœ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

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

  • ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋‘ ๊ฐœ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ๋กœ ๋‚˜๋‰˜์–ด ์ง„๋‹ค. (๋…ธ๋“œ๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค.) ๋‚˜๋‰˜์–ด์ง„ ๋‘ ์„œ๋ธŒ ํŠธ๋ฆฌ๋„ ๋ชจ๋‘ ์ด์ง„ ํŠธ๋ฆฌ์–ด์•ผ ํ•œ๋‹ค.

  • ๊ฐ ์ธต๋ณ„๋กœ ์ˆซ์ž๋ฅผ ๋งค๊ฒจ์„œ ์ด๋ฅผ ํŠธ๋ฆฌ์˜ ๋ ˆ๋ฒจ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ ˆ๋ฒจ์€ 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ๋ฃจํŠธ ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ์€ 1์ด๋‹ค. ํŠธ๋ฆฌ์˜ ์ตœ๊ณ  ๋ ˆ๋ฒจ์„ ๊ฐ€๋ฆฌ์ผœ ํŠธ๋ฆฌ์˜ ๋†’์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • ์ข…๋ฅ˜

    • Full Binary Tree(ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ) : ๋ชจ๋“  ๋ ˆ๋ฒจ์ด ๊ฝ‰ ์ฐฌ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

      • ๋ ˆ๋ฒจ ๋ณ„๋กœ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 1,2,4,8,16 ... ์œผ๋กœ ๋Š˜์–ด๋‚œ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ฐ˜์ ์ธ ์ด์ง„ํŠธ๋ฆฌ์—์„œ ๊ฐ ๋ ˆ๋ฒจ ๋ณ„ ์ตœ๋Œ€ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” 2^(k - 1)์ด ๋œ๋‹ค.

      • ๋ ˆ๋ฒจ ๋ณ„ ๋…ธ๋“œ๋Š” ๊ณต๋น„๊ฐ€ 2์ธ ๋“ฑ๋น„ ์ˆ˜์—ด์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋“ฑ๋น„์ˆ˜์—ด์˜ ํ•ฉ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋†’์ด๊ฐ€ h์ธ ์ด์ง„ํŠธ๋ฆฌ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋…ธ๋“œ ์ˆ˜๋Š” 2^h - 1์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • Complete Binary Tree(์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ) : ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ˆœ์„œ๋Œ€๋กœ ์ฐจ๊ณก ์ฐจ๊ณก ์ฑ„์›Œ์ง„ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

      • ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์‚ฝ์ž…ํ•˜๋Š” ํŠธ๋ฆฌ์ด๋‹ค. ์™ผ์ชฝ์ด ๋น„์–ด์žˆ๊ณ  ์˜ค๋ฅธ์ชฝ์ด ๋“ค์–ด๊ฐ€์žˆ๋Š” ํŠธ๋ฆฌ๋Š” ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋‹ค.

    • Skewed Binary Tree(ํŽธํ–ฅ ์ด์ง„ ํŠธ๋ฆฌ) : ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ์˜ ์™ผ์ชฝ ์ž์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์™ผ์ชฝ์œผ๋กœ ํŽธํ–ฅ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ๋ฐ˜๋Œ€๋กœ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๋ถ€๋ชจ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํŽธํ–ฅ๋˜์–ด ์žˆ๋Š” ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๋งํ•œ๋‹ค.

B Tree & B+ Tree

์ด์ง„ ํŠธ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจ๊ฐ€ ๋‘ ๊ฐœ์˜ ์ž์‹๋ฐ–์— ๊ฐ€์ง€์ง€ ๋ชปํ•˜๊ณ , ๊ท ํ˜•์ด ๋งž์ง€ ์•Š์œผ๋ฉด ๊ฒ€์ƒ‰ ํšจ์œจ์ด ์„ ํ˜• ๊ฒ€์ƒ‰ ๊ธ‰์œผ๋กœ ๋–จ์–ด์ง„๋‹ค. ํ•˜์ง€๋งŒ ์ด์ง„ ํŠธ๋ฆฌ ๊ตฌ์กฐ์˜ ๊ฐ„๊ฒฐํ•จ๊ณผ ๊ท ํ˜•๋งŒ ๋งž๋‹ค๋ฉด ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ๋ชจ๋‘ O(logN)์˜ ์„ฑ๋Šฅ์„ ๋ณด์ด๋Š” ์žฅ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ๊ฐœ์„ ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๋‹ค.

โœจ B Tree

  • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค, ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…์ด๋‹ค.

  • ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•ด์„œ, ๋” ๋งŽ์€ ์ˆ˜์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ์ผ๋ฐ˜ํ™” ์‹œํ‚จ ๊ฒƒ์ด B Tree.

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

  • Ex)

    • ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ, ๊ฒ€์ƒ‰ ๊ตฌ์กฐ์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์€ ์ƒ๋‹นํžˆ ํฐ ์žฅ์ ์ด๋‹ค.

    • ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ๋ธ”๋Ÿญ ๋‹จ์œ„๋กœ ์ž…์ถœ๋ ฅํ•˜๋Š” ํ•˜๋“œ๋””์Šคํฌ or SSD์— ์ €์žฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ!

    • ํ•œ ๋ธ”๋Ÿญ์ด 1024 ๋ฐ”์ดํŠธ์ด๋ฉด, 2๋ฐ”์ดํŠธ๋ฅผ ์ฝ์œผ๋‚˜ 1024๋ฐ”์ดํŠธ๋ฅผ ์ฝ์œผ๋‚˜ ๋˜‘๊ฐ™์€ ์ž…์ถœ๋ ฅ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

    • ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ 1024๋ฐ”์ดํŠธ๋กœ ๊ฝ‰ ์ฑ„์›Œ์„œ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ž…์ถœ๋ ฅ์— ์žˆ์–ด์„œ ํšจ์œจ์ ์ธ ๊ตฌ์„ฑ์„ ๊ฐ–์ถœ ์ˆ˜ ์žˆ๋‹ค.

      • B-Tree๋Š” ์ด๋Ÿฌํ•œ ์žฅ์ ์„ ํ† ๋Œ€๋กœ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์˜ ์ธ๋ฑ์Šค ์ €์žฅ ๋ฐฉ๋ฒ•์œผ๋กœ ์• ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

๊ทœ์น™

  • ๋…ธ๋“œ์˜ ์ž๋ฃŒ์ˆ˜๊ฐ€ N์ด๋ฉด, ์ž์‹ ์ˆ˜๋Š” N+1์ด์–ด์•ผ ํ•œ๋‹ค.

  • ๊ฐ ๋…ธ๋“œ์˜ ์ž๋ฃŒ๋Š” ์ •๋ ฌ๋œ ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ์ ์–ด๋„ 2๊ฐœ ์ด์ƒ์˜ ์ž์‹์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ ์–ด๋„ M/2๊ฐœ์˜ ์ž๋ฃŒ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • ์™ธ๋ถ€ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ์˜ ๊ธธ์ด๋Š” ๋ชจ๋‘ ๊ฐ™๋‹ค.

  • ์ž…๋ ฅ ์ž๋ฃŒ๋Š” ์ค‘๋ณต๋  ์ˆ˜ ์—†๋‹ค.

โœจ B+ Tree

  • ๋ฐ์ดํ„ฐ์˜ ๋น ๋ฅธ ์ ‘๊ทผ์„ ์œ„ํ•œ ์ธ๋ฑ์Šค ์—ญํ• ๋งŒ ํ•˜๋Š” ๋น„๋‹จ๋ง ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋กœ ์žˆ๋‹ค.

  • ๊ธฐ์กด์˜ B-Tree์™€ ๋ฐ์ดํ„ฐ์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋œ ์ƒ‰์ธ๊ตฌ์กฐ.

  • B-Tree์˜ ๋ณ€ํ˜• ๊ตฌ์กฐ๋กœ index ๋ถ€๋ถ„๊ณผ leaf ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ์ˆœ์ฐจ ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ธ๋ฑ์Šค ๋ถ€๋ถ„์˜ key ๊ฐ’์€ leaf์— ์žˆ๋Š” key ๊ฐ’์„ ์ง์ ‘ ์ฐพ์•„๊ฐ€๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

์žฅ์ 

  • ๋ธ”๋Ÿญ ์‚ฌ์ด์ฆˆ๋ฅผ ๋” ๋งŽ์ด ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (Key ๊ฐ’์— ๋Œ€ํ•œ ํ•˜๋“œ๋””์Šคํฌ ์•ก์„ธ์Šค ์ฃผ์†Œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ)

  • Leaf ๋…ธ๋“œ๋ผ๋ฆฌ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์„œ ๋ฒ”์œ„ ํƒ์ƒ‰์— ๋งค์šฐ ์œ ๋ฆฌํ•˜๋‹ค.

๋‹จ์ 

  • B-Tree์˜ ๊ฒฝ์šฐ ์ตœ์ƒ ์ผ€์ด์Šค์—์„œ๋Š” ๋ฃจํŠธ์—์„œ ๋๋‚  ์ˆ˜ ์žˆ์ง€๋งŒ, B+Tree๋Š” ๋ฌด์กฐ๊ฑด leaf ๋…ธ๋“œ๊นŒ์ง€ ๋‚ด๋ ค๊ฐ€๋ด์•ผ ํ•œ๋‹ค.

โœจ ๋น„๊ต

  • B-Tree : ๊ฐ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ๋‹ค.

    • ๊ฐ ๋…ธ๋“œ์—์„œ key์™€ data ๋ชจ๋‘ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ณ , data๋Š” disk block์œผ๋กœ ํฌ์ธํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

  • B+ Tree : index ๋…ธ๋“œ์™€ leaf ๋…ธ๋“œ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์ €์žฅ๋œ๋‹ค.

    • ๊ฐ ๋…ธ๋“œ์—์„œ key๋งŒ ๋“ค์–ด๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ data๋Š” leaf ๋…ธ๋“œ์—๋งŒ ์กด์žฌํ•œ๋‹ค.

    • add, delete ์—ฐ์‚ฐ ๋ชจ๋‘ leaf ๋…ธ๋“œ์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค.

  • ๋˜ํ•œ, leaf ๋…ธ๋“œ๋Š” ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด์„œ ์ž„์˜ ์ ‘๊ทผ์ด๋‚˜ ์ˆœ์ฐจ ์ ‘๊ทผ ๋ชจ๋‘ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๋‹ค.

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

โœจ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๋ชฉ์ ์€?

  • ์ด์ง„ ํƒ์ƒ‰ + ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ

  • ์ด์ง„ ํƒ์ƒ‰

    • ํƒ์ƒ‰์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(logN)

    • ํ•˜์ง€๋งŒ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ.

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

    • ์‚ฝ์ž…, ์‚ญ์ œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)

    • ํ•˜์ง€๋งŒ ํƒ์ƒ‰ํ•˜๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)

  • ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ํ•ฉํ•˜์—ฌ ์žฅ์ ์„ ๋ชจ๋‘ ์–ป๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๊ฒƒ์ด ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ

  • ์ฆ‰, ํšจ์œจ์ ์ธ ํƒ์ƒ‰ ๋Šฅ๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์ž๋ฃŒ์˜ ์‚ฝ์ž…, ์‚ญ์ œ๋„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

โœจ ํŠน์ง•

  • ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ผ์ข…์œผ๋กœ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ทœ์น™์ด ์žˆ๋‹ค.

  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์— ์ €์žฅ๋œ ํ‚ค๋Š” ์œ ์ผํ•˜๋‹ค.

    1. ๋ฃจํŠธ ๋…ธ๋“œ์˜ ํ‚ค๊ฐ€ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์–ด๋– ํ•œ ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ํฌ๋‹ค.

    2. ๋ฃจํŠธ ๋…ธ๋“œ์˜ ํ‚ค๊ฐ€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์–ด๋– ํ•œ ๋…ธ๋“œ์˜ ํ‚ค๋ณด๋‹ค ์ž‘๋‹ค.

    3. ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ๋„ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์ด๋‹ค.

  • ํƒ์ƒ‰์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(logN)์ด๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ, ํŽธํ–ฅ ํŠธ๋ฆฌ๊ฐ€ ๋˜์–ด O(N)์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

  • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์ˆœํšŒ๋Š” ์ค‘์œ„ ์ˆœํšŒ(in order) ๋ฐฉ์‹์ด๋‹ค.(์™ผ์ชฝ - ๋ฃจํŠธ - ์˜ค๋ฅธ์ชฝ)

  • ์ค‘์œ„ ์ˆœํšŒ๋กœ ์ •๋ ฌ๋œ ์ˆœ์„œ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.

  • ์ค‘๋ณต๋œ ๋…ธ๋“œ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค.

์ค‘๋ณต์ด ์—†์–ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š”??

๊ฒ€์ƒ‰์„ ๋ชฉ์ ์œผ๋กœ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ธ๋ฐ, ๊ตณ์ด ์ค‘๋ณต์ด ๋งŽ์€ ๊ฒฝ์šฐ์— ์ด ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋А๋ฆฌ๊ฒŒ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ํŠธ๋ฆฌ์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋…ธ๋“œ์— count๋ฅผ ๊ฐ€์ง€๊ฒŒ ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

โœจ BST ํ•ต์‹ฌ ์—ฐ์‚ฐ

  • ๊ฒ€์ƒ‰

  • ์‚ฝ์ž…

  • ์‚ญ์ œ

  • ํŠธ๋ฆฌ ์ƒ์„ฑ

  • ํŠธ๋ฆฌ ์‚ญ์ œ

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

  • ๊ท ๋“ฑ ํŠธ๋ฆฌ : ๋…ธ๋“œ ๊ฐœ์ˆ˜๊ฐ€ N๊ฐœ์ผ ๋•Œ, O(logN)

  • ํŽธํ–ฅ ํŠธ๋ฆฌ : ๋…ธ๋“œ ๊ฐœ์ˆ˜๊ฐ€ N๊ฐœ์ผ ๋•Œ, O(N)

์‚ฝ์ž…, ๊ฒ€์ƒ‰, ์‚ญ์ œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ํŠธ๋ฆฌ์˜ Depth์— ๋น„๋ก€.

โœจ ์‚ญ์ œ์˜ 3๊ฐ€์ง€ case

  1. ์ž์‹์ด ์—†๋Š” ๋‹จ๋ง ๋…ธ๋“œ์ผ ๋•Œ -> ๊ทธ๋ƒฅ ์‚ญ์ œ

  2. ์ž์‹์ด 1๊ฐœ์ธ ๋…ธ๋“œ์ผ ๋•Œ -> ์ง€์›Œ์ง„ ๋…ธ๋“œ์— ์ž์‹์„ ์˜ฌ๋ฆฌ๊ธฐ

  3. ์ž์‹์ด 2๊ฐœ์ธ ๋…ธ๋“œ์ผ ๋•Œ -> ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’ or ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’ ์˜ฌ๋ฆฌ๊ธฐ

ํŽธํ–ฅ๋œ ํŠธ๋ฆฌ(์ •๋ ฌ๋œ ์ƒํƒœ ๊ฐ’์„ ํŠธ๋ฆฌ๋กœ ๋งŒ๋“ค๋ฉด ํ•œ์ชฝ์œผ๋กœ ๋ป—์Œ)๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N) ์ด๋ฏ€๋กœ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค. ์ด๋ฅผ ๋ฐ”๋กœ ์žก๋„๋ก ๋„์™€์ฃผ๊ณ  ๊ฐœ์„ ๋œ ํŠธ๋ฆฌ๋Š” AVL Tree, RedBlack Tree๊ฐ€ ์žˆ๋‹ค.

โœจ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ˆœํšŒ ๋ฐฉ๋ฒ•

  1. ์ „์œ„ ์ˆœํšŒ(Pre Order) : ๋ฃจํŠธ -> ์™ผ์ชฝ -> ์˜ค๋ฅธ์ชฝ

  2. ์ค‘์œ„ ์ˆœํšŒ(In Order) : ์™ผ์ชฝ -> ๋ฃจํŠธ -> ์˜ค๋ฅธ์ชฝ

  3. ํ›„์œ„ ์ˆœํšŒ(Post Order) : ์™ผ์ชฝ -> ์˜ค๋ฅธ์ชฝ -> ๋ฃจํŠธ

Trie (ํŠธ๋ผ์ด)

โœจ Trie ์ž๋ฃŒ๊ตฌ์กฐ๋ž€?

  • ์ผ๋ฐ˜ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ, Digital Tree, Radix Tree, Prefix Tree๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

  • ํ…์ŠคํŠธ ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์ด ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ณ  ํƒ์ƒ‰ํ•˜๋Š”๋ฐ ์œ ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

โœจ Trie ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํ˜•ํƒœ๋Š”?

  • ๊ฐ ๋…ธ๋“œ๋Š” <Key, Value> ๋งต์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. Key๋Š” ํ•˜๋‚˜์˜ ์•ŒํŒŒ๋ฒณ์ด ๋˜๊ณ , Value๋Š” ๊ทธ Key์— ํ•ด๋‹นํ•˜๋Š” ์ž์‹ ๋…ธ๋“œ๊ฐ€ ๋œ๋‹ค.

  • ๋‹ค์Œ์€ DEV, DEAR, PIE, POP, POW๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋“ค์–ด์žˆ๋Š” Trie ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋„์‹ํ™”ํ•œ ๊ฒƒ์ด๋‹ค. ํœด๋Œ€ํฐ ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์—์„œ ๊ฒ€์ƒ‰์„ ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์ „์—์„œ ๋‹จ์–ด๋ฅผ ์ฐพ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ 'DEV'๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์ฐพ์œผ๋ ค๋ฉด ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ [D] -> [E] -> [V] ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

  • ๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ํŠน์ • ๋ฌธ์ž๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š๊ณ , ์ž์‹ ๋…ธ๋“œ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ์œ ์˜ํ•  ์ ์€ '๋ถ€๋ชจ ๋…ธ๋“œ'๋‚˜ '์ž์‹ ์ด ์–ด๋–ค ์•ŒํŒŒ๋ฒณ(Key)์— ํ•ด๋‹นํ•˜๋Š” ๋…ธ๋“œ(Value)'์ธ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค.

  • ์ฆ‰, ๋ฃจํŠธ ๋…ธ๋“œ๋Š” [D], [P]๋ผ๊ณ  ํ•˜๋Š” ์•ŒํŒŒ๋ฒณ์„ Key๋กœ ํ•˜๋Š” ์ž์‹ ๋…ธ๋“œ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , [D]๋Š” [E]๋ฅผ Key๋กœ ํ•˜๋Š” ์ž์‹ ๋…ธ๋“œ, [P]๋Š” [I]์™€ [O]๋ฅผ Key๋กœ ํ•˜๋Š” ์ž์‹ ๋…ธ๋“œ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

  • ๋˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋…ธ๋“œ์˜ ์ž์†๋“ค์€ ํ•ด๋‹น ๋…ธ๋“œ์™€ ๊ณตํ†ต ์ ‘๋‘์–ด๋ฅผ ๊ฐ€์ง„๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ์ฆ‰, 'DE' ๋…ธ๋“œ์˜ ์ž์†์ธ 'DEAR'์™€ 'DEV'๋Š” 'DE-'๋ฅผ ๊ณตํ†ต ์ ‘๋‘์–ด๋กœ ๊ฐ€์ง€๋ฉฐ, 'P'์˜ ์ž์†์ธ 'POW'์™€ 'PIE'๋Š” 'P-'๋ฅผ ๊ณตํ†ต ์ ‘๋‘์–ด๋กœ ๊ฐ€์ง„๋‹ค.

โœจ Trie ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠน์ง•

  • ์ •๋ ฌ๋œ ํŠธ๋ฆฌ ๊ตฌ์กฐ์ด๋‹ค.(๋ฐ์ดํ„ฐ์— ๋”ฐ๋ผ ์ด์ง„ํŠธ๋ฆฌ์ผ ๋•Œ๋„ ์žˆ๋‹ค.)

  • Trie๋Š” ์ž์‹ ๋…ธ๋“œ๋ฅผ Map<Key, Value> ํ˜•ํƒœ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋…ธ๋“œ์˜ ์ž์†๋“ค์€ ํ•ด๋‹น ๋…ธ๋“œ์™€ ๊ณตํ†ต ์ ‘๋‘์–ด๋ฅผ ๊ฐ€์ง„๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ๋นˆ ๋ฌธ์ž์™€ ์—ฐ๊ด€์žˆ๋‹ค.(ํŠน์ • ๋ฌธ์ž๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.)

Red Black Tree

RBT(Red-Black Tree)๋Š” BST ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋Š” ํŠธ๋ฆฌ ํ˜•์‹์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด Red-Black Tree ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฒŒ๋˜๋ฉด Search, Insert, Delete ์— O(log n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์†Œ์š”๋œ๋‹ค. ๋™์ผํ•œ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜์ผ ๋•Œ, depth ๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ์•„์ด๋””์–ด์ด๋‹ค. ๋™์ผํ•œ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜์ผ ๋•Œ, depth ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋Š” tree ๊ฐ€ complete binary tree ์ธ ๊ฒฝ์šฐ์ด๋‹ค.

โœจ Red-Black Tree ์˜ ์ •์˜

Red-Black Tree ๋Š” ๋‹ค์Œ์˜ ์„ฑ์งˆ๋“ค์„ ๋งŒ์กฑํ•˜๋Š” BST ์ด๋‹ค.

  1. ๊ฐ ๋…ธ๋“œ๋Š” Red or Black์ด๋ผ๋Š” ์ƒ‰๊น”์„ ๊ฐ–๋Š”๋‹ค.

  2. Root node ์˜ ์ƒ‰๊น”์€ Black์ด๋‹ค.

  3. ๊ฐ leaf node ๋Š” black์ด๋‹ค.

  4. ์–ด๋–ค ๋…ธ๋“œ์˜ ์ƒ‰๊น”์ด red๋ผ๋ฉด ๋‘ ๊ฐœ์˜ children ์˜ ์ƒ‰๊น”์€ ๋ชจ๋‘ black ์ด๋‹ค.

  5. ๊ฐ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ descendant leaves ๊นŒ์ง€์˜ ๋‹จ์ˆœ ๊ฒฝ๋กœ๋Š” ๋ชจ๋‘ ๊ฐ™์€ ์ˆ˜์˜ black nodes ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๋‹น ๋…ธ๋“œ์˜ Black-Height๋ผ๊ณ  ํ•œ๋‹ค. cf) Black-Height: ๋…ธ๋“œ x ๋กœ๋ถ€ํ„ฐ ๋…ธ๋“œ x ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์€ leaf node ๊นŒ์ง€์˜ simple path ์ƒ์— ์žˆ๋Š” black nodes ๋“ค์˜ ๊ฐœ์ˆ˜

โœจ Red-Black Tree ์˜ ํŠน์ง•

  1. Binary Search Tree ์ด๋ฏ€๋กœ BST ์˜ ํŠน์ง•์„ ๋ชจ๋‘ ๊ฐ–๋Š”๋‹ค.

  2. Root node ๋ถ€ํ„ฐ leaf node ๊นŒ์ง€์˜ ๋ชจ๋“  ๊ฒฝ๋กœ ์ค‘ ์ตœ์†Œ ๊ฒฝ๋กœ์™€ ์ตœ๋Œ€ ๊ฒฝ๋กœ์˜ ํฌ๊ธฐ ๋น„์œจ์€ 2 ๋ณด๋‹ค ํฌ์ง€ ์•Š๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํƒœ๋ฅผ balanced ์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค.

  3. ๋…ธ๋“œ์˜ child ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ child ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋Š” NIL ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค. ์ด๋Ÿฌํ•œ NIL ๋“ค์„ leaf node ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

RBT ๋Š” BST ์˜ ์‚ฝ์ž…, ์‚ญ์ œ ์—ฐ์‚ฐ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•œ ๊ฒƒ์ธ๊ฐ€?

โœจ ์‚ฝ์ž…

์šฐ์„  BST ์˜ ํŠน์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…์„ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฝ์ž…๋œ ๋…ธ๋“œ์˜ ์ƒ‰๊น”์„ RED ๋กœ ์ง€์ •ํ•œ๋‹ค. Red ๋กœ ์ง€์ •ํ•˜๋Š” ์ด์œ ๋Š” Black-Height ๋ณ€๊ฒฝ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ์‚ฝ์ž… ๊ฒฐ๊ณผ RBT ์˜ ํŠน์„ฑ ์œ„๋ฐฐ(violation)์‹œ ๋…ธ๋“œ์˜ ์ƒ‰๊น”์„ ์กฐ์ •ํ•˜๊ณ , Black-Height ๊ฐ€ ์œ„๋ฐฐ๋˜์—ˆ๋‹ค๋ฉด rotation ์„ ํ†ตํ•ด height ๋ฅผ ์กฐ์ •ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ•ด RBT ์˜ ๋™์ผํ•œ height ์— ์กด์žฌํ•˜๋Š” internal node ๋“ค์˜ Black-height ๊ฐ€ ๊ฐ™์•„์ง€๊ฒŒ ๋˜๊ณ  ์ตœ์†Œ ๊ฒฝ๋กœ์™€ ์ตœ๋Œ€ ๊ฒฝ๋กœ์˜ ํฌ๊ธฐ ๋น„์œจ์ด 2 ๋ฏธ๋งŒ์œผ๋กœ ์œ ์ง€๋œ๋‹ค.

โœจ ์‚ญ์ œ

์‚ญ์ œ๋„ ์‚ฝ์ž…๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ BST ์˜ ํŠน์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค. ์‚ญ์ œ๋  ๋…ธ๋“œ์˜ child ์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ rotation ๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ์ง€์›Œ์ง„ ๋…ธ๋“œ์˜ ์ƒ‰๊น”์ด Black ์ด๋ผ๋ฉด Black-Height ๊ฐ€ 1 ๊ฐ์†Œํ•œ ๊ฒฝ๋กœ์— black node ๊ฐ€ 1 ๊ฐœ ์ถ”๊ฐ€๋˜๋„๋ก rotation ํ•˜๊ณ  ๋…ธ๋“œ์˜ ์ƒ‰๊น”์„ ์กฐ์ •ํ•œ๋‹ค. ์ง€์›Œ์ง„ ๋…ธ๋“œ์˜ ์ƒ‰๊น”์ด red ๋ผ๋ฉด Violation ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ RBT ๊ฐ€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.

Java Collection ์—์„œ TreeMap ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ RBT ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , HashMap ์—์„œ์˜ Separate Chaining์—์„œ๋„ ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ๋งŒํผ ํšจ์œจ์ด ์ข‹๊ณ  ์ค‘์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

Heap

ํž™์€ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…์œผ๋กœ ์šฐ์„  ์ˆœ์œ„ ํ๋ฅผ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

  • ์šฐ์„  ์ˆœ์œ„ ํ : ์šฐ์„ ์ˆœ์œ„์˜ ๊ฐœ๋…์„ ํ์— ๋„์ž…ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ.

    • ๋ฐ์ดํ„ฐ๋“ค์ด ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ํ์—์„œ ๋จผ์ € ๋น ์ ธ ๋‚˜๊ฐ„๋‹ค.

  • ์–ธ์ œ ์‚ฌ์šฉ?

    • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ, ์ž‘์—… ์Šค์ผ€์ค„๋ง, ์ˆ˜์น˜ํ•ด์„ ๊ณ„์‚ฐ.

    • ์šฐ์„  ์ˆœ์œ„ ํ๋Š” ๋ฐฐ์—ด, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ํž™์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. (ํž™์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋‹ค.)

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

    • ์‚ฝ์ž… : O(logN)

    • ์‚ญ์ œ : O(logN)

  • ์Šคํƒ : LIFO, ํ : FIFO

โœจ ๊ฐœ๋…

  • Tree์˜ ํ˜•์‹์„ ์ทจํ•˜๊ณ  ์žˆ์œผ๋ฉฐ Tree ์ค‘์—์„œ๋„ ๋ฐฐ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ (Complete Binary Tree)์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.

  • ์ตœ๋Œ€๊ฐ’ ๋ฐ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์ด๋‹ค.

  • ๋ฐฐ์—ด์— ํŠธ๋ฆฌ์˜ ๊ฐ’์„ ๋„ฃ์–ด์ค„ ๋•Œ๋Š” 0๋ฒˆ์งธ๋Š” ๊ฑด๋„ˆ๋›ฐ๊ณ  1๋ฒˆ์งธ๋ถ€ํ„ฐ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์‹œ์ž‘๋œ๋‹ค. ์ด์œ ๋Š” ๋…ธ๋“œ์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ์™€ index๋ฅผ ์ผ์น˜์‹œ์ผœ ํ˜ผ๋™์„ ์ค„์ด๊ธฐ ์œ„ํ•จ์ด๋‹ค.

  • ์ค‘๋ณต๋œ ๊ฐ’์„ ํ—ˆ์šฉ. (์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ค‘๋ณต ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ.)

  • ํž™์˜ ์ข…๋ฅ˜๋กœ๋Š” ์ตœ๋Œ€ํž™๊ณผ ์ตœ์†Œํž™์ด ์กด์žฌํ•œ๋‹ค.

    • ์ตœ๋Œ€ํž™ : ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ Complete Binary Tree๋ฅผ ๋งํ•œ๋‹ค.

    • ์ตœ์†Œํž™์€ ์ตœ๋Œ€ํž™์˜ ๋ฐ˜๋Œ€์ด๋‹ค.

    • ์ตœ๋Œ€ํž™์—์„œ๋Š” Root Node์— ์žˆ๋Š” ๊ฐ’์ด ์ œ์ผ ํฌ๋ฏ€๋กœ, ์ตœ๋Œ€๊ฐ’์„ ์ฐพ๋Š”๋ฐ ์†Œ์š”๋˜๋Š” ์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.

    • Complete Binary Tree์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ Random Access๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

    • Index ๋ฒˆํ˜ธ๋Š” ๋…ธ๋“œ ๊ฐœ์ˆ˜๊ฐ€ n๊ฐœ์ผ ๋•Œ, i๋ฒˆ์งธ ๋…ธ๋“œ์— ๋Œ€ํ•˜์—ฌ ์™ผ์ชฝ ์ž์‹์€ ix2, ์˜ค๋ฅธ์ชฝ ์ž์‹์€ ix2+1๊ฐ€ ๋œ๋‹ค.

https://user-images.githubusercontent.com/33534771/74101428-04198d00-4b7d-11ea-859d-99999fe545c2.png

โœจ ๊ตฌํ˜„

ํž™์„ ์ €์žฅํ•˜๋Š” ํ‘œ์ค€์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐฐ์—ด์ด๋‹ค.

๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์ธ 0์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ , 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

ํŠน์ • ์œ„์น˜์˜ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์–ด๋„ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

<๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ์˜ ๊ด€๊ณ„>

  • ์™ผ์ชฝ ์ž์‹ index : (๋ถ€๋ชจ index) * 2

  • ์˜ค๋ฅธ์ชฝ ์ž์‹ index : (๋ถ€๋ชจ index) * 2 + 1

  • ๋ถ€๋ชจ index : (์ž์‹ index) / 2

  1. <ํž™์˜ ์‚ฝ์ž…>

  • ํž™์— ์ƒˆ๋กœ์šด ์š”์†Œ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด, ์ผ๋‹จ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ํž™์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์— ์‚ฝ์ž….

  • ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๊ฒ€์‚ฌํ•ด์„œ ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ๊ตํ™˜ํ•œ๋‹ค.

[์ตœ๋Œ€ ํž™ ์‚ฝ์ž… ๊ตฌํ˜„]

๋ถ€๋ชจ ๋…ธ๋“œ : ์ž์‹ ์˜ ์ธ๋ฑ์Šค / 2 ์ด๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์™€ ๋น„๊ตํ•˜์—ฌ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ๋” ํฌ๋ฉด ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค.

  1. <ํž™์˜ ์‚ญ์ œ>

  • ์ตœ๋Œ€ ํž™์—์„œ ์ตœ๋Œ€๊ฐ’์€ ๋ฃจํŠธ ๋…ธ๋“œ์ด๋ฏ€๋กœ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค. (์ตœ๋Œ€ ํž™์—์„œ ์‚ญ์ œ ์—ฐ์‚ฐ์€ ์ตœ๋Œ€๊ฐ’ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.)

  • ์‚ญ์ œ๋œ ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ๋Š” ํž™์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

  • ํž™์„ ์žฌ๊ตฌ์„ฑ ํ•œ๋‹ค.

[์ตœ๋Œ€ ํž™ ์‚ญ์ œ ๊ตฌํ˜„]

โœจ Binary Heap : Heapify

  • ๋‘ ๊ฐœ์˜ ์„œ๋ธŒ ํŠธ๋ฆฌ๊ฐ€ ์ตœ๋Œ€ํž™(์ตœ์†Œํž™)์ผ ๋•Œ, root๋ฅผ ํฌํ•จํ•˜๋Š” ์ „์ฒด๊ฐ€ heap์ด ๋˜๋„๋ก ์œ„์น˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•œ๋‹ค.

  • ๋ฃจํŠธ์—์„œ ์ž‘์€ ๊ฐ’์ด ํ˜๋Ÿฌ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค. ์ตœ๋Œ€ํž™์˜ ๊ฒฝ์šฐ root๊ฐ€ child๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋‘ ๊ฐœ์˜ child node ์ค‘ ๊ฐ’์ด ํฐ ๋…ธ๋“œ๋ฅผ root์™€ ๊ต์ฒดํ•˜๊ณ  ๊ต์ฒดํ•  ๋…ธ๋“œ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

Tree Map

ํŠธ๋ฆฌ๋Š” ๊ฐ’์„ ๊ฐ€์ง„ ๋…ธ๋“œ(Node)์™€ ์ด ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฐ„์„ (Edge)์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

๊ทธ๋ฆผ ์ƒ ๋ฐ์ดํ„ฐ 1์„ ๊ฐ€์ง„ ๋…ธ๋“œ๊ฐ€ ๋ฃจํŠธ(Root) ๋…ธ๋“œ๋‹ค.

๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ 0๊ฐœ ์ด์ƒ์˜ ์ž์‹(Child) ๋…ธ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ ๋ณดํ†ต ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋กœ ๋ถ€๋ฅธ๋‹ค.

์•„๋ž˜์ฒ˜๋Ÿผ ๊ฐ€์กฑ ๊ด€๊ณ„๋„๋ฅผ ๊ทธ๋ฆด ๋•Œ ํŠธ๋ฆฌ ํ˜•์‹์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ์ด ๋ดค์„ ๊ฒƒ์ด๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠธ๋ฆฌ๋„ ์ด ๋ฐฉ์‹์„ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

ํŠธ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ํŠน์ง•์ด ์žˆ๋‹ค.

  • ํŠธ๋ฆฌ์—๋Š” ์‚ฌ์ดํด์ด ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค. (๋งŒ์•ฝ ์‚ฌ์ดํด์ด ๋งŒ๋“ค์–ด์ง„๋‹ค๋ฉด, ๊ทธ๊ฒƒ์€ ํŠธ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ณ  ๊ทธ๋ž˜ํ”„๋‹ค)

  • ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ž๋ฃŒํ˜•์œผ๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๋ฃจํŠธ์—์„œ ํ•œ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋Š” ์œ ์ผํ•œ ๊ฒฝ๋กœ ๋ฟ์ด๋‹ค.

  • ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ N๊ฐœ๋ฉด, ๊ฐ„์„ ์€ N-1๊ฐœ๋ฅผ ๊ฐ€์ง„๋‹ค.

๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€, ๊ทธ๋ž˜ํ”„์™€ ํŠธ๋ฆฌ์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์ธ๋ฐ, ์ด๋Š” ์‚ฌ์ดํด์˜ ์œ ๋ฌด๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠธ๋ฆฌ ์ˆœํšŒ ๋ฐฉ์‹

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

  1. ์ „์œ„ ์ˆœํšŒ(pre-order)

    ๊ฐ ๋ฃจํŠธ(Root)๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    (Root โ†’ ์™ผ์ชฝ ์ž์‹ โ†’ ์˜ค๋ฅธ์ชฝ ์ž์‹)

    1 โ†’ 2 โ†’ 4 โ†’ 8 โ†’ 9 โ†’ 5 โ†’ 10 โ†’ 11 โ†’ 3 โ†’ 6 โ†’ 13 โ†’ 7 โ†’ 14

  2. ์ค‘์œ„ ์ˆœํšŒ(in-order)

    ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธ ํ›„ ๋ฃจํŠธ(Root)๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    (์™ผ์ชฝ ์ž์‹ โ†’ Root โ†’ ์˜ค๋ฅธ์ชฝ ์ž์‹)

    8 โ†’ 4 โ†’ 9 โ†’ 2 โ†’ 10 โ†’ 5 โ†’ 11 โ†’ 1 โ†’ 6 โ†’ 13 โ†’ 3 โ†’14 โ†’ 7

  3. ํ›„์œ„ ์ˆœํšŒ(post-order)

    ์™ผ์ชฝ ํ•˜์œ„ ํŠธ๋ฆฌ๋ถ€ํ„ฐ ํ•˜์œ„๋ฅผ ๋ชจ๋‘ ๋ฐฉ๋ฌธ ํ›„ ๋ฃจํŠธ(Root)๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    (์™ผ์ชฝ ์ž์‹ โ†’ ์˜ค๋ฅธ์ชฝ ์ž์‹ โ†’ Root)

    8 โ†’ 9 โ†’ 4 โ†’ 10 โ†’ 11 โ†’ 5 โ†’ 2 โ†’ 13 โ†’ 6 โ†’ 14 โ†’ 7 โ†’ 3 โ†’ 1

  4. ๋ ˆ๋ฒจ ์ˆœํšŒ(level-order)

    ๋ฃจํŠธ(Root)๋ถ€ํ„ฐ ๊ณ„์ธต ๋ณ„๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    1 โ†’ 2 โ†’ 3 โ†’ 4 โ†’ 5 โ†’ 6 โ†’ 7 โ†’ 8 โ†’ 9 โ†’ 10 โ†’ 11 โ†’ 13 โ†’ 14

Code

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

โœจ ์ •์ ๊ณผ ๊ฐ„์„ ์˜ ์ง‘ํ•ฉ, Graph

cf) ํŠธ๋ฆฌ ๋˜ํ•œ ๊ทธ๋ž˜ํ”„์ด๋ฉฐ, ๊ทธ ์ค‘ ์‚ฌ์ดํด์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ๋งํ•œ๋‹ค.

โœจ๊ทธ๋ž˜ํ”„ ๊ด€๋ จ ์šฉ์–ด ์ •๋ฆฌ

โœจUndirected Graph ์™€ Directed Graph (Digraph)

๋ง ๊ทธ๋Œ€๋กœ ์ •์ ๊ณผ ๊ฐ„์„ ์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„์— ์žˆ์–ด์„œ ๋ฐฉํ–ฅ์„ฑ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ Undirected Graph ๋ผ ํ•˜๊ณ , ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ Directed Graph ๋ผ๊ณ  ํ•œ๋‹ค.

  • Directed Graph (Digraph)

V = {1, 2, 3, 4, 5, 6} E = {(1, 4), (2,1), (3, 4), (3, 4), (5, 6)} (u, v) = vertex u์—์„œ vertex v๋กœ ๊ฐ€๋Š” edge

  • Undirected Graph

V = {1, 2, 3, 4, 5, 6} E = {(1, 4), (2,1), (3, 4), (3, 4), (5, 6)} (u, v) = vertex u์™€ vertex v๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” edge

โœจDegree

Undirected Graph ์—์„œ ๊ฐ ์ •์ (Vertex)์— ์—ฐ๊ฒฐ๋œ Edge ์˜ ๊ฐœ์ˆ˜๋ฅผ Degree ๋ผ ํ•œ๋‹ค. Directed Graph ์—์„œ๋Š” ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์„ฑ์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— Degree ๊ฐ€ ๋‘ ๊ฐœ๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค. ๊ฐ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ๋‚˜๊ฐ€๋Š” ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ Outdegree ๋ผ ํ•˜๊ณ , ๋“ค์–ด์˜ค๋Š” ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ Indegree ๋ผ ํ•œ๋‹ค.

โœจ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„(Weight Graph)์™€ ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„(Sub Graph)

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

โœจ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋‘ ๋ฐฉ๋ฒ•

์ธ์ ‘ ํ–‰๋ ฌ (adjacent matrix) : ์ •๋ฐฉ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜์˜ value ๊ฐ’์„ ํ†ตํ•ด์„œ vertex ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ O(1) ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. Edge ๊ฐœ์ˆ˜์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ V^2 ์˜ Space Complexity ๋ฅผ ๊ฐ–๋Š”๋‹ค. Dense graph ๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์ ์ ˆํ•  ๋ฐฉ๋ฒ•์ด๋‹ค.

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ (adjacent list) : ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

vertex ์˜ adjacent list ๋ฅผ ํ™•์ธํ•ด๋ด์•ผ ํ•˜๋ฏ€๋กœ vertex ๊ฐ„ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. Space Complexity ๋Š” O(E + V)์ด๋‹ค. Sparse graph ๋ฅผ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์ ๋‹นํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

โœจ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

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

โœจ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ (Depth First Search: DFS)

๊ทธ๋ž˜ํ”„ ์ƒ์— ์กด์žฌํ•˜๋Š” ์ž„์˜์˜ ํ•œ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ํ•œ ์ •์ ์œผ๋กœ๋งŒ ๋‚˜์•„๊ฐ„๋‹ค๋ผ๋Š” ๋ฐฉ๋ฒ•์„ ์šฐ์„ ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค. ์ผ๋‹จ ์—ฐ๊ฒฐ๋œ ์ •์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ ์ด ์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ณ„์† ์—ฐ๊ฒฐํ•˜๋‹ค๊ฐ€ ๋”์ด์ƒ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ •์ ์ด ์—†์œผ๋ฉด ๋ฐ”๋กœ ๊ทธ ์ „ ๋‹จ๊ณ„์˜ ์ •์ ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ ์ด ์žˆ๋Š”์ง€ ์‚ดํŽด๋ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๊ฐ”๋˜ ๊ธธ์„ ๋˜๋Œ์•„ ์˜ค๋Š” ์ƒํ™ฉ์ด ์กด์žฌํ•˜๋Š” ๋ฏธ๋กœ์ฐพ๊ธฐ์ฒ˜๋Ÿผ ๊ตฌ์„ฑํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ• ๊นŒ? ๋ฐ”๋กœ Stack ์ด๋‹ค. Time Complexity : O(V+E) โ€ฆ vertex ๊ฐœ์ˆ˜ + edge ๊ฐœ์ˆ˜

โœจ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ (Breadth First Search: BFS)

๊ทธ๋ž˜ํ”„ ์ƒ์— ์กด์žฌํ•˜๋Š” ์ž„์˜์˜ ํ•œ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์ •์ ์œผ๋กœ ๋‚˜์•„๊ฐ„๋‹ค. Tree ์—์„œ์˜ Level Order Traversal ํ˜•์‹์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค. BFS ์—์„œ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ Queue ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฐ๋ฝ์„ ์ทจํ•  ์ •์ ์˜ ์ˆœ์„œ๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. ์šฐ์„ , ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜๋Š” ์ •์ ์„ Queue ์— ๋„ฃ๋Š”๋‹ค.(enqueue) ๊ทธ๋ฆฌ๊ณ  dequeue ๋ฅผ ํ•˜๋ฉด์„œ dequeue ํ•˜๋Š” ์ •์ ๊ณผ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •์ ๋“ค์„ enqueue ํ•œ๋‹ค. ์ฆ‰ vertex ๋“ค์„ ๋ฐฉ๋ฌธํ•œ ์ˆœ์„œ๋Œ€๋กœ queue ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Time Complexity : O(V+E) โ€ฆ vertex ๊ฐœ์ˆ˜ + edge ๊ฐœ์ˆ˜ ! BFS ๋กœ ๊ตฌํ•œ ๊ฒฝ๋กœ๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ์ด๋‹ค.

โœจ Minimum Spanning Tree

๊ทธ๋ž˜ํ”„ G ์˜ spanning tree ์ค‘ edge weight ์˜ ํ•ฉ์ด ์ตœ์†Œ์ธ spanning tree๋ฅผ ๋งํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” spanning tree๋ž€ ๊ทธ๋ž˜ํ”„ G ์˜ ๋ชจ๋“  vertex ๊ฐ€ cycle ์ด ์—†์ด ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ๋งํ•œ๋‹ค.

โœจ Kruskal Algorithm

์ดˆ๊ธฐํ™” ์ž‘์—…์œผ๋กœ edge ์—†์ด vertex ๋“ค๋งŒ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  weight ๊ฐ€ ์ œ์ผ ์ž‘์€ edge ๋ถ€ํ„ฐ ๊ฒ€ํ† ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„  Edge Set ์„ non-decreasing ์œผ๋กœ sorting ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ž‘์€ weight ์— ํ•ด๋‹นํ•˜๋Š” edge ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š”๋ฐ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ทธ๋ž˜ํ”„์— cycle ์ด ์ƒ๊ธฐ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ถ”๊ฐ€ํ•œ๋‹ค. spanning tree ๊ฐ€ ์™„์„ฑ๋˜๋ฉด ๋ชจ๋“  vertex ๋“ค์ด ์—ฐ๊ฒฐ๋œ ์ƒํƒœ๋กœ ์ข…๋ฃŒ๊ฐ€ ๋˜๊ณ  ์™„์„ฑ๋  ์ˆ˜ ์—†๋Š” ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•ด์„œ๋Š” ๋ชจ๋“  edge ์— ๋Œ€ํ•ด ํŒ๋‹จ์ด ์ด๋ฃจ์–ด์ง€๋ฉด ์ข…๋ฃŒ๋œ๋‹ค. Kruskal Algorithm์˜ ์„ธ๋ถ€ ๋™์ž‘๊ณผ์ • Kruskal Algorithm ๊ด€๋ จ Code

์–ด๋–ป๊ฒŒ cycle ์ƒ์„ฑ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š”๊ฐ€?

Graph ์˜ ๊ฐ vertex ์— set-id๋ผ๋Š” ๊ฒƒ์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ถ€์—ฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ดˆ๊ธฐํ™” ๊ณผ์ •์—์„œ ๋ชจ๋‘ 1~n ๊นŒ์ง€์˜ ๊ฐ’์œผ๋กœ ๊ฐ๊ฐ์˜ vertex ๋“ค์„ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ 0 ์€ ์–ด๋– ํ•œ edge ์™€๋„ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•˜์Œ์„ ์˜๋ฏธํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐํ•  ๋•Œ๋งˆ๋‹ค set-id๋ฅผ ํ•˜๋‚˜๋กœ ํ†ต์ผ์‹œํ‚ค๋Š”๋ฐ, ๊ฐ’์ด ๋™์ผํ•œ set-id ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์€ set-id ๊ฐ’์œผ๋กœ ํ†ต์ผ์‹œํ‚จ๋‹ค.

Time Complexity

  1. Edge ์˜ weight ๋ฅผ ๊ธฐ์ค€์œผ๋กœ sorting - O(E log E)

  2. cycle ์ƒ์„ฑ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  set-id ๋ฅผ ํ†ต์ผ - O(E + V log V) => ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(E log E)

โœจ Prim Algorithm

์ดˆ๊ธฐํ™” ๊ณผ์ •์—์„œ ํ•œ ๊ฐœ์˜ vertex ๋กœ ์ด๋ฃจ์–ด์ง„ ์ดˆ๊ธฐ ๊ทธ๋ž˜ํ”„ A ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ ๊ทธ๋ž˜ํ”„ A ๋‚ด๋ถ€์— ์žˆ๋Š” vertex ๋กœ๋ถ€ํ„ฐ ์™ธ๋ถ€์— ์žˆ๋Š” vertex ์‚ฌ์ด์˜ edge ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ๊ทธ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ weight ์˜ edge ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜๋Š” vertex ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. ์–ด๋–ค vertex ๊ฑด ๊ฐ„์— ์ƒ๊ด€์—†์ด edge ์˜ weight ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์—ฐ๊ฒฐ๋œ vertex ๋Š” ๊ทธ๋ž˜ํ”„ A ์— ํฌํ•จ๋œ๋‹ค. ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๊ณ  ๋ชจ๋“  vertex ๋“ค์ด ์—ฐ๊ฒฐ๋˜๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.

Time Complexity

=> ์ „์ฒด ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(E log V)

Hash (ํ•ด์‹œ)

  • Hash Or HashTable์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

  • ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ๊ณ ์œ ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์–ป๋Š”๋‹ค.

  • ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น ๋ฅธ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

  • ํ•ด์‹œ๋ž€ ๋‹ค์–‘ํ•œ ๊ธธ์ด๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ํ•œ ๊ฐ’์„ ๋งํ•œ๋‹ค.

โœจ ํ•ด์‹œ ํ•จ์ˆ˜

  • ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, ์ž„์˜์˜ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜์— ์˜ํ•ด ์–ป์–ด์ง€๋Š” ๊ฐ’์„ ํ•ด์‹œ ์ฝ”๋“œ, ํ•ด์‹œ๋ผ๊ณ  ํ•œ๋‹ค.

โœจ ํ•ด์‹œ ํ…Œ์ด๋ธ”

  • ํ‚ค์™€ ๊ฐ’์„ ๋งคํ•‘ํ•ด๋‘” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ์–ป์€ ํ•ด์‹œ๋ฅผ ํ‚ค๋กœ ํ™œ์šฉํ•˜์—ฌ index๋กœ ์‚ฌ์šฉํ•˜๊ณ  ํ•ด๋‹น index์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์—ฌ ํšจ์œจ์ ์ธ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

  • ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค.

  • key, value์— ๋„ ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

Lee -> ํ•ด์‹œ ํ•จ์ˆ˜ -> 5 Koo -> ํ•ด์‹œ ํ•จ์ˆ˜ -> 2 Kim -> ํ•ด์‹œ ํ•จ์ˆ˜ -> 1 ... ... Choi -> ํ•ด์‹œ ํ•จ์ˆ˜ -> 5 // Lee์™€ ํ•ด์‹ฑ๊ฐ’ ์ถฉ๋Œ.

๊ฒฐ๊ตญ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ง€๋ฉด, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ๊ฒฐ๊ตญ index์˜ ์ถฉ๋Œ์ด๋‹ค. ํ•ด์‹œ๋Š” ์›๋ž˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์œผ๋ฉด ํ•ด์‹œ๊ฐ’๋„ ํ•ญ์ƒ ๊ฐ™๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๋˜ํ•œ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ๋‹ค.

  • Collision ํ˜„์ƒ.

๊ทธ๋Ÿผ์—๋„ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์“ฐ๋Š” ์ด์œ ?

์ ์€ ์ž์›์œผ๋กœ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

ํ•˜๋“œ ๋””์Šคํฌ๋‚˜ ํด๋ผ์šฐ๋“œ์— ์กด์žฌํ•˜๋Š” ๋ฌดํ•œํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ์œ ํ•œํ•œ ๊ฐœ์ˆ˜์˜ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋งคํ•‘ํ•˜๋ฉด ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ๋กœ๋„ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

  • ์–ธ์ œ๋‚˜ ๋™์ผํ•œ ํ•ด์‹œ ๊ฐ’์„ ๋ฆฌํ„ด, index๋ฅผ ์•Œ๋ฉด ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

  • ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(1) [์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” O(logN)]

โœจ ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. Separate Chaining

https://user-images.githubusercontent.com/33534771/74128107-bdc93a00-4c1f-11ea-9cfb-32f0035eee33.png
  • Key์— ๋Œ€ํ•œ index๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ LinkedList๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • index๋กœ ์ธํ•ด์„œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ index๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” LinkedList์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ, ์„ ํ˜• ํƒ์ƒ‰์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

    • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(N)

  • LinkedList ๋Œ€์‹  ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ์„ฑ๋Šฅ์„ ๊ฐœ์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  • JDK 1.8์˜ ๊ฒฝ์šฐ index์— ๋…ธ๋“œ๊ฐ€ 8๊ฐœ ์ดํ•˜์ธ ๊ฒฝ์šฐ์—๋Š” LinkedList๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  8๊ฐœ๋ฅผ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ์—๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.

  1. Open Addressing

  • ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ์–ป์€ ์ฃผ์†Œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. (ํ•ด๋‹น ํ‚ค ๊ฐ’์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด ๋‹ค์Œ ์ฃผ์†Œ์— ์ €์žฅ.)

  • ์„ ํ˜• ํƒ์‚ฌ(Linear Probing)

    • ํ˜„์žฌ ์ฃผ์†Œ์—์„œ ๊ณ ์ • ํฌ๊ธฐ(ex.1)๋งŒํผ ๋‹ค์Œ ์ฃผ์†Œ๋กœ ์ด๋™ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

  • ์ œ๊ณฑ ํƒ์‚ฌ(Quadratic Probing)

    • ๊ณ ์ • ํฌ๊ธฐ๋งŒํผ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ด๋™ ํฌ๊ธฐ๊ฐ€ ์ œ๊ณฑ์ˆ˜๋กœ ๋Š˜์–ด๋‚˜๋Š” ๋ฐฉ์‹์ด๋‹ค. (1,4,9,16...)

  • ์ด์ค‘ ํ•ด์‹ฑ(Double Hashing)

    • ํ•ด์‹œ ์ถฉ๋Œ ์‹œ ๋‹ค๋ฅธ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ•œ๋ฒˆ ๋” ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ์žฌํ•ด์‹ฑ(Rehashing)

    • ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ณ , ๋Š˜์–ด๋‚œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ์— ๋งž์ถ”์–ด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ํ•ด์‹ฑํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

Open Addressing ๋ฐฉ์‹์€ ์‚ญ์ œ ์ฒ˜๋ฆฌ์‹œ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ A๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ B๋ฅผ ์ €์žฅํ•  ๋•Œ ์ถฉ๋Œ(A์™€ ๊ฐ™์€ ๊ฐ’)์ด ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

์ด๋•Œ, ๋ฐ์ดํ„ฐ A๊ฐ€ ์‚ญ์ œ๋  ๊ฒฝ์šฐ ์ฐพ์œผ๋ ค๊ณ  ํ•˜๋Š” index๋ฅผ ์ฐพ๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์–ด์„œ ๊ฒ€์ƒ‰์„ ๋ฉˆ์ถ”๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ B๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ ํ›„์— ๋”๋ฏธ ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค. ์‹ค์ œ๋กœ ๊ฐ’์„ ๊ฐ€์ง€์ง„ ์•Š์ง€๋งŒ ๊ฒ€์ƒ‰ ์‹œ ๋‹ค์Œ index๊นŒ์ง€ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜์—ฌ ๋”๋ฏธ ๋…ธ๋“œ๊ฐ€ ์ฆ๊ฐ€ํ•œ ๊ฒฝ์šฐ, ์กฐํšŒํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋”๋ฏธ ๋…ธ๋“œ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋”๋ฏธ ๋…ธ๋“œ๊ฐ€ ์ผ์ • ๊ฐฏ์ˆ˜๊ฐ€ ๋„˜์–ด๊ฐ€๋ฉด ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๋ฆฌ๋นŒ๋”ฉํ•ด์•ผ ํ•œ๋‹ค.

โœจ HashTable ve HashMap

  • HashMap : Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด HashTable์„ ์‚ฌ์šฉํ•œ ํด๋ž˜์Šค๋กœ key์™€ value์— Null์ด ํ—ˆ์šฉ๋œ๋‹ค. ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • HashTable : HashMap๋ณด๋‹ค ์†๋„๋Š” ๋А๋ฆฌ์ง€๋งŒ, ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•˜๋ฉฐ key์™€ value์— null์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

์ฝ์–ด๋ณด๋ฉด ์ข‹์€ ๊ธ€

Last updated