์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- useRef
- Flex
- Gatsby
- ์๊ณ ๋ฆฌ์ฆ
- ๋ธ๋ก๊ทธ
- CSS
- ํ๋ก ํธ์๋
- ์ฝ๋ฉํ ์คํธ
- fetch API
- position
- float
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- history api
- ํ๋ก๊ทธ๋๋จธ์ค
- useEffect
- ๋ฐ๋ธ์ฝ์ค
- Props
- REACT
- Today
- Total
Daehyunii's Dev-blog
16 ์ด์ง ๊ฒ์ ํธ๋ฆฌ ๋ณธ๋ฌธ
16 ์ด์ง ๊ฒ์ ํธ๋ฆฌ
Daehyunii 2022. 8. 14. 15:5416.1 ํธ๋ฆฌ๋?
์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ์ด์ง ํธ๋ฆฌ์ ํ ์ข ๋ฅ์ด๊ณ , ์ด์ง ํธ๋ฆฌ๋ ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ์ ํ ์ข ๋ฅ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ํธ๋ฆฌ๋ ๋ฌด์์ผ๊น?
ํธ๋ฆฌ๋, ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ฒ๋ผ ๋ ธ๋๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค. ํ์ง๋ง ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ๋ค๋ฅด๊ฒ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ค. ๋ฆฌ์คํธ๋ ์ ํ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. ๋ง ๊ทธ๋๋ก ํ๋์ ์ค๋ก ์ด์ด์ ธ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ํ์ง๋ง ํธ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ๋์ ์ค๋ก ์ฐ๊ฒฐ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋น์ ํ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. ์ฃผ์ํด์ผ ํ ์ ์ ๋ ธ๋๋ค์ด ์์ ๋ณด๋ค ๋ ๋ฎ์ ๊ณณ์ ์์ง ์์ ๋ค๋ฅธ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ์๋ ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ๊ฐ ์๋๋ค. ์ฆ, ๋ ธ๋๊ฐ ํ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ, ์์์ด ๋ถ๋ชจ๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฒฝ์ฐ์๋ ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ๊ฐ ์๋๋ค. ํธ๋ฆฌ์์๋ ๋ชจ๋ ๋ ธ๋๋ค์ด ๋ฃจํธ๋ ธ๋์์ ๋ฉ์ด์ง๋ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐ๋๋ค. ๋ฃจํธ๋ ํ๋์ด์ด์ผ ํ๊ณ ๋ฃจํธ๊ฐ ๋ ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ๊ฐ ์๋๋ค. ์ฆ, ์ถ๋ฐ์ ์ ๋ฃจํธ ๋จ ํ๋๋ค. ์ด์์ฒด์ ์์ ํด๋๊ฐ ์์ฑ๋๋ ๋ฐฉ์์ ๋ ์ฌ๋ฆฐ๋ค๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
โป์ฉ์ด ์ ๋ฆฌ
1) ๋ฃจํธ - ํธ๋ฆฌ์ ๊ผญ๋๊ธฐ์ ์๋ ์ ์ผํ ๋ ธ๋๋ฅผ ์ผ์ปซ๋ ๋ง
2) ์๋น๋ง - ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง๋ ๋ ธ๋๋ค์ ์ผ์ปซ๋ ๋ง
3) ๋ฆฌํ - ์์์ด ์๋ ๋ ธ๋๋ฅผ ์ผ์ปซ๋ ๋ง
4) ๊ฐ์ - ์ฐ๊ฒฐ์ ์๋ฏธํ๋ ์ฉ์ด
16.2 ์ด์ง ๊ฒ์ ํธ๋ฆฌ
์์์ ์ธ๊ธํ๋ฏ์ด ํธ๋ฆฌ์ ํ ์ข ๋ฅ๋ก ์ด์ง ํธ๋ฆฌ๊ฐ ์๋ค. ํธ๋ฆฌ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋ง์ ์ ํ์ด ์์ง๋ง ํธ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ ๊ท์น์ ๋์ผํ๋ค. ๋ค๋ง ์ข ๋ฅ์ ๋ฐ๋ผ ์กฐ๊ธ์ฉ ์ถ๊ฐ๋๋ ๊ท์น์ด ์กด์ฌํ ๋ฟ์ด๋ค. ๊ทธ ์ค์์ ์ด์ง ํธ๋ฆฌ๋ ๊ฐ ๋ ธ๋๊ฐ ์ต๋ ๋ ๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค๋ ํน๋ณํ ์กฐ๊ฑด์ด ์ถ๊ฐ๋ ํธ๋ฆฌ์ ์ข ๋ฅ์ด๋ค. ์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ์์ ํน์ฑ๋ค์์ ํน๋ณํ ๊ท์น์ด ๋ ์ถ๊ฐ๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. '๋ถ๋ชจ ๋ ธ๋์ ์ผ์ชฝ์ ์๋ ๋ชจ๋ ๋ ธ๋๋ ์ธ์ ๋ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง๊ณ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์ค๋ฅธ์ชฝ์ ์๋ ๋ชจ๋ ๋ ธ๋๋ ์ธ์ ๋ ๋ถ๋ชจ๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ๋๋ค' ๋ผ๋ ๊ท์น์ด ์ถ๊ฐ๋๋ค. ์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ํน์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋๋ฐ ์์ฃผ ํจ์จ์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๋ ธ๋์ ์๋ง์ ์๋ฆฌ๋ฅผ ์ฐพ๋ ๊ฒ๋ ์ฉ์ดํ๋ค.
ํธ๋ฆฌ | -๋
ธ๋๋ค ์ฌ์ด์ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ๊ฐ๋๋ค. -๋ถ๋ชจ ๋ ธ๋๋ง์ด ์์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค. -๋ฃจํธ๋ ํ๋์ด์ด์ผ ํ๋ค. -๋ชจ๋ ๋ ธ๋๋ค์ด ๋ฃจํธ๋ ธ๋์์ ๋ฉ์ด์ง๋ ๋ฐฉ์์ผ๋ก ์ฐ๊ฒฐ๋๋ค. |
์ด์ง ํธ๋ฆฌ | -ํธ๋ฆฌ์ ํน์ฑ -๊ฐ ๋ ธ๋๊ฐ ์ต๋ ๋๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์๋ค. |
์ด์ง ๊ฒ์ ํธ๋ฆฌ | -ํธ๋ฆฌ์ ํน์ฑ -์ด์ง ํธ๋ฆฌ์ ํน์ฑ -๋ถ๋ชจ๋ ธ๋ ์ผ์ชฝ์ ๋ ์์ ๊ฐ, ์ค๋ฅธ์ชฝ์ ๋ ํฐ ๊ฐ์ผ๋ก ์ฐ๊ฒฐ |
16.3 ์ด์ง ๊ฒ์ ํธ๋ฆฌ & ๋ ธ๋ ํด๋์ค
๋ ธ๋๋ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ ๊ฐ๋ฆฌํค๋ ํ๋กํผํฐ์ ๊ฐ์ ๊ฐ๋ฆฌํค๋ ํ๋กํผํฐ๋ก ๊ตฌ์ฑ๋๋ฉฐ, ์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ๋ฃจํธ ํ๋กํผํฐ๋ฅผ ๋ง๋ค์ด ๋ฃจํธ ๋ ธ๋๋ฅผ ์ ์ฅํด ์ค๋ค. ๋ค์ ๋งํ์ง๋ง ๋ฃจํธ ๋ ธ๋๋ ํ๋๋ง ์กด์ฌํด์ผ ํ๋ค.
class Node {
constructor(value){
this.value = value;
this.left = null;
this.right = null;
}
}
class BinarySearchTree {
constructor(){
this.root = null;
}
}
16.4 Insert ๋ฉ์๋
Insert ๋ฉ์๋๋ ์๋ก์ด ๋ ธ๋๋ฅผ ๋ง๋ค์ด์ ์ด์ง ๊ฒ์ ํธ๋ฆฌ ๋ด์ ์๋ง์ ์๋ฆฌ์ ๋ ธ๋๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ซ์์ธ ๊ฒฝ์ฐ์ ์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค.
โ์๋์ฝ๋
1) ์๋ก์ด ๋ ธ๋๋ฅผ ๋ง๋ ๋ค.
2) ์ด์ง ๊ฒ์ ํธ๋ฆฌ์ ๋ฃจํธ ๋ ธ๋๊ฐ ์๋ ํ์ธํ๋ค.(์๋ค๋ฉด ๋ฃจํธ ๋ ธ๋๊ฐ ๋๋ฉด ๋๋ค)
3) ๊ทธ๊ฒ ์๋๋ผ๋ฉด, ์๋ก์ด ๋ ธ๋์ ๊ฐ์ด ๋ฃจํธ์ ๊ฐ๋ณด๋ค ํฐ์ง ์์์ง ํ์ธํด์ผ ํ๋ค.
4) ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ์ ๋ ํฌ๋ค๋ฉด ๋ ธ๋์ ์ค๋ฅธ์ชฝ์ ๊ฐ์ด ์๋ ํ์ธํ๋ค.
5) ์ค๋ฅธ์ชฝ ๋ ธ๋์ ๊ฐ์ด ์๋ค๋ฉด ์๋ก์ด ๋ ธ๋์ ๋น๊ตํ๊ณ ์๋ค๋ฉด ์ผ์ชฝ์ผ๋ก, ํฌ๋ค๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ์ฌ ๋ ธ๋๊ฐ ์๋ ํ์ธํ๋ค.
6) ์ด๋ฌํ ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ๋ ์ด์ ๋น๊ตํ ๋ ธ๋๊ฐ ์๋ ์๋ฆฌ์ ๋์ฐฉํ๋ฉด ๊ฐ์ ์ ์ฅํ๋ค.
class Node {
constructor(value){
this.value = value;
this.left = null;
this.right = null;
}
}
class BinarySearchTree {
constructor(){
this.root = null;
}
insert(value){
var newNode = new Node(value);
if(this.root === null){
this.root = newNode;
return this;
}
var current = this.root;
while(true){
if(value === current.value) return undefined; // ์ด๋ฏธ ์๋ ๊ฐ์ ๋ฐ์๋ฒ๋ฆฌ๋ฉด ๋ฌดํ ๋ฃจํ์ ๋น ์ง
//๊ทธ๋์ ์ด๊ฑธ ๋ง๋ค์ด ์ค์ผ ํจ(์๋ ์กฐ๊ฑด๋ฌธ์ ํฐ์ง ์์์ง๋ง ๋น๊ตํ๋ฏ๋ก)
if(value < current.value){
if(current.left === null){ // ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
current.left = newNode;
return this;
}
current = current.left; // ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ํฌ์ธํฐ ์ด๋
} else {
if(current.right === null){ // ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
current.right = newNode;
return this;
}
current = current.right; // ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ํฌ์ธํฐ ์ด๋
}
}
}
16.5 Find or Search ๋ฉ์๋
Find or Search ๋ฉ์๋๋(์ด๋ฆ์ ์ค์ํ์ง ์์) ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์ธ์๋ก ๋ฐ์ ๊ฐ์ด ํธ๋ฆฌ์ ์๋์ง ๊ฒ์ํ๋ ๊ธฐ๋ฅ์ ํ๋ค. ์ด ๊ณผ์ ์ ์ด์ง ๊ฒ์ ํธ๋ฆฌ์์์ ์๋ก์ด ๊ฐ์ ์ฝ์ ๊ณผ์ ๊ณผ ์์ฃผ ๋น์ทํ๋ค.
โ์๋์ฝ๋
1) ๋ฃจํธ ๋ ธ๋๊ฐ ์๋ ํ์ธํ๋ค.(๋ฃจํธ๊ฐ ์๋ค๋ฉด ๋ฐ๋ก ์๋ค๋ ํํ์ ๋ฐํํด์ฃผ๋ฉด ๋๋ค.)
2) ๋ฃจํธ ๋ ธ๋๊ฐ ์๋ค๋ฉด ํ์ธํ๊ณ ์ ํ๋ ๊ฐ๊ณผ ๋ฃจํธ์ ๊ฐ์ด ๋์ผํ์ง ํ์ธํ๋ค.(๋์ผํ๋ค๋ฉด ๋)
3) ๊ทธ๊ฒ ์๋๋ผ๋ฉด ๊ฐ์ด ๋ ํฐ์ง ์์์ง ํ์ธํ๋ค.
4) ํ์ธ ํ, ์ผ์ชฝ ํน์ ์ค๋ฅธ์ชฝ์ ๋ ธ๋๊ฐ ์๋์ง ํ์ธํ๊ณ , ๊ฐ์ด ์ผ์นํ๋์ง ํ์ธํ๋ค.
5) ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
class Node {
constructor(value){
this.value = value;
this.left = null;
this.right = null;
}
}
class BinarySearchTree {
constructor(){
this.root = null;
}
insert(value){
var newNode = new Node(value);
if(this.root === null){
this.root = newNode;
return this;
}
var current = this.root;
while(true){
if(value === current.value) return undefined; // ์ด๋ฏธ ์๋ ๊ฐ์ ๋ฐ์๋ฒ๋ฆฌ๋ฉด ๋ฌดํ ๋ฃจํ์ ๋น ์ง
//๊ทธ๋์ ์ด๊ฑธ ๋ง๋ค์ด ์ค์ผ ํจ(์๋ ์กฐ๊ฑด๋ฌธ์ ํฐ์ง ์์์ง๋ง ๋น๊ตํ๋ฏ๋ก)
if(value < current.value){
if(current.left === null){ // ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
current.left = newNode;
return this;
}
current = current.left; // ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ํฌ์ธํฐ ์ด๋
} else {
if(current.right === null){ // ๊ฐ์ด ์๋ ๊ฒฝ์ฐ
current.right = newNode;
return this;
}
current = current.right; // ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ํฌ์ธํฐ ์ด๋
}
}
}
find(value){
if(this.root === null) return false;
var current = this.root
var found = false;
while(current && !found){
if(value < current.value){
current = current.left;
} else if(value > current.value){
current = current.right;
} else {
found = true;
}
}
if(!found) return undefined;
return current;
}
}
16.6 ์ด์ง ๊ฒ์ ํธ๋ฆฌ ๋น ์ค ํ๊ธฐ๋ฒ(๊ฐ์ฅ ์ข์ ์ํฉ & ํ๊ท ์ ์ธ ์ํฉ)
1) Insertion - O(log N)
2) Searching - O(log N)
์ฃผ์ ํด์ผํ ์ ์ ์ต์ ์ ๊ฒฝ์ฐ์๋ O(N) ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์๋ ์๋ค.(ex) ํ ์ค๋ก๋ง ์ญ ๋ ธ๋๋ค์ด ์ด์ด์ง๋ ๊ฒฝ์ฐ) ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ์ฐจ๋ผ๋ฆฌ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๋ ์ ํฉํ๋ค.
'๐ Language & CS knowledge > Algorithm & Data structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
18 ์ด์ง ํ (0) | 2022.08.16 |
---|---|
17 ํธ๋ฆฌ ์ํ (0) | 2022.08.16 |
15 ์คํ & ํ (0) | 2022.08.14 |
14 ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2022.08.13 |
13 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2022.08.12 |