๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

CS/์ž๋ฃŒ๊ตฌ์กฐ

์ž๋ฃŒ๊ตฌ์กฐ ๋ฉด์ ‘ ์งˆ๋ฌธ

๐Ÿ’ก Array(List)์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•๊ณผ ๊ทธ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์žฅ์ ๊ณผ ๋‹จ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Array์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ์— ์ˆœ์„œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” index๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, index๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ์š”์†Œ๋ฅผ ์ฐพ๊ณ  ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด Array์˜ ์žฅ์ ์ž…๋‹ˆ๋‹ค.

์ˆœ์ฐจ์ ์œผ๋กœ ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ค‘๊ฐ„์— ์š”์†Œ๊ฐ€ ์‚ฝ์ž…๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋Š” ๊ฒฝ์šฐ ๊ทธ ๋’ค์˜ ๋ชจ๋“  ์š”์†Œ๋“ค์„ ํ•œ ์นธ์”ฉ ๋’ค๋กœ ๋ฐ€๊ฑฐ๋‚˜ ๋‹น๊ฒจ์ค˜์•ผ ํ•˜๋Š” ๋‹จ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ Array๋Š” ์ •๋ณด๊ฐ€ ์ž์ฃผ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ธฐ์—๋Š” ์ ์ ˆ์น˜ ์•Š์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’ก Array๋ฅผ ์ ์šฉ์‹œํ‚ค๋ฉด ์ข‹์„ ๋ฐ์ดํ„ฐ์˜ ์˜ˆ๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ๋“ค์–ด์ฃผ์„ธ์š”. ๊ตฌ์ฒด์  ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ Array๋ฅผ ์ ์šฉํ•˜๋ฉด ์ข‹์€ ์ด์œ , ๊ทธ๋ฆฌ๊ณ  Array๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ํ•จ๊ป˜ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋”๋ณด๊ธฐ

Array๋ฅผ ์ ์šฉ์‹œํ‚ค๋ฉด ์ข‹์€ ์˜ˆ๋กœ ์ฃผ์‹ ์ฐจํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์‹ ์ฐจํŠธ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋Š” ์š”์†Œ๊ฐ€ ์ค‘๊ฐ„์— ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋Š” ์ •๋ณด๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ๋‚ ์งœ๋ณ„๋กœ ์ฃผ์‹ ๊ฐ€๊ฒฉ์ด ์ฐจ๋ก€๋Œ€๋กœ ์ €์žฅ๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

์ฆ‰, ์ˆœ์„œ๊ฐ€ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ Array ๊ฐ™์ด ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•ด์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Array๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆœ์„œ๊ฐ€ ์—†๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‚ ์งœ๋ณ„ ์ฃผ์‹ ๊ฐ€๊ฒฉ์„ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฉฐ ๋งค๋ฒˆ ์ „์ฒด ์ž๋ฃŒ๋ฅผ ์ฝ์–ด ๋“ค์ด๊ณ  ๋น„๊ตํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก Stack๊ณผ Queue, Tree์™€ Heap์˜ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Stack๊ณผ Queue๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…์ด๋ฉฐ, Array์™€ LinkedList๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Stack์€ ํ›„์ž…์„ ์ถœ(LIFO)๋ฐฉ์‹ ์ฆ‰, ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๊ณ 

Queue๋Š” ์„ ์ž…์„ ์ถœ(FIFO)๋ฐฉ์‹ ์ฆ‰, ๋จผ์ € ๋“ค์–ด๊ฐ„ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

Tree๋Š” ์Šคํƒ๊ณผ ํ์™€ ๊ฐ™์€ ์„ ํ˜• ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ, ๊ณ„์ธต์  ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Heap์€ ์ตœ๋Œ“๊ฐ’ ๋˜๋Š” ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๊ตฌ์กฐ๋กœ,

๊ฐ ๋…ธ๋“œ์˜ ํ‚ค๊ฐ’์ด ์ž์‹์˜ ํ‚ค๊ฐ’๋ณด๋‹ค ์ž‘์ง€ ์•Š๊ฑฐ๋‚˜(์ตœ๋Œ€ํž™) ๊ทธ ์ž์‹์˜ ํ‚ค๊ฐ’๋ณด๋‹ค ํฌ์ง€ ์•Š์€(์ตœ์†Œํž™) ์™„์ „์ด์ง„ํŠธ๋ฆฌ ์ž…๋‹ˆ๋‹ค.

 

