diff --git "a/DataStructure/\352\267\270\353\236\230\355\224\204/\352\267\270\353\236\230\355\224\204_\354\230\210\354\247\200.md" "b/DataStructure/\352\267\270\353\236\230\355\224\204/\352\267\270\353\236\230\355\224\204_\354\230\210\354\247\200.md" new file mode 100644 index 0000000..42636c1 --- /dev/null +++ "b/DataStructure/\352\267\270\353\236\230\355\224\204/\352\267\270\353\236\230\355\224\204_\354\230\210\354\247\200.md" @@ -0,0 +1,157 @@ +## ๐Ÿ“– ํ•™์Šต ์ฃผ์ œ + +- **์ฃผ์ œ**: ๊ทธ๋ž˜ํ”„ +- **๋‚ ์งœ**: 2024.10.21 - 2024.10.27 + +--- + +## ๐Ÿ“Œ ํ•™์Šต ๋‚ด์šฉ ์š”์•ฝ + +### [๊ทธ๋ž˜ํ”„] + +- `๊ทธ๋ž˜ํ”„`: ์ •์ ์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ„์„  ํ˜น์€ ๋งํฌ๋กœ ์—ฐ๊ฒฐํ•œ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ + - ํŠธ๋ฆฌ์™€์˜ ์ฐจ์ด์  + - ํŠธ๋ฆฌ๋Š” ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ๊ฐ„์— ์ƒํ•˜ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง + - ๊ทธ๋ž˜ํ”„๋Š” ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ์ •์ ๋ผ๋ฆฌ ์ƒํ•˜ ๊ด€๊ณ„๋ฅผ ๊ฐ–์ง€ ์•Š์Œ + - ๊ทธ๋ž˜ํ”„์˜ ์œ ํ˜• + - `์—ฐ๊ฒฐ/๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„` + - `๋ฐฉํ–ฅ/๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„` + - `๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„` + - `์„œ๋ธŒ๊ทธ๋ž˜ํ”„` + +--- + +### ๊ทธ๋ž˜ํ”„์˜ ์œ ํ˜• + +- `์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„` : ๊ทธ๋ž˜ํ”„ ์ƒ์— ์žˆ๋Š” ์ž„์˜์˜ ๋‘ ์ •์  ์‚ฌ์ด์˜ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ทธ๋ž˜ํ”„ + - 2๊ฐœ์˜ ์•„๋ฌด ์ •์ ์ด๋‚˜ ๊ณจ๋ผ ๊ฐ„์„ ์œผ๋กœ ์ด์„ ์ˆ˜ ์žˆ์œผ๋ฉด `์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„` +- `๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„` : ์–ด๋–ค ์ •์  ์‚ฌ์ด์—๋Š” ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ + + ![](https://velog.velcdn.com/images/yjlee0006/post/bc18eb16-75ba-40a8-bada-08ddf4d1ccce/image.png) + +- `๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„` : ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ +- `๋ฌด๋ฐฉํ–ฅ๊ทธ๋ž˜ํ”„` : ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„ + +![](https://velog.velcdn.com/images/yjlee0006/post/bc2e8585-5aa1-497a-884c-3675e47632aa/image.png) + +- `๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„` : ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๊ฐ€ ๋ถ€์—ฌ๋œ ๊ทธ๋ž˜ํ”„ + - ๊ฐ„์„ ์— ๋ถ€์—ฌ๋œ ๊ฐ’ = ๊ฐ€์ค‘์น˜ = ๋น„์šฉ + +![](https://velog.velcdn.com/images/yjlee0006/post/a6aa0a61-6602-403a-987b-3e1ca9d7b416/image.png) + +- `์„œ๋ธŒ ๊ทธ๋ž˜ํ”„` : ํŠน์ • ๊ทธ๋ž˜ํ”„์˜ ์ •์ ๊ณผ ๊ฐ„์„ ์˜ ์ผ๋ถ€๋ถ„์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ทธ๋ž˜ํ”„ + +![](https://velog.velcdn.com/images/yjlee0006/post/2406e7ab-5836-43a9-b2fe-11c7be1d60d3/image.png) + +--- + +### ๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„ + +- **์ธ์ ‘ ํ–‰๋ ฌ ๊ธฐ๋ฐ˜ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„** : N x N ํฌ๊ธฐ์˜ ํ–‰๋ ฌ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• + + - N์€ ์ •์ ์˜ ๊ฐœ์ˆ˜ + - <ํ–‰, ์—ด> ๊ฐ’์€ <์ถœ๋ฐœ์ •์ , ๋„์ฐฉ์ •์ > + +- **์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜ ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„** : ๊ทธ๋ž˜ํ”„์˜ ํŠน์ • ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋œ ์ •์ ๋“ค์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• + +![](https://velog.velcdn.com/images/yjlee0006/post/05b047c7-8d77-4451-9f29-e6b93bc193fd/image.png) + +--- + +### ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +-**๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)** : ๋” ์ด์ƒ ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•œ ์ •์ ์ด ์—†์„ ๋•Œ๊นŒ์ง€ ์ตœ๋Œ€ํ•œ ๊นŠ์ด ํƒ์ƒ‰ํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ํƒ์ƒ‰๋ฐฉ๋ฒ• + +![](https://velog.velcdn.com/images/yjlee0006/post/d459f4c0-998c-4b3e-b455-89cd56ce0667/image.png) + +- **๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)** : ์ตœ๋Œ€ํ•œ ๋„“๊ฒŒ ํƒ์ƒ‰ํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๋ฐฉ๋ฒ•, ์ธ์ ‘ํ•œ ๋ชจ๋“  ์ •์ ๋“ค์„ ๋ฐฉ๋ฌธํ•˜๊ณ , ๋ฐฉ๋ฌธํ•œ ์ •์ ๋“ค๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธ, ๋ฐฉ๋ฌธํ•œ ์ •์ ๋“ค๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ •์ ๋“ค์„ ๋ฐฉ๋ฌธํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ํƒ์ƒ‰ ๋ฐฉ๋ฒ• + +- DFS -> ๋ฐฐ์—ด / ์Šคํƒ ์‚ฌ์šฉ + - ๋ฐฐ์—ด : ํŠน์ •์ •์ ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ํ™•์ธ + - ์Šคํƒ : ๋ฐฉ๋ฌธ ์ค‘ ๋’ค๋กœ๊ฐ€๊ธฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ +- BFS -> ๋ฐฐ์—ด / ํ ์‚ฌ์šฉ + + - ๋ฐฐ์—ด : ํŠน์ •์ •์ ์˜ ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ํ™•์ธ + - ํ : ์—ฐ๊ฒฐ๋œ ์ •์ ๋“ค์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ + +### ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ + +- ํ•œ ์ •์ ์—์„œ ๋ชฉ์ ์ง€ ์ •์ ๊นŒ์ง€์ด๋ฅด๋Š” ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ๋กœ + + - ํ™œ์šฉ + + - ์ง€๋„ ์„œ๋น„์Šค(๋ชฉ์ ์ง€๊นŒ์ง€ ์ด๋ฅด๋Š” ์ตœ๋‹จ๊ฑฐ๋ฆฌ) + + - ์ข…๋ฅ˜ + - **๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜** : ๊ฐ€์ค‘์น˜๊ฐ€ ์Œ์ด ์•„๋‹Œ ์ˆ˜๋ผ๋Š” ๊ฐ€์ •ํ•˜์— ์‚ฌ์šฉ๊ฐ€๋Šฅ. ํŠน์ • ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด ์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜. + +--- + +## ๐Ÿ“ˆ ์ถ”๊ฐ€ ํ•™์Šต ํ•„์š” + +์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„์— ์ž์ฃผ ๋‚˜์˜ค๋Š” DFS์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ๊ณต๋ถ€ํ•ด ๋ณด์•˜๋‹ค. + +### DFS + +- **์žฅ์ ** + - ํ˜„ ๊ฒฝ๋กœ์ƒ์˜ ๋…ธ๋“œ๋“ค๋งŒ ๊ธฐ์–ตํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ €์žฅ๊ณต๊ฐ„ ์ˆ˜์š”๊ฐ€ ๋น„๊ต์  ์ ๋‹ค. + - ๋ชฉํ‘œ ๋…ธ๋“œ๊ฐ€ ๊นŠ์€ ๋‹จ๊ณ„์— ์žˆ์„ ๊ฒฝ์šฐ ํ•ด๋ฅผ ๋นจ๋ฆฌ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. + +
+ +- **๋‹จ์ ** + - ํ•ด๊ฐ€ ์—†๋Š” ๊ฒฝ๋กœ๊ฐ€ ๊นŠ์„ ๊ฒฝ์šฐ ํƒ์ƒ‰์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค. + - ์–ป์–ด์ง„ ํ•ด๊ฐ€ ์ตœ๋‹จ ๊ฒฝ๋กœ๊ฐ€ ๋œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๋‹ค. + - ๊นŠ์ด๊ฐ€ ๋ฌดํ•œํžˆ ๊นŠ์–ด์ง€๋ฉด ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋‚  ์œ„ํ—˜์ด ์žˆ๋‹ค. (๊นŠ์ด ์ œํ•œ์„ ๋‘๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๊ฐ€๋Šฅ) + +
+ +- DFS์˜ ๊ตฌํ˜„ + + - ๋ฐฉ๋ฒ•์— ๋”ฐ๋ฅธ ๊ตฌํ˜„ ์ฐจ์ด + + - ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ๊ตฌํ˜„ + + ```python + def dfs(now, adjacent, visited): + visited[now] = True + N = len(adjacent) + + for i in range(N): + if adjacent[now][i] == 0: + continue + + if not visited[i]: + dfs(i, adjacent, visited) + + # ์‚ฌ์šฉ ์˜ˆ์‹œ + # adjacent = [[0, 1, 0], [1, 0, 1], [0, 1, 0]] # ์ธ์ ‘ ํ–‰๋ ฌ ์˜ˆ์‹œ + # visited = [False] * len(adjacent) # ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™” + # dfs(0, adjacent, visited) # ์ •์  0์—์„œ DFS ์‹œ์ž‘ + ``` + + > DFS ํ•˜๋‚˜๋‹น N๋ฒˆ์˜ loop๋ฅผ ๋Œ๊ฒŒ ๋˜๋ฏ€๋กœ O(n)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ทธ๋Ÿฐ๋ฐ N๊ฐœ์˜ ์ •์ ์„ ๋ชจ๋‘ ๋ฐฉ๋ฌธ ํ•ด์•ผํ•˜๋ฏ€๋กœ n\*O(n)์ด๋ฏ€๋กœ O(n^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. + + - ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ + + ```python + def dfs(now, adjacent, visited): + visited[now] = True + + for next in adjacent[now]: + if not visited[next]: + dfs(next, adjacent, visited) + + # ์‚ฌ์šฉ ์˜ˆ์‹œ + # adjacent = [[1, 2], [0, 2], [0, 1]] # ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ์˜ˆ์‹œ + # visited = [False] * len(adjacent) # ๋ฐฉ๋ฌธ ์—ฌ๋ถ€ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™” + # dfs(0, adjacent, visited) # ์ •์  0์—์„œ DFS ์‹œ์ž‘ + ``` + + > DFS๊ฐ€ ์ด N๋ฒˆ ํ˜ธ์ถœ๋˜๊ธด ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋ฉด DFSํ•˜๋‚˜๋‹น ๊ฐ ์ •์ ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๋งŒํผ ํƒ์ƒ‰์„ ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ ์˜ˆ์ธก์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค. ๋ชจ๋“  ์ •์ ์„ ํ•œ๋ฒˆ์”ฉ ๋‹ค ๋ฐฉ๋ฌธํ•˜๊ณ , ๋ชจ๋“  ๊ฐ„์„ ์„ ํ•œ๋ฒˆ์”ฉ ๋ชจ๋‘ ๊ฒ€์‚ฌํ–ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ O(n+e)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. + +--- + +## ๐Ÿ’ก ์ฐธ๊ณ  ์ž๋ฃŒ + +- https://currygamedev.tistory.com/10 diff --git "a/DataStructure/\353\260\260\354\227\264\352\263\274 \354\227\260\352\262\260 \353\246\254\354\212\244\355\212\270/\353\260\260\354\227\264\352\263\274 \354\227\260\352\262\260 \353\246\254\354\212\244\355\212\270_\354\230\210\354\247\200.md" "b/DataStructure/\353\260\260\354\227\264\352\263\274 \354\227\260\352\262\260 \353\246\254\354\212\244\355\212\270/\353\260\260\354\227\264\352\263\274 \354\227\260\352\262\260 \353\246\254\354\212\244\355\212\270_\354\230\210\354\247\200.md" new file mode 100644 index 0000000..e79a58b --- /dev/null +++ "b/DataStructure/\353\260\260\354\227\264\352\263\274 \354\227\260\352\262\260 \353\246\254\354\212\244\355\212\270/\353\260\260\354\227\264\352\263\274 \354\227\260\352\262\260 \353\246\254\354\212\244\355\212\270_\354\230\210\354\247\200.md" @@ -0,0 +1,110 @@ +## ๐Ÿ“– ํ•™์Šต ์ฃผ์ œ + +- **์ฃผ์ œ**: ๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ +- **๋‚ ์งœ**: 2024.10.21 - 2024.10.27 + +--- + +## ๐Ÿ“Œ ํ•™์Šต ๋‚ด์šฉ ์š”์•ฝ + +### [๋ฐฐ์—ด] +- **`๋ฐฐ์—ด(array)`** : ์ผ์ •ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š” ์—ฌ๋Ÿฌ ์š”์†Œ๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜์—ด๋œ ์ž๋ฃŒ๊ตฌ์กฐ + - ๋ฐฐ์—ด์˜ ์ข…๋ฅ˜ + - ์ผ์ฐจ์› ๋ฐฐ์—ด : ํ•œ ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์š”์†Œ๊ฐ€ ๋‚˜์—ด + - ์ด์ฐจ์› ๋ฐฐ์—ด : ๋ฐฐ์—ด ์†์— ๋ฐฐ์—ด์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ + - ์‚ผ์ฐจ์› ๋ฐฐ์—ด : ๋ฐฐ์—ด ์†์— ๋ฐฐ์—ด ์†์— ๋ฐฐ์—ด์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ + - ์ •์  ๋ฐฐ์—ด : ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ๋Š” ๋ฐฐ์—ด + - ๋™์  ๋ฐฐ์—ด : ์‹คํ–‰ ๊ณผ์ •์—์„œ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด + - ํ™œ์šฉ๋„ + - ๊ด€๋ จ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ•  ๋•Œ + - ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ๋‚˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•  ๋•Œ + +
+ +- **`์ธ๋ฑ์Šค(index)`** : 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ณ ์œ ํ•œ ์ˆœ์„œ ๋ฒˆํ˜ธ + - ๋น… ์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œํ˜„ + - ์ธ๋ฑ์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐฐ์—ด์˜ ํŠน์ •์š”์†Œ์— ์ ‘๊ทผ/์ˆ˜์ •ํ•˜๋Š” ์‹œ๊ฐ„ : **`O(1)`** + - ์•ž์—์„œ ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํŠน์ • ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ์ฐพ๋Š” ์—ฐ์‚ฐ : **`O(n)`** + -> ์š”์†Œ์˜ ๊ฐฏ์ˆ˜์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ผ์ •ํ•˜๋‹ค. + - ํŠน์ • ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ : **`O(n)`** + -> ์ถ”๊ฐ€ ํ˜น์€ ์‚ญ์ œ๋œ ์š”์†Œ๋กœ ์ธํ•ด ์ดํ›„์˜ ์š”์†Œ๋“ค์ด ์ด๋™๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ! + +--- + +### [์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ] +- **`์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(linked list)`** : ๋…ธ๋“œ์˜ ๋ชจ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ž๋ฃŒ๊ตฌ์กฐ + - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ง• : ๋ชจ๋“  ๋…ธ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์„ ํ•„์š” X +-> ์—ฐ์†์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ์—ฐ์†์ ์œผ๋กœ ์ €์žฅํ•  ๋–„ ์œ ์šฉ + - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ข…๋ฅ˜ + - `์‹ฑ๊ธ€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ` : ๋…ธ๋“œ ๋‚ด ๋‹ค์Œ ๋…ธ๋“œ์˜ ์œ„์น˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์–ด ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌด๋Š” ํ˜•ํƒœ(๋ฐ์ดํ„ฐ + ๋‹ค์Œ๋…ธ๋“œ) + - ๋‹จ์  : ๋‹ค์Œ๋…ธ๋“œ์˜ ์œ„์น˜๋งŒ ์•Œ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด์ „๋…ธ๋“œ์˜ ์œ„์น˜๋Š” ์•Œ๊ธฐ ์–ด๋ ค์›€ + - `์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ` : ์ด์ „๋…ธ๋“œ + ๋ฐ์ดํ„ฐ + ๋‹ค์Œ๋…ธ๋“œ + - ์žฅ์  : ์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•จ + - ๋‹จ์  : ์ €์žฅ๊ณต๊ฐ„์ด ๋” ํ•„์š”ํ•จ, ํ•œ ๋…ธ๋“œ์— 2๊ฐœ์˜ ์œ„์น˜์ •๋ณด๋ฅผ ์ €์žฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ + + - `ํ™˜ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)` : ๊ผฌ๋ฆฌ๋…ธ๋“œ๊ฐ€ ํ—ค๋“œ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌ์ผœ ๋…ธ๋“œ๋“ค์ด ์›ํ˜•์œผ๋กœ ๊ตฌ์„ฑ๋œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ + - `์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ + ํ™˜ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ` : ํ—ค๋“œ๋…ธ๋“œ์˜ ์ด์ „ ๋…ธ๋“œ๊ฐ€ ๊ผฌ๋ฆฌ๋…ธ๋“œ ๊ฐ€๋ฆฌํ‚ด/ ๊ผฌ๋ฆฌ๋…ธ๋“œ์˜ ๋‹ค์Œ๋…ธ๋“œ๊ฐ€ ํ—ค๋“œ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ด + - ์žฅ์  : ๋ชจ๋“  ๋…ธ๋“œ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ์ˆœํšŒํ•ด์•ผํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ + + +
+ +- **`๋…ธ๋“œ(node)`** : ์ €์žฅํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ๋…ธ๋“œ์˜ ์œ„์น˜(๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์ฃผ์†Œ) ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ตฌ์„ฑ ๋‹จ์œ„ + + + - ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ + - `ํ—ค๋“œ(head)` : ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ + - `๊ผฌ๋ฆฌ(tail)` : ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ + +
+ +- ๋น… ์˜ค ํ‘œํ˜„๋ฒ•์œผ๋กœ ํ‘œํ˜„ + - ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ๋…ธ๋“œ์— ์žˆ๋Š”์ง€ ์•Œ๊ณ , ํŠน์ • ์š”์†Œ์— ์ ‘๊ทผํ•  ๋•Œ : **`O(n)`** + -> ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ + + + + - ์ค‘๊ฐ„์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๋•Œ : **`O(1)`** + -> ๋…ธ๋“œ์˜ ์œ„์น˜๋งŒ ๋ฐ”๊ฟ”์„œ ์ €์žฅ, ์žฌ์ •๋ ฌ์ด ๋ถˆํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ + -> ์‚ฝ์ž…/์‚ญ์ œํ•  ์œ„์น˜๋งŒ ์ฃผ์–ด์ง€๋ฉด ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„์ด ๋™์ผ + + + + + +--- + +## ๐Ÿ“ˆ ์ถ”๊ฐ€ ํ•™์Šต ํ•„์š” +์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์™€ ๋ฐฐ์—ด์„ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ฐ๊ฐ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. + +### [์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ] + - ๐Ÿ‘ ํšจ์œจ์ ์ธ ์ƒํ™ฉ + - ๋ฐ์ดํ„ฐ์˜ ๋™์  ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ. ์žฌ์ •๋ ฌ์ด ํ•„์š”์—†๊ธฐ ๋•Œ๋ฌธ. + - ๐Ÿ‘Ž๐Ÿป ๋น„ํšจ์œจ์ ์ธ ์ƒํ™ฉ + - **๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์— ๋น„ํšจ์œจ์ ** + -> ํŠน์ • ์œ„์น˜์˜ ๋…ธ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ ‘๊ทผํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ + - **๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.** + -> ๊ฐ ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ ํ•„๋“œ์™€ ํ•จ๊ป˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ํ•„๋“œ(๋งํฌํ•„๋“œ)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด ๋งํฌ ํ•„๋“œ๋Š” ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฐ์—ด์— ๋น„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. + - **์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์˜ ์–ด๋ ค์›€** + -> ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ํ•ด์†Œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋˜๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. + - **๋ณต์žกํ•œ ๊ตฌํ˜„** + -> ๋ฐฐ์—ด์— ๋น„ํ•ด ๋ณต์žกํ•˜๋‹ค. ๋…ธ๋“œ์˜ ์‚ฝ์ž…, ์‚ญ์ œ ์‹œ์— ๋งํฌ๋ฅผ ์ •ํ™•ํžˆ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’๋‹ค. + +### [๋ฐฐ์—ด] +- ๐Ÿ‘ ํšจ์œจ์ ์ธ ์ƒํ™ฉ + + - ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ: ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ํŠน์ • ์š”์†Œ์— ์ฆ‰์‹œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด, ์ ‘๊ทผ ์‹œ๊ฐ„์ด ๐‘‚(1)๋กœ ๋งค์šฐ ๋น ๋ฅด๋‹ค. + - ๋ฉ”๋ชจ๋ฆฌ ์—ฐ์†์„ฑ: ๋ฐฐ์—ด์€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์—์„œ ์—ฐ์†์ ์œผ๋กœ ์ €์žฅ๋˜๋ฏ€๋กœ, ์บ์‹œ ํšจ์œจ์„ฑ์ด ๋†’์•„ ์„ฑ๋Šฅ์ด ์ข‹๋‹ค. + - ๊ฐ„๋‹จํ•œ ๊ตฌํ˜„: ๋ฐฐ์—ด์€ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜์—ฌ ๊ตฌํ˜„์ด ์‰ฝ๊ณ , ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. +- ๐Ÿ‘Ž๐Ÿป ๋น„ํšจ์œจ์ ์ธ ์ƒํ™ฉ + + - ๊ณ ์ •๋œ ํฌ๊ธฐ: ์ •์  ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ, ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์–ด ์‹คํ–‰ ์ค‘์— ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. + - ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€/์‚ญ์ œ์˜ ๋น„ํšจ์œจ์„ฑ: ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ๊ฒฝ์šฐ, ์ดํ›„์˜ ์š”์†Œ๋“ค์„ ์ด๋™ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๐‘‚(๐‘›)์ด ๋œ๋‹ค. + - ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„: ๋™์  ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•˜๋ฉฐ, ์ด ๊ณผ์ •์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. + + +--- + +## ๐Ÿ’ก ์ฐธ๊ณ  ์ž๋ฃŒ + +- https://velog.io/@hyhy9501/5-1-Linked-List-%EC%97%B0%EA%B2%B0-%EB%A6%AC%EC%8A%A4 diff --git "a/DataStructure/\354\212\244\355\203\235\352\263\274 \355\201\220/\354\212\244\355\203\235\352\263\274 \355\201\220_\354\230\210\354\247\200.md" "b/DataStructure/\354\212\244\355\203\235\352\263\274 \355\201\220/\354\212\244\355\203\235\352\263\274 \355\201\220_\354\230\210\354\247\200.md" new file mode 100644 index 0000000..3de1335 --- /dev/null +++ "b/DataStructure/\354\212\244\355\203\235\352\263\274 \355\201\220/\354\212\244\355\203\235\352\263\274 \355\201\220_\354\230\210\354\247\200.md" @@ -0,0 +1,70 @@ +## ๐Ÿ“– ํ•™์Šต ์ฃผ์ œ + +- **์ฃผ์ œ**: ์Šคํƒ๊ณผ ํ +- **๋‚ ์งœ**: 2024.10.21 - 2024.10.27 + +--- + +## ๐Ÿ“Œ ํ•™์Šต ๋‚ด์šฉ ์š”์•ฝ + +### [์Šคํƒ] +- **`์Šคํƒ(stack)`** : ํ•œ์ชฝ์—์„œ๋งŒ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ + - ์Šคํƒ ์—ฐ์‚ฐ + - `ํ‘ธ์‹œ(push)` : ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ฐ์‚ฐ + - `ํŒ(pop)` : ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๋„ค๋Š” ์—ฐ์‚ฐ + + > โœ… **ํ›„์ž…์„ ์ถœ(LIFO)** + ์ตœ๊ทผ์— ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ํ™œ์šฉ๋˜๊ณ , ๊ฐ€์žฅ ๋จผ์ € ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ญ์ œ๋จ + + - ํ™œ์šฉ + - ์ตœ๊ทผ์— ์ž„์‹œ ์ €์žฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ํ™œ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ(๋’ค๋กœ๊ฐ€๊ธฐ) + - undo + - ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ๊ณ„์‚ฐ +--- + +### [ํ] +- **`ํ(queue)`** : ํ•œ์ชฝ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ๋‹ค๋ฅธ ํ•œ์ชฝ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ + - ํ ์—ฐ์‚ฐ + - `์ธํ(enqueue)` : ํ์˜ ํ•œ์ชฝ ๋์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์—ฐ์‚ฐ + - `๋””ํ(dequeue)` : ๋‹ค๋ฅธ ํ•œ์ชฝ ๋์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๋‚ด๋Š”(์‚ญ์ œ) ์—ฐ์‚ฐ + + ![](https://velog.velcdn.com/images/yjlee0006/post/248172de-2e3c-4c0e-955e-4feea17a6982/image.png) + + > โœ… **์„ ์ž…์„ ์ถœ(FIFO)** + ๊ฐ€์žฅ ๋จผ์ € ์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์‚ญ์ œ๋จ + - ํ™œ์šฉ + - ์ž„์‹œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐจ๋ก€์ฐจ๋ก€ ๋‚ด๋ณด๋‚ด๊ฑฐ๋‚˜ ๊บผ๋‚ด์™€์•ผํ•˜๋Š” `๋ฒ„ํผ`(์ค„์„ธ์šฐ๊ธฐ) + - ์€ํ–‰์—…๋ฌด + - ๋Œ€๊ธฐ์—ด + - ๋ณ€ํ˜•๋œ ํ์˜ ํ˜•ํƒœ + - `์›ํ˜• ํ` : ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์ชฝ๊ณผ ์‚ญ์ œํ•˜๋Š” ์ชฝ - ์–‘์ชฝ์„ ํ•˜๋‚˜๋กœ ์—ฐ๊ฒฐํ•ด ์›ํ˜•์œผ๋กœ ์‚ฌ์šฉ + - `๋ฑ(Double-Ended Queue)` : ์–‘์ชฝ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…/์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ๋Š” ํ + - `์šฐ์„ ์ˆœ์œ„ ํ` : ์š”์†Œ์˜ ์ €์žฅ ์ˆœ์„œ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ๋น ์ ธ๋‚˜๊ฐ€๋Š” ํ + +--- + +## ๐Ÿ“ˆ ์ถ”๊ฐ€ ํ•™์Šต ํ•„์š” +์Šคํƒ์€ ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„์—์„œ ํ™œ์šฉ๋˜๋Š”๋ฐ ์–ด๋–ค ์œ ํ˜•์—์„œ ์ฃผ๋กœ ํ™œ์šฉ๋˜๋Š”์ง€ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„๋ณด์•˜๋‹ค. +๋˜ํ•œ ๊ธฐ์ˆ ๋ฉด์ ‘์—์„œ ํ์˜ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„ ํ์— ๋Œ€ํ•ด ๋งŽ์ด ๋ฌผ์–ด๋ณด๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ๋” ํ•™์Šตํ–ˆ๋‹ค. + +### stack +- ๋Œ€ํ‘œ์œ ํ˜• : ๋ฏธ๋กœ์ฐพ๊ธฐ +DFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ `Stack`์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ +DFS๋Š” `stack`์„ ์ด์šฉํ•ด ๊ฒฝ๋กœ๋ฅผ ๊ด€๋ฆฌํ•จ. +1. ํ˜„์žฌ ์œ„์น˜์—์„œ ๊ฐ€๋Šฅํ•œ ๋ฐฉํ–ฅ์˜ ์ขŒํ‘œ๋ฅผ `stack`์— ์ถ”๊ฐ€ +2. `stack`์˜ ๊ฐ€์žฅ ์œ„ ์ขŒํ‘œ๋กœ ์ด๋™(๋ฐ˜๋ณต) +3. ๋” ์ด์ƒ ๊ฐˆ ๊ณณ์ด ์—†์œผ๋ฉด `stack`์—์„œ ๋งˆ์ง€๋ง‰ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ด์ „ ์œ„์น˜๋กœ ์ด๋™ +4. ํƒ์ƒ‰ ์ค‘ ์ถœ๊ตฌ๋ฅผ ๋งŒ๋‚˜๋ฉด ์ข…๋ฃŒ - `stack`์ด ๋น„์–ด ์žˆ์œผ๋ฉด ๋” ์ด์ƒ ๊ฐˆ ๊ณณ์ด ์—†๋‹ค๋Š” ์˜๋ฏธ๋กœ, ์ถœ๊ตฌ๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ์ƒํ™ฉ + +### ์šฐ์„ ์ˆœ์œ„ ํ +- ๊ตฌํ˜„๋ฐฉ์‹ + - ๋ฐฐ์—ด, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ํž™ +- ํšจ์œจ์ ์ธ ๊ตฌํ˜„๋ฐฉ์‹ + - `ํž™ ๋ฐฉ์‹` + worst case๋ผ๋„ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(logN)์„ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ํž™์„ ์ด์šฉํ•ด ๊ตฌํ˜„ + +--- + +## ๐Ÿ’ก ์ฐธ๊ณ  ์ž๋ฃŒ +- https://velog.io/@kangdev/%EA%B8%B0%EC%88%A0%EB%A9%B4%EC%A0%91%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Stack-Queue +- https://dev-coco.tistory.com/159 \ No newline at end of file diff --git "a/DataStructure/\354\236\220\353\243\214\352\265\254\354\241\260\354\235\230 \355\201\260 \352\267\270\353\246\274/\354\236\220\353\243\214\352\265\254\354\241\260\354\235\230 \355\201\260 \352\267\270\353\246\274_\354\230\210\354\247\200.md" "b/DataStructure/\354\236\220\353\243\214\352\265\254\354\241\260\354\235\230 \355\201\260 \352\267\270\353\246\274/\354\236\220\353\243\214\352\265\254\354\241\260\354\235\230 \355\201\260 \352\267\270\353\246\274_\354\230\210\354\247\200.md" new file mode 100644 index 0000000..8ba2577 --- /dev/null +++ "b/DataStructure/\354\236\220\353\243\214\352\265\254\354\241\260\354\235\230 \355\201\260 \352\267\270\353\246\274/\354\236\220\353\243\214\352\265\254\354\241\260\354\235\230 \355\201\260 \352\267\270\353\246\274_\354\230\210\354\247\200.md" @@ -0,0 +1,153 @@ +## ๐Ÿ“– ํ•™์Šต ์ฃผ์ œ + +- **์ฃผ์ œ**: ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํฐ๊ทธ๋ฆผ +- **๋‚ ์งœ**: 2024.10.21 - 2024.10.24 + +--- + +## ๐Ÿ“Œ ํ•™์Šต ๋‚ด์šฉ ์š”์•ฝ + +### [์ž๋ฃŒ๊ตฌ์กฐ] + +- ์–ด๋– ํ•œ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ์ง€ ํ•™์Šตํ•˜๋Š” ๊ณผ๋ชฉ +- ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‚˜ ํ˜•์‹ + +--- + +### [์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„] + +#### ์‹œ๊ฐ„๋ณต์žก๋„ + +- `์‹œ๊ฐ„๋ณต์žก๋„(time complexity)` : ์ž…๋ ฅ์— ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์‹œ๊ฐ„์˜ ๊ด€๊ณ„ + +```python +for _ in range(n): + 1+1 +``` + +> ์‹คํ–‰์‹œ๊ฐ„์€ `์—ฐ์‚ฐํšŸ์ˆ˜`์™€ ๋น„๋ก€ํ•˜๋‹ค. +> ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” **n๋ฒˆ์˜ ์—ฐ์‚ฐ**์ด ํ•„์š”ํ•˜๋‹ค. + +```python +for _ in range(n): + for _ in range(n): + 1+1 +``` + +> 2๊ฐœ์˜ ๋ฐ˜๋ณต๋ฌธ์ด ๊ฒน์ณ์ ธ ์žˆ์œผ๋‹ˆ $$n^2$$๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค. + +--- + +#### ํ‘œ๊ธฐ๋ฒ• + +**1. ๋น… ์˜ค ํ‘œ๊ธฐ๋ฒ•(big O notation)** +ํ•จ์ˆ˜์˜ ์ ๊ทผ์  ์ƒํ•œ์„ ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ๋ฒ•, ์ž…๋ ฅ์— ๋”ฐ๋ฅธ ์‹คํ–‰์‹œ๊ฐ„์˜ ์ ๊ทผ์  ์ƒํ•œ + +- `์ ๊ทผ์  ์ƒํ•œ` : ์ž…๋ ฅํ•˜๋Š” n์ด ์ ์  ์ฆ๊ฐ€(๋ฌดํ•œ๋Œ€๋กœ ์ปค์ง„๋‹ค๊ณ  ๊ฐ€์ •) -> n์— ๋”ฐ๋ผ ์‹คํ–‰์‹œ๊ฐ„ ์ฆ๊ฐ€ -> ์‹คํ–‰์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•˜๋Š”๋ฐ์— ํ•œ๊ณ„ ์กด์žฌ(ํ•œ๊ณ„ == ์ ๊ทผ์  ์ƒํ•œ) + +- **O(์ƒํ•œ(n))** : ์‹คํ–‰์‹œ๊ฐ„์ด ์ปค์ง€๋”๋ผ๋„ ์ƒํ•œ์„  ์ด์ƒ ์ปค์ง€์ง€ ์•Š์„ ๊ฒƒ + > ex) **O($$n^2$$)** : ์ž…๋ ฅ๊ฐ’ n์ด ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ ์‹คํ–‰์‹œ๊ฐ„์˜ ์ฆ๊ฐ€์œจ์ด $$n^2$$๋ณด๋‹ค๋Š” ์ž‘๋‹ค. + > โ—๋‹จ, ์ ๊ทผ์  ์ƒํ•œ์„ ํ‘œํ˜„ํ•  ๋•Œ์—๋Š” **์ตœ๊ณ ์ฐจํ•ญ์˜ ์ฐจ์ˆ˜**๋งŒ ๊ณ ๋ คํ•ด์•ผ ํ•จโ— + +
+ +**2. ๋น… ์„ธํƒ€ ํ‘œ๊ธฐ๋ฒ•(big $$\theta$$ notation)** +์ž…๋ ฅ์— ๋Œ€ํ•œ ํ‰๊ท ์ ์ธ ์‹คํ–‰ ์‹œ๊ฐ„ + +> ex) **$$\theta$$($$n^2$$)** : ์ž…๋ ฅ๊ฐ’ n์ด ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ ์‹คํ–‰์‹œ๊ฐ„์˜ ์ฆ๊ฐ€์œจ์ด $$n^2$$๊ณผ ๊ฐ™๋‹ค. + +
+ +**3. ๋น… ์˜ค๋ฉ”๊ฐ€ ํ‘œ๊ธฐ๋ฒ•(big $$\omega$$ notation)** +์ž…๋ ฅ์— ๋Œ€ํ•œ ์‹คํ–‰ ์‹œ๊ฐ„์˜ ์ ๊ทผ์  ํ•˜ํ•œ + +> ex) **$$\omega$$($$n^2$$)** : ์ž…๋ ฅ๊ฐ’ n์ด ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ ์‹คํ–‰์‹œ๊ฐ„์˜ ์ฆ๊ฐ€์œจ์ด $$n^2$$๋ณด๋‹ค๋Š” ํฌ๋‹ค. + +--- + +#### ๊ณต๊ฐ„๋ณต์žก๋„ + +- `๊ณต๊ฐ„๋ณต์žก๋„(space complexity)` : ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์˜ ์–‘ + + > ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ : ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ํฌ๋‹ค. + > ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ : ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ž‘๋‹ค. + +- ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ํ‘œํ˜„ + - ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์˜ ์–‘์— ๋Œ€ํ•œ ์ ๊ทผ์  ์ƒํ•œ์„ ํ‘œํ˜„ + +--- + +## ๐Ÿ“ˆ ์ถ”๊ฐ€ ํ•™์Šต ํ•„์š” + +๊ฐœ๋…์€ ์ดํ•ดํ–ˆ์œผ๋‚˜ ์ฝ”๋“œ๋ฅผ ๋ดค์„ ๋•Œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ๋‹ค. + +### โœ…์ž์ฃผ ์–ธ๊ธ‰๋˜๋Š” ๋น… ์˜ค ํ‘œ๊ธฐ๋“ค์˜ ์˜ˆ์ œ + +#### 1. O(1) + +```python +def get_element(arr, index): + return arr[index] + +numbers = [10, 20, 30, 40, 50] +result = get_element(numbers, 2) +print(result) # ์ถœ๋ ฅ 30 + +``` + +> ์˜ˆ์ œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ง์ ‘ ์ ‘๊ทผํ•˜๋ฏ€๋กœ, ์‹คํ–‰ ์‹œ๊ฐ„์€ ํ•ญ์ƒ ์ผ์ •ํ•จ +> ์ž…๋ ฅ๊ฐ’์˜ ํฌ๊ธฐ์— ์ƒ๊ด€์—†์ด ์‹คํ–‰์‹œ๊ฐ„์ด ์ผ์ •ํ•œ ๊ฒฝ์šฐ O(1) + +#### 2. O($$n$$) + +```python +def sum_of_elements(arr): + total = 0 + for element in arr: + total += element + return total + +numbers = [1, 2, 3, 4, 5] +result = sum_of_elements(numbers) +print(result) # ์ถœ๋ ฅ 15 +``` + +> ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ n์ผ ๋•Œ, ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ์”ฉ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ์ด n๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•จ + +#### 3. O($$n^2$$) + +```python +def print_pairs(arr): + n = len(arr) + for i in range(n): + for j in range(n): + print(arr[i], arr[j]) + +numbers = [1, 2, 3] +print_pairs(numbers) +``` + +> ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๊ฐ€ N์ผ ๋•Œ, ์ฒซ ๋ฒˆ์งธ ๋ฃจํ”„๊ฐ€ N๋ฒˆ ์‹คํ–‰๋˜๊ณ , ๊ฐ ์‹คํ–‰๋งˆ๋‹ค ๋‘ ๋ฒˆ์งธ ๋ฃจํ”„๊ฐ€ N๋ฒˆ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ด ์‹คํ–‰ ํšŸ์ˆ˜๋Š” N \* N = Nยฒ + +#### 4. O($$nlogn$$) + +```python +def nlogn(n): + for i in range(1, n): # n๋ฒˆ ๋ฐ˜๋ณต + j = 1 # ์ดˆ๊ธฐ๊ฐ’ ์„ค์ • + while j < n: # log n + 1 + print(i, j) # log n + j *= 2 # j๋ฅผ 2๋ฐฐ๋กœ ์ฆ๊ฐ€ +``` + +> for๋ฌธ๊ณผ while๋ฌธ์ด ์ค‘์ฒฉ๋˜์–ด while๋ฌธ์€ log n์— ๊ณฑํ•˜๊ธฐ n๋ฒˆ ํ•œ ๋งŒํผ ๋ฐ˜๋ณต +> for๋ฌธ์ด while๋‚ด์— ์ค‘์ฒฉ๋˜๋“ , while๋ฌธ์ด for๋ฌธ ๋‚ด์— ์ค‘์ฒฉ๋˜๋“  ์ƒ๊ด€์—†์ด ๋ฐ˜๋ณตํšŸ์ˆ˜๋Š” ๊ฐ๊ฐ ๋ฐ˜๋ณต๋ฌธ์˜ ๊ณฑ์…ˆ์ž„ + +$$n+n+(n*(log n+1+log n+log n)) = 2n+3n log n+n = 3n + 3n log n$$ += **O($$n log n$$)** + +--- + +## ๐Ÿ’ก ์ฐธ๊ณ  ์ž๋ฃŒ + +- https://velog.io/@gogori6565/%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84-%EB%8C%80%ED%91%9C-%EC%98%88%EC%A0%9C-%EB%AC%B8%EC%A0%9C diff --git "a/DataStructure/\355\212\270\353\246\254/\355\212\270\353\246\254_\354\230\210\354\247\200.md" "b/DataStructure/\355\212\270\353\246\254/\355\212\270\353\246\254_\354\230\210\354\247\200.md" new file mode 100644 index 0000000..5cc1a03 --- /dev/null +++ "b/DataStructure/\355\212\270\353\246\254/\355\212\270\353\246\254_\354\230\210\354\247\200.md" @@ -0,0 +1,202 @@ +## ๐Ÿ“– ํ•™์Šต ์ฃผ์ œ + +- **์ฃผ์ œ**: ํŠธ๋ฆฌ +- **๋‚ ์งœ**: 2024.10.21 - 2024.10.27 + +--- + +## ๐Ÿ“Œ ํ•™์Šต ๋‚ด์šฉ ์š”์•ฝ + +### [ํŠธ๋ฆฌ] +- **`ํŠธ๋ฆฌ(tree)`** : ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ + - ํŠธ๋ฆฌ์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ + - `๋…ธ๋“œ(node)` : ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ตฌ์„ฑ์š”์†Œ + - `๊ฐ„์„ (edge)=๋งํฌ(link)` : ๋…ธ๋“œ์™€ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌ์„ฑ์š”์†Œ + + ![](https://velog.velcdn.com/images/yjlee0006/post/90b5f703-29f6-47c2-a83c-86046f9c5c38/image.png) + +| **์šฉ์–ด** | **์„ค๋ช…** | +| --- | --- | +| **ํ˜•์ œ ๋…ธ๋“œ(sibling node)** | ๊ฐ™์€ ๋ถ€๋ชจ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋…ธ๋“œ | +| **์กฐ์ƒ ๋…ธ๋“œ(ancestor node)** | ๋ถ€๋ชจ๋…ธ๋“œ์™€ ๊ทธ ๋ถ€๋ชจ ๋…ธ๋“œ๋“ค | +| **์ž์† ๋…ธ๋“œ(descendant node)** | ์ž์‹๋…ธ๋“œ์™€ ๊ทธ ์ž์‹ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋“ค | +| **๋…ธ๋“œ(node)** | ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ | +| **๊ฐ„์„ (edge)** | ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ | +| **๋ถ€๋ชจ ๋…ธ๋“œ(parent node)** | ์–ด๋–ค ๋…ธ๋“œ์˜ ์ƒ์œ„์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ | +| **์ž์‹ ๋…ธ๋“œ(child node)** | ์–ด๋–ค ๋…ธ๋“œ์˜ ํ•˜์œ„์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ | +| **๋ฃจํŠธ ๋…ธ๋“œ(root node)** | ํŠธ๋ฆฌ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ, ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ | +| **๋ฆฌํ”„ ๋…ธ๋“œ(leaf node)** | ํŠธ๋ฆฌ์˜ ์ตœํ•˜๋‹จ ๋…ธ๋“œ, ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๋…ธ๋“œ | +| **์ฐจ์ˆ˜(degree)** | ์–ด๋–ค ๋…ธ๋“œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ์ˆ˜ | +| **๋ ˆ๋ฒจ(level)** | ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด ํŠน์ • ๋…ธ๋“œ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๊ฑฐ์น˜๊ฒŒ ๋˜๋Š” ๊ฐ„์„ ์˜ ์ˆ˜ | +| **์„œ๋ธŒํŠธ๋ฆฌ(subtree)** | ํŠธ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„ ํŠธ๋ฆฌ | + +- ์„œ๋ธŒํŠธ๋ฆฌ + ๊ฐ„์„  + ๋ ˆ๋ฒจ +![](https://velog.velcdn.com/images/yjlee0006/post/e4308b8a-e254-4199-9982-dbbe3694aaa3/image.png) + +- ํŠธ๋ฆฌ์˜ ๊ตฌํ˜„ + - ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ `๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„`๊ณผ `์ž์‹๋…ธ๋“œ์˜ ์œ„์น˜์ •๋ณด(๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ์ฃผ์†Œ)`๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„๋“ค์˜ ๋ชจ์Œ์œผ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ๊ตฌํ˜„ + +![](https://velog.velcdn.com/images/yjlee0006/post/f9c379cb-9dab-4669-abe0-1bcac8179a80/image.png) + +![](https://velog.velcdn.com/images/yjlee0006/post/1fce05cb-0e9d-4889-95f7-79c60635a3df/image.png) + +--- + +### [ํŠธ๋ฆฌ์˜ ์ˆœํšŒ] +-**`ํŠธ๋ฆฌ์˜ ์ˆœํšŒ(tree traversal)`** : ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋Š” ์ˆœํšŒ + - ์ˆœํšŒ์˜ ์ข…๋ฅ˜ + - `์ „์œ„ ์ˆœํšŒ` : ๋ฃจํŠธ ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•˜๊ณ , ์ดํ›„ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ์ „์œ„ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ• + + ![](https://velog.velcdn.com/images/yjlee0006/post/a5882820-a899-408e-b52e-eb8b559aa8fb/image.png) + + - `์ค‘์œ„ ์ˆœํšŒ` : ๋ฃจํŠธ ๋…ธ๋“œ ๊ธฐ์ค€ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ์ค‘์œ„ ์ˆœํšŒํ•œ ๋‹ค์Œ, ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ์ค‘์œ„ ์ˆœํšŒํ•˜๋Š” ์ˆœ์„œ๋กœ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋Š” ์ˆœํšŒ ๋ฐฉ๋ฒ• + + ![](https://velog.velcdn.com/images/yjlee0006/post/4b200cff-1a77-4420-a281-6f937c0d5975/image.png) + + - `ํ›„์œ„ ์ˆœํšŒ` : ๋ฃจํŠธ ๋…ธ๋“œ ๊ธฐ์ค€ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ํ›„์œ„ ์ˆœํšŒํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๊นŒ์ง€ ํ›„์œ„์ˆœํšŒํ•œ ๋‹ค์Œ, ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ์ˆœ์„œ๋กœ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋Š” ์ˆœํšŒ ๋ฐฉ๋ฒ• + + ![](https://velog.velcdn.com/images/yjlee0006/post/e089192d-83e4-4a0c-b3cf-e3dacdee971c/image.png) + + - `๋ ˆ๋ฒจ ์ˆœ์„œ ์ˆœํšŒ` : ๊ฐ€์žฅ ๋‚ฎ์€ ๋ ˆ๋ฒจ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ• + + ![](https://velog.velcdn.com/images/yjlee0006/post/9c59187a-6ec7-4647-a7f5-a8d5b46a1a12/image.png) + +--- + +### [ํŠธ๋ฆฌ์˜ ์ข…๋ฅ˜] +### ๊ธฐ๋ณธ์ ์ธ ํŠธ๋ฆฌ +-**`์ด์ง„ํŠธ๋ฆฌ(binary tree)`** : ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 2๊ฐœ ์ดํ•˜์ธ ํŠธ๋ฆฌ + +![](https://velog.velcdn.com/images/yjlee0006/post/fae03bde-614a-496c-a42d-396f3b8d78a9/image.png) + +-**`ํŽธํ–ฅ๋œ ์ด์ง„ํŠธ๋ฆฌ(askewed binary tree)`** : ๋ชจ๋“  ์ž์‹ ๋…ธ๋“œ๊ฐ€ ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ ์ด์ง„ํŠธ๋ฆฌ + +![](https://velog.velcdn.com/images/yjlee0006/post/f556565e-99c5-4873-8ff7-af928a8f2608/image.png) + +-**`์ • ์ด์ง„ ํŠธ๋ฆฌ(full binary tree)`** : ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ๊ฐ€ ์•„๋‹Œ ์ด์ง„ํŠธ๋ฆฌ(์ž์‹๋…ธ๋“œ ๊ฐœ์ˆ˜๊ฐ€ 0์ด๊ฑฐ๋‚˜ 2) + +![](https://velog.velcdn.com/images/yjlee0006/post/ba2ac453-57f8-4c35-8823-44169a290bf6/image.png) + +-**`ํฌํ™” ์ด์ง„ ํŠธ๋ฆฌ(perfect binary tree)`** : ๋ฆฌํ”„๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ์ž์‹ ๋…ธ๋“œ๋ฅผ 2๊ฐœ์”ฉ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋ชจ๋“  ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๋ ˆ๋ฒจ์ด ๋™์ผํ•œ ์ด์ง„ํŠธ๋ฆฌ + +![](https://velog.velcdn.com/images/yjlee0006/post/120b2145-1769-41bb-9193-dd4cc4be4b2a/image.png) + +-**`์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(complete binary tree)`** : ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ ˆ๋ฒจ์ด 2๊ฐœ์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์ด ์™ผ์ชฝ๋ถ€ํ„ฐ ์กด์žฌํ•˜๋Š” ์ด์ง„ํŠธ๋ฆฌ + +![](https://velog.velcdn.com/images/yjlee0006/post/fbd65e06-c4c5-4df5-8cc8-a70830156b77/image.png) + +
+ +### ํƒ์ƒ‰์— ํ™œ์šฉ๋˜๋Š” ํŠธ๋ฆฌ +- **์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ** : ํŠน์ • ๋…ธ๋“œ์˜ ์™ผ์ชฝ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€๊ฐ’, ์˜ค๋ฅธ์ชฝ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ํฐ๊ฐ’ -> O(log n)์œผ๋กœ ์›ํ•˜๋Š” ๊ฐ’ ํƒ์ƒ‰ ๊ฐ€๋Šฅ +- +![](https://velog.velcdn.com/images/yjlee0006/post/6a1a387c-257d-4c1a-a7dc-7753a09a79fc/image.png) + +๐Ÿ’ก ์œ„์˜ ๊ฒฝ์šฐ ๋ฃจํŠธ๋…ธ๋“œ์ธ 8๋ณด๋‹ค ์ž‘์€ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋…ธ๋“œ๋Š” ๋ณผ ํ•„์š”๊ฐ€ ์—†์Œ + +
+- **ํž™** : ํƒ์ƒ‰์— ํŠนํ™”๋œ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ข…๋ฅ˜ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ์œ„ํ•ด ์‚ฌ์šฉ + - ํž™์˜ ์ข…๋ฅ˜ + - `์ตœ๋Œ€ ํž™` : ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ด์ง„ ํŠธ๋ฆฌ + - `์ตœ์†Œ ํž™` : ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ด์ง„ ํŠธ๋ฆฌ + + ![](https://velog.velcdn.com/images/yjlee0006/post/a4d0c762-7da7-4626-a2fe-2488013d4ac4/image.png) + + - `์ตœ๋Œ€ ํž™` ๊ตฌํ˜„ : ์ตœ์ƒ๋‹จ ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ์–ธ์ œ๋‚˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋จ + +
+ => `์šฐ์„ ์ˆœ์œ„ ํ` + + ![](https://velog.velcdn.com/images/yjlee0006/post/fe8bcf52-1345-48a7-a52f-26a40ec4fe7c/image.png) + + ๐Ÿ’ก ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๋‚ผ ๋•Œ ์–ด๋–ค ์ˆœ์„œ๋กœ ์ €์žฅ๋˜์—ˆ๋“  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ ์ˆœ์œผ๋กœ ์–ป์–ด๋‚ผ ์ˆ˜ ์žˆ์Œ + +
+ +### ๊ท ํ˜•์„ ๋งž์ถ”๋Š” ํŠธ๋ฆฌ +- ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ๋ฌธ์ œ์ ์ธ ํŽธํ–ฅ๋œ ํŠธ๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ + - `์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ` + - `AVL ํŠธ๋ฆฌ` + - `RB ํŠธ๋ฆฌ(์ž์ฃผ ์‚ฌ์šฉ๋จ)` +
+- RB ๋…ธ๋“œ์˜ ๊ตฌ์„ฑ์š”์†Œ + - `NIL(null leaf) ๋…ธ๋“œ` : ์‹ค์งˆ์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๋…ธ๋“œ(๋ฆฌํ”„๋…ธ๋“œ) + +![](https://velog.velcdn.com/images/yjlee0006/post/b8574688-57f6-4448-8df5-b9407eef6421/image.png) + +
+- RB ํŠธ๋ฆฌ์˜ ๊ทœ์น™ +
+ 1) ๋ฃจํŠธ ๋…ธ๋“œ๋Š” ๋ธ”๋ž™ ๋…ธ๋“œ +
+ 2) ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ๋ธ”๋ž™ ๋…ธ๋“œ +
+ 3) ๋ ˆ๋“œ ๋…ธ๋“œ์˜ ์ž์‹ ๋…ธ๋“œ๋Š” ๋ธ”๋ž™ ๋…ธ๋“œ +
+ 4) ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์ž„์˜์˜ ๋ฆฌํ”„ ๋…ธ๋“œ์— ์ด๋ฅด๋Š” ๊ฒฝ๋กœ์˜ ๋ธ”๋ž™ ๋…ธ๋“œ ์ˆ˜๋Š” ๊ฐ™์Œ +
+ +) ์ƒˆ ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž… ํ•  ๋•Œ๋Š” ์‚ฝ์ž…ํ•  ๋…ธ๋“œ๋ฅผ ๋ ˆ๋“œ๋กœ ๊ฐ„์ฃผ +
+ -> ์‚ฝ์ž… ์ดํ›„์—๋„ RBํŠธ๋ฆฌ๊ฐ€ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ 4๊ฐ€์ง€ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•  ๋•Œ ๊นŒ์ง€ ํŠธ๋ฆฌ๋ฅผ `ํšŒ์ „` / `์ƒ‰์ƒ ์žฌ์ง€์ •` ํ•ด์•ผํ•จ +
+ - `ํŠธ๋ฆฌ์˜ ํšŒ์ „` : ์–‘์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋†’์ด์˜ ๊ท ํ˜•์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋ถ€๋ชจ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ์˜ ๊ด€๊ณ„๋ฅผ ์žฌ ์ง€์ •ํ•˜๋Š” ๊ฒƒ +
+ - ์™ผ์ชฝ ํšŒ์ „ + + ![](https://velog.velcdn.com/images/yjlee0006/post/cfa501e8-4e8e-436e-b7ae-845541a1a5f0/image.png) +
+ + - ์˜ค๋ฅธ์ชฝ ํšŒ์ „ + + ![](https://velog.velcdn.com/images/yjlee0006/post/8780c1b4-54de-477f-b6fd-15e631f695c6/image.png) + + - `์ƒ‰์ƒ ์žฌ์ง€์ •` : ์‚ฝ์ž…๋…ธ๋“œ๋ฅผ ๋ ˆ๋“œ๋กœ ๊ฐ„์ฃผํ•  ๊ฒฝ์šฐ ๊ฐ„ํ˜น ์•„๋ž˜์ฒ˜๋Ÿผ '๋ ˆ๋“œ๋…ธ๋“œ์˜ ์ž์‹๋…ธ๋“œ๊ฐ€ ๋ธ”๋ž™๋…ธ๋“œ'๋ผ๋Š” ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ + + ![](https://velog.velcdn.com/images/yjlee0006/post/27aed8da-01ce-4a3b-86e8-e5ff4cab4475/image.png) + + ๐Ÿ’ก ํŠธ๋ฆฌ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „ํ•˜๊ณ , ์ƒ‰์ƒ์„ ์žฌ์ง€์ •(12๋ฅผ 15์˜ ์ž์‹ ๋…ธ๋“œ๋กœ ๋งŒ๋“ค๊ณ  12๋ฅผ ๋ ˆ๋“œ ๋…ธ๋“œ๋กœ, 15๋ฅผ ๋ธ”๋ž™ ๋…ธ๋“œ๋กœ ๋ณ€ํ™˜) + + ![](https://velog.velcdn.com/images/yjlee0006/post/bb6d9335-ff93-448e-a38c-ef5b5fbc0b68/image.png) + +### ๋Œ€์šฉ๋Ÿ‰ ์ž…์ถœ๋ ฅ์„ ์œ„ํ•œ ํŠธ๋ฆฌ +- **B ํŠธ๋ฆฌ** : `๋‹ค์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(ํ•œ ๋…ธ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ)`์˜ ํ•œ ์ข…๋ฅ˜ + - ํŠน์ง• + - ํ•œ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ž์‹ ๋…ธ๋“œ์˜ ์ˆ˜๋Š” ์ตœ์†Œ, ์ตœ๋Œ€ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์Œ +
+ -> ์ตœ๋Œ€ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ M๊ฐœ์ธ BํŠธ๋ฆฌ : `M์ฐจ BํŠธ๋ฆฌ` +
+ -> `M์ฐจ BํŠธ๋ฆฌ`๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ : `M/2(๋ฐ˜์˜ฌ๋ฆผ)` +
+ - BํŠธ๋ฆฌ๋Š” ๋ชจ๋“  ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊นŠ์ด๊ฐ€ ๊ฐ™๋‹ค +
+ - **B+ ํŠธ๋ฆฌ** : BํŠธ๋ฆฌ์™€ ํฐ ๊ณจ๊ฒฉ์€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์žˆ์Œ + - B+ํŠธ๋ฆฌ์—์„œ๋Š” ์‹ค์งˆ์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์ตœํ•˜์œ„ ๋ฆฌํ”„ ๋…ธ๋“œ์— ์œ„์น˜ + - B+ํŠธ๋ฆฌ์—์„œ ์‹ค์งˆ์  ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์ตœํ•˜์œ„ ๋ฆฌํ”„๋…ธ๋“œ๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ์Œ + + + +--- + +## ๐Ÿ“ˆ ์ถ”๊ฐ€ ํ•™์Šต ํ•„์š” +๊ทธ๋ฆผ์ž๋ฃŒ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ BํŠธ๋ฆฌ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์ฐพ์•„๋ณด์•˜๋‹ค. + +โฌ‡๏ธ ๋ฌธ์ œ์˜ ๊ทธ๋ฆผ + +![](https://velog.velcdn.com/images/yjlee0006/post/85eedc38-b103-47c8-9c70-fb286e2bc97f/image.png) + +B ํŠธ๋ฆฌ์˜ ๊ฐ ๋…ธ๋“œ์—๋Š” `ํ•˜๋‚˜ ์ด์ƒ์˜ ํ‚ค๊ฐ’`์ด ์กด์žฌํ•˜๊ณ  ๊ฐ ํ‚ค๋“ค์ด `์˜ค๋ฆ„์ฐจ์ˆœ`์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. +๋ฃจํŠธ๋…ธ๋“œ๋Š” ์œ„์ฒ˜๋Ÿผ 2๊ฐœ์˜ ํ‚ค๊ฐ€ ์กด์žฌํ•˜๊ณ , +์ด๋•Œ, ์„œ๋ธŒํŠธ๋ฆฌ L์˜ ๋ฃจํŠธ์ธ ๋…ธ๋“œ B๋Š” ๊ฐ€์žฅ ์ž‘์€ ํ‚ค๊ฐ’์ด์–ด์•ผ ํ•˜๋ฏ€๋กœ -> `์„œ๋ธŒํŠธ๋ฆฌL < key1` +
+๊ทธ๋ฆฌ๊ณ  ์„œ๋ธŒํŠธ๋ฆฌ M์˜ ๋ฃจํŠธ์ธ ๋…ธ๋“œ C๋Š” key1๊ณผ key2 ๊ฐ’์˜ ์‚ฌ์ด์— ์œ„์น˜ ํ•˜๋ฏ€๋กœ `key1 < ์„œ๋ธŒํŠธ๋ฆฌ M < key 2` +
+๋งˆ์ง€๋ง‰์œผ๋กœ ๋…ธ๋“œ D์˜ ๊ฒฝ์šฐ key2๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค. +๋”ฐ๋ผ์„œ ๊ทธ๋ฆผ ์•„๋ž˜์˜ ์ฃผ์„์€ `key2 < ์„œ๋ธŒํŠธ๋ฆฌ R` ์ด๋ ‡๊ฒŒ ๋ฐ”๊ปด์•ผํ•œ๋‹ค. + + +--- + +## ๐Ÿ’ก ์ฐธ๊ณ  ์ž๋ฃŒ +- https://velog.io/@chanyoung1998/B%ED%8A%B8%EB%A6%AC +- https://matice.tistory.com/8 + diff --git "a/DataStructure/\355\225\264\354\213\234 \355\205\214\354\235\264\353\270\224/\355\225\264\354\213\234 \355\205\214\354\235\264\353\270\224_\354\230\210\354\247\200.md" "b/DataStructure/\355\225\264\354\213\234 \355\205\214\354\235\264\353\270\224/\355\225\264\354\213\234 \355\205\214\354\235\264\353\270\224_\354\230\210\354\247\200.md" new file mode 100644 index 0000000..8b834fa --- /dev/null +++ "b/DataStructure/\355\225\264\354\213\234 \355\205\214\354\235\264\353\270\224/\355\225\264\354\213\234 \355\205\214\354\235\264\353\270\224_\354\230\210\354\247\200.md" @@ -0,0 +1,115 @@ +## ๐Ÿ“– ํ•™์Šต ์ฃผ์ œ + +- **์ฃผ์ œ**: ํ•ด์‹œํ…Œ์ด๋ธ” +- **๋‚ ์งœ**: 2024.10.21 - 2024.10.27 + +--- + +## ๐Ÿ“Œ ํ•™์Šต ๋‚ด์šฉ ์š”์•ฝ + +### [ํ•ด์‹œํ…Œ์ด๋ธ”] +- **`ํ•ด์‹œํ…Œ์ด๋ธ”(hash table)`** : `ํ‚ค(key)`์™€ `๊ฐ’(value)`์˜ ๋Œ€์‘์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํ‘œ์™€ ๊ฐ™์€ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ + - ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ + - `ํ‚ค(key)` : ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ž…๋ ฅ + - `๊ฐ’(value)` : ํ‚ค๋ฅผ ํ†ตํ•ด ์–ป๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ + - ๊ฐ’์˜ ์ €์žฅ์œ„์น˜ : `๋ฒ„ํ‚ท(bucket)` + - ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜ / ๋ฒ„ํ‚ท์˜ ์ˆ˜ : `๋กœ๋“œํŒฉํ„ฐ(load factor)` +
+ -> ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์–ผ๋งˆ๋‚˜ ๊ฐ€๋“ ์ฐจ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ง€ํ‘œ +
+ -> ๋กœ๋“œ ํŒฉํ„ฐ๊ฐ€ ํด์ˆ˜๋ก ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค + - `ํ•ด์‹œ ํ•จ์ˆ˜` : ํ‚ค๋ฅผ ์ธ์ž๋กœ ํ™œ์šฉํ•ด ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜(ํ•ด์‹œํ•จ์ˆ˜์— ํ‚ค๋ฅผ ํ†ต๊ณผ ์‹œ์ผœ ์›ํ•˜๋Š” ๋ฒ„ํ‚ท์— ์ ‘๊ทผ) + + - ์‚ฝ์ž…/์‚ญ์ œ/๊ฒ€์ƒ‰ ์—ฐ์‚ฐ์˜ ์‹œ๊ฐ„๋ณต์žก๋„ : **`O(1)`** +
+ -> ์‹คํ–‰๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•ญ์ƒ ์ผ์ •ํ•œ ์†๋„ ๋ณด์žฅ + + - ๋‹จ์  + - ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋งŒ, ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์†Œ๋ชจ๋จ +
+ -> ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์‹œ๊ฐ„๋ณต์žก๋„๋งŒํผ ์šฐ์ˆ˜ํ•˜์ง€ ์•Š๋‹ค. + +--- + +### [ํ•ด์‹œ ํ•จ์ˆ˜] +- **`ํ•ด์‹œ ํ•จ์ˆ˜(hash function)`** : ์ž„์˜์˜ ๊ธธ์ด๋ฅผ ์ง€๋‹Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ •๋œ ๊ธธ์ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋‹จ๋ฐฉํ–ฅ ํ•จ์ˆ˜ +-> ํŠน์ • ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ O +-> ํ•ด์‹œ๊ฐ’์„ ํ† ๋Œ€๋กœ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์—ˆ๋Š”์ง€ ๋„์ถœ X + + - ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์—ฐ์‚ฐ๋ฐฉ๋ฒ• + - `ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜` : MD5, SHA-1, SHA-256, SHA-512, HMAC ๋“ฑ +
+ -> sha-1์˜ ๊ฒฝ์šฐ `ํ•ด์‹œ ์ถฉ๋Œ`์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ์—ญ์‚ฌ์†์œผ๋กœ ์‚ฌ๋ผ์ง + + - ํ™œ์šฉ + - ๋ฌด์ž‘์œ„ ๊ฐ’์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธ๋ฅผ ๋งŒ๋“ค ๋•Œ + - ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•  ๋•Œ + + - ๋‹จ์ˆœ ๊ตฌํ˜„ + > โœ… **๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ** + 'A mod B' - A๋ฅผ B๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ +
+ ex) 10 mod 3 = 1 + โ— ๋‹จ, ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ `ํ•ด์‹œ ์ถฉ๋Œ`์˜ ์šฐ๋ ค๊ฐ€ ์žˆ๋‹ค. + +--- + +### [ํ•ด์‹œ ์ถฉ๋Œ] +-**`ํ•ด์‹œ ์ถฉ๋Œ`** ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค์— ๋Œ€ํ•ด ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์ด ๋Œ€์‘๋˜๋Š” ์ƒํ™ฉ +ex) ๋‹ค๋ฅธ ์ด๋ฆ„์— ๊ฐ™์€ ์ „ํ™”๋ฒˆํ˜ธ๊ฐ€ ๋Œ€์‘๋œ ์ƒํ™ฉ + +- ๋Œ€ํ‘œ case + - SHA-1 + + > ํŒŒ์ผ1.pdf์™€ ํŒŒ์ผ2.pdf๋Š” ์„œ๋กœ ๋‹ค๋ฅธ pdfํŒŒ์ผ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ด์‹œ๊ฐ’์„ ๊ตฌํ•  ๊ฒฝ์šฐ sha-1 ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋งŒ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์ด ๋„์ถœ๋œ๋‹ค.(์ถฉ๋Œ๋ฐœ์ƒ) + + - ํ•ด๊ฒฐ๋ฐฉ์•ˆ + 1) `์ฒด์ด๋‹(chaining)` : ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ• +
+ -> ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ๊ฐ™์€ ์œ„์น˜๋กœ ํ•ด์‹œ๋˜์–ด๋„ ๋‹จ์ˆœํžˆ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋…ธ๋“œ๋งŒ ์ถ”๊ฐ€๋จ. + + > โ— ๋‹จ, ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค๋ฉด ๋น ๋ฅธ์†๋„๋ผ๋Š” ์žฅ์ ์ด ์‚ฌ๋ผ์ง + + ![](https://velog.velcdn.com/images/yjlee0006/post/d9e8c024-03a7-4c85-97e2-b618a90e0025/image.png) + + 2) `๊ฐœ๋ฐฉ์ฃผ์†Œ๋ฒ•(open addressing)` : ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ๋ฒ„ํ‚ท์˜ ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• + - `์กฐ์‚ฌ(๋‹ค๋ฅธ ๋ฒ„ํ‚ท์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š” ๊ณผ์ •)`๋ฐฉ๋ฒ•์— ๋”ฐ๋ฅธ ๊ตฌ๋ถ„ + - `์„ ํ˜• ์กฐ์‚ฌ๋ฒ•` : ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ์ธ๋ฑ์Šค์˜ ๋‹ค์Œ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฐ€์šฉํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์•„ ๋‚˜์„œ๋Š” ๋ฐฉ๋ฒ• + ![](https://velog.velcdn.com/images/yjlee0006/post/b30a3c5e-8c9b-445c-9924-f343507f2bab/image.png) + + > โ— ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ์ธ๋ฑ์Šค ์ธ๊ทผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ ค ์ €์žฅ๋  ์ˆ˜ ์žˆ์Œ(๊ตฐ์ง‘ํ™”) + + - `์ด์ฐจ ์กฐ์‚ฌ๋ฒ•` : ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•œ ์ธ๋ฑ์Šค์—์„œ ์ œ๊ณฑ์ˆ˜๋งŒํผ ๋–จ์–ด์ง„ ๊ฑฐ๋ฆฌ์— ์œ„์น˜ํ•œ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ• + + ex) bucket์˜ ํฌ๊ธฐ๋Š” 7, key๊ฐ’ 8์— ๋Œ€ํ•ด ํ•ด์‹œ ๊ฐ’ 10(h(8) = 10)์ด๋ผ๊ณ  ๊ฐ€์ • + + (1) h(8) mod 7 = 10 mod 7 = 3ย ย ย ย ย ย ย ย  // 1์ฐจ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€์ • +
+ (2) (h(8) + 1^2) mod 7 = 11 mod 7 = 4ย  // 2์ฐจ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€์ • +
+ (3) (h(8) + 2^2) mod 7 = 14 mod 7 = 0 // 3์ฐจ ์ถฉ๋Œ ๋ฐœ์ƒ ๊ฐ€์ • +
+ (4) (h(8) + 3^2) mod 7 = 19 mod 7 =ย  5 // ์ €์žฅ +
+ > โ— but ์ œ๊ณฑ์ˆ˜์˜ ๊ทœ์น™์„ฑ์œผ๋กœ ์ธํ•ด ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ X + + +--- + + + +## ๐Ÿ“ˆ ์ถ”๊ฐ€ ํ•™์Šต ํ•„์š” +๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์„ ๊ฐ์ˆ˜ํ•˜๋ฉด์„œ๋„ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„๋ณด์•˜๋‹ค. + +- ์ ์€ ์ž์›์œผ๋กœ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ +- ํ•˜๋“œ๋””์Šคํฌ๋‚˜ ํด๋ผ์šฐ๋“œ์— ์กด์žฌํ•˜๋Š” ๋ฌดํ•œํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ์œ ํ•œํ•œ ๊ฐœ์ˆ˜์˜ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋งคํ•‘ +- ์–ธ์ œ๋‚˜ ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’ ๋ฆฌํ„ด : index๋ฅผ ์•Œ๋ฉด ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์ง +
+-> ํ•ด์‹œํ…Œ์ด๋ธ”์˜ ์‹œ๊ฐ„๋ณต์žก๋„ O(1) - (์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ O(logN)) + + +--- + +## ๐Ÿ’ก ์ฐธ๊ณ  ์ž๋ฃŒ +- https://you88.tistory.com/36 +- https://lealea.tistory.com/251 \ No newline at end of file