https://mangkyu.tistory.com/89

 

 


๐Ÿ’ก Stack๊ณผ Queue์˜ ์‹ค์‚ฌ์šฉ ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Stack - ์ž๋ฐ”์˜ Stack ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ์ดํ„ฐ ๊ฐ’์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ด๋ฉฐ, ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๊ณ  ์ข…๋ฃŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜๋ฉฐ,

LIFO(Last In First Out)๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

 

Queue - OS์˜ ์Šค์ผ€์ฅด๋Ÿฌ

์ž์›์˜ ํ• ๋‹น๊ณผ ํšŒ์ˆ˜๋ฅผ ํ•˜๋Š” ์Šค์ผ€์ฅด๋Ÿฌ ์—ญํ• ์„ ํ๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋œ ๋‹ค์ˆ˜์˜ ํ”„๋กœ์„ธ์Šค ์ค‘ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ž์›์„ ํ• ๋‹นํ•  ๊ฒƒ์ธ๊ฐ€ ๊ทธ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ž์›์˜ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ์— ์žˆ๊ณ ,

๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ํ˜•ํƒœ์˜ ์Šค์ผ€์ฅด๋ง ์ •์ฑ…์ด ์„ ์ž…์„ ์ฒ˜๋ฆฌ(First Com First Served) ์ฆ‰, ํ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ’ก Stack ํด๋ž˜์Šค๋ฅผ ์†์ฝ”๋”ฉ์œผ๋กœ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”.

 
public class Stack {
 
private static int MAX_STACK_SIZE = 10;
 
private int top;
 
private int[] data = new int[MAX_STACK_SIZE];
 
 
 
public Stack() {
 
top = -1;
 
}
 
 
 
public void push(int data_) throws Exception {
 
if (isFull()) {
 
throw new Exception("์Šคํƒ์ด ๊ฐ€๋“ ์ฐผ์Šต๋‹ˆ๋‹ค.");
 
}
 
data[++top] = data_;
 
}
 
 
 
public int pop() throws Exception {
 
if (isEmpty()) {
 
throw new Exception("์Šคํƒ์ด ๋น„์—ˆ์Šต๋‹ˆ๋‹ค.");
 
}
 
return data[top--];
 
}
 
 
 
public int peek() throws Exception {
 
if (isEmpty()) {
 
throw new Exception("์Šคํƒ์ด ๋น„์—ˆ์Šต๋‹ˆ๋‹ค.");
 
}
 
return data[top];
 
}
 
 
 
public boolean isEmpty() {
 
return top == -1;
 
}
 
 
 
public boolean isFull() {
 
return top == MAX_STACK_SIZE - 1;
 
}
 
 
 
public int size() {
 
return top + 1;
 
}
 
}

๐Ÿ’ก Priority Queue(์šฐ์„ ์ˆœ์œ„ ํ)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋“ค์–ด๊ฐ„ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๊บผ๋‚ด๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์šฐ์„ ์ˆœ์œ„ ํ ๊ตฌํ˜„ ๋ฐฉ์‹์—๋Š” ๋ฐฐ์—ด, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ํž™์ด ์žˆ๊ณ , ๊ทธ์ค‘ ํž™ ๋ฐฉ์‹์ด worst case๋ผ๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(logN)์„ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ํž™์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก Array์™€ ArrayList์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

Array๋Š” ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •์ ์ด๊ณ , ArrayList๋Š” ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ ์ž…๋‹ˆ๋‹ค.

Array๋Š” ์ดˆ๊ธฐํ™” ์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜์–ด ArrayList๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ ,

ArrayList๋Š” ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ Array๋ณด๋‹ค ๋А๋ฆฝ๋‹ˆ๋‹ค.


๐Ÿ’ก Array์™€ LinkedList์˜ ์žฅ/๋‹จ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

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

ํ•˜์ง€๋งŒ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œ์˜ ๊ณผ์ •์—์„œ ๊ฐ ์›์†Œ๋“ค์„ shift ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋น„์šฉ์ด ์ƒ๊ฒจ ์ด ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

ํ•˜์ง€๋งŒLinkedList๋Š” ์›ํ•˜๋Š” ์œ„์น˜์— ํ•œ ๋ฒˆ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ์œ„์น˜์— ์‚ฝ์ž…์„ ํ•˜๊ณ ์ž ํ•˜๋ฉด ์›ํ•˜๋Š” ์œ„์น˜๋ฅผ Search ๊ณผ์ •์— ์žˆ์–ด์„œ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ๋‹ค ํ™•์ธํ•ด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๋ฉด,

Array๋Š” ๊ฒ€์ƒ‰์ด ๋น ๋ฅด์ง€๋งŒ, ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋А๋ฆฌ๋‹ค.

LinkedList๋Š” ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋น ๋ฅด์ง€๋งŒ, ๊ฒ€์ƒ‰์ด ๋А๋ฆฌ๋‹ค.


๐Ÿ’ก ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)๊ณผ ์‹œ๊ฐ„ ๋ณต์žก๋„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ (Key, Value)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋กœ ๋น ๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

๋น ๋ฅธ ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ด์œ ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฐฐ์—ด(๋ฒ„ํ‚ท)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฐ Key๊ฐ’์€ ํ•ด์‹œํ•จ์ˆ˜์— ์˜ํ•ด ๊ณ ์œ ํ•œ index๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ‰๊ท  O(1)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ index๊ฐ’์ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ Chanining์— ์—ฐ๊ฒฐ๋œ ๋ฆฌ์ŠคํŠธ๋“ค๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ O(N)๊นŒ์ง€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

https://mangkyu.tistory.com/89

 


๐Ÿ’ก Hash Map๊ณผ Hash Table์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

๋™๊ธฐํ™” ์ง€์› ์—ฌ๋ถ€์™€ null ๊ฐ’ ํ—ˆ์šฉ ์—ฌ๋ถ€์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)
    • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ (๋™๊ธฐํ™”๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ) Thread-safe ํ•˜๋‹ค.
    • Null ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ•ด์‹œ ๋งต(Hash Map)
    • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์„ ๋•Œ (๋™๊ธฐํ™”๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ) Thread-safeํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • Null ๊ฐ’์„ ํ—ˆ์šฉํ•œ๋‹ค.

๐Ÿ’ก BST(Binary Search Tree)์™€ Binary Tree์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ด์ง„ํŠธ๋ฆฌ(Binary Tree)๋Š” ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์ธ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋œ ํŠธ๋ฆฌ์ด๊ณ ,

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST)๋Š” ์ด์ง„ ํƒ์ƒ‰๊ณผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฒฐํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰์˜ ํšจ์œจ์ ์ธ ํƒ์ƒ‰ ๋Šฅ๋ ฅ์„ ์œ ์ง€ํ•˜๋ฉด์„œ, ๋นˆ๋ฒˆํ•œ ์ž๋ฃŒ ์ž…๋ ฅ๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์™ผ์ชฝ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์•„์•ผ ํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ ํŠธ๋ฆฌ์˜ ๊ฐ’์€ ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ์ปค์•ผ ํ•˜๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ํƒ์ƒ‰ ์—ฐ์‚ฐ์€ ํŠธ๋ฆฌ์˜ ๋†’์ด์— ์˜ํ–ฅ์„ ๋ฐ›์•„ ๋†’์ด๊ฐ€ h์ผ ๋•Œ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(h)์ด๋ฉฐ,

ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์ด ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์ณ์ง„ ๊ฒฝ์šฐ worst case๊ฐ€ ๋˜๊ณ  O(n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์ด๋Ÿฐ worst case๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ธฐ๋ฒ•์ด RBT(Red-Black Tree)์ž…๋‹ˆ๋‹ค.


๐Ÿ’ก RBT(Red-Black Tree)์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

RBT(Red-Black Tree)๋Š” BST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํŠธ๋ฆฌ ํ˜•์‹ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋ฉฐ,

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

BST๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํžˆ BST์˜ ํŠน์ง•์„ ๋ชจ๋‘ ๊ฐ–์Šต๋‹ˆ๋‹ค.

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

๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋นจ๊ฐ„์ƒ‰ ๋˜๋Š” ๊ฒ€์€์ƒ‰์œผ๋กœ ์ƒ‰์น ํ•˜๋ฉฐ, ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์€ ์ƒ‰์ด ์ค‘๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

https://coding-factory.tistory.com/557?category=758267

์ถœ์ฒ˜: https://dev-coco.tistory.com/159 [์Šฌ๊ธฐ๋กœ์šด ๊ฐœ๋ฐœ์ƒํ™œ:ํ‹ฐ์Šคํ† ๋ฆฌ]