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

๐Ÿ“š Computer Science/Data Structure10

[์ž๋ฃŒ๊ตฌ์กฐ] ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table) ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table) ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ (Key, Value)์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ํ•ด์‹œํ•จ์ˆ˜(Hash Function)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•œ ๊ฐ’์„ index๋กœ ์‚ผ์Œ ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)๋ฅผ ์‚ฌ์šฉํ•ด Key ๊ฐ’์„ ์ƒ‰์ธ(index)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ํ•ด์‹ฑ(Hashing)์ด๋ผ๊ณ  ํ•จ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ํŒŒ์ด์ฌ์˜ dictionary, ๋ฃจ๋น„์˜ Hash, ์ž๋ฐ”์˜ Map ๋“ฑ์ด ์žˆ์Œ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํŠน์ง• ๊ธฐ๋ณธ ์—ฐ์‚ฐ์œผ๋กœ๋Š” search, insert, delete๊ฐ€ ์žˆ์Œ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Œ key๋ฅผ ํ†ตํ•ด์„œ value๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ => ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ๋‚˜ ๋ฐฐ์—ด์— ๋น„ํ•ด ์†๋„๊ฐ€ ๋น ๋ฆ„ ์ปค๋‹ค๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์‹œํ•ด์„œ ์งง์€ ๊ธธ์ด๋กœ ์ถ•์•ฝํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•  ๋•Œ ํšจ์œจ์  value๋Š” ์ค‘๋ณต ๊ฐ€๋Šฅํ•˜.. 2023. 3. 15.
[์ž๋ฃŒ๊ตฌ์กฐ] ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue) ์šฐ์„ ์ˆœ์œ„ ํ(Priority) ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ์šฐ์„ ์ˆ˜์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ ์šฐ์„ ์ˆœ์œ„ ๋Œ€๊ธฐ์—ด์ด๋ผ๊ณ ๋„ ํ•จ ๋Œ€๊ธฐ์—ด์—์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์š”์†Œ๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์š”์†Œ๋ณด๋‹ค ๋จผ์ € ์ œ๊ณต๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํž™(Heap)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ ๋ชจ๋“  ํ•ญ๋ชฉ์—๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ์Œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์š”์†Œ๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์€ ์š”์†Œ๋ณด๋‹ค ๋จผ์ € ํ์—์„œ ์ œ์™ธ ๋‘ ์š”์†Œ์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ ํ์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ œ๊ณต ์šฐ์„ ์ˆœ์œ„ ํ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, ํž™์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ ๊ฐ€๋Šฅ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ์‚ฝ์ž… (enqueue) ์‚ญ์ œ (denqueue) ๋ฐฐ์—ด (unsorted array) O(1) O(N) ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (unsorted linked list) O(1) O(N) ์ •๋ ฌ๋œ ๋ฐฐ์—ด (sorted array) O(N) O(1) .. 2023. 3. 13.
[์ž๋ฃŒ๊ตฌ์กฐ] ํž™(Heap) ํž™(Heap) ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’๋“ค ์ค‘์—์„œ ์ตœ๋Œ“๊ฐ’์ด๋‚˜ ์ตœ์†Ÿ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ด๋„๋ก ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ˜์ •๋ ฌ์ƒํƒœ(๋А์Šจํ•œ ์ •๋ ฌ์ƒํƒœ) ์œ ์ง€ ํฐ ๊ฐ’์ด ์ƒ์œ„์— ์žˆ๊ณ  ์ž‘์€ ๊ฐ’์ด ํ•˜์œ„์— ์žˆ๋Š” ์ •๋„ ์ค‘๋ณต๋œ ๊ฐ’ ํ—ˆ์šฉ ํž™์˜ ์ข…๋ฅ˜ ์ตœ๋Œ€ ํž™(max heap) ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‹๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ ์ตœ์†Œ ํž™(min heap) ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’์ด ์ž์‹ ๋…ธ๋“œ์˜ ํ‚ค ๊ฐ’ ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ด์ง„ํŠธ๋ฆฌ ํž™์˜ ํ™œ์šฉ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ์šด์˜ ์ฒด์ œ์—์„œ์˜ ์ž‘์—… ์Šค์ผ€์ฅด๋ง ์ˆ˜์น˜ ํ•ด์„์ ์ธ ๊ณ„์‚ฐ ํž™์˜ ๊ตฌํ˜„ ํž™์„ ์ €์žฅํ•˜๋Š” ํ‘œ์ค€์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐฐ์—ด ๊ตฌํ˜„์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค์ธ 0์€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ ํŠน์ • ์œ„์น˜์˜ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋Š” ์ƒˆ๋กœ์šด.. 2023. 3. 13.
[์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ(Tree) ํŠธ๋ฆฌ(Tree) ๋…ธ๋“œ๋“ค์ด ๋‚˜๋ฌด ๊ฐ€์ง€์ฒ˜๋Ÿผ ์—ฐ๊ฒฐ๋œ ๋น„์„ ํ˜• ๊ณ„์ธต์  ์ž๋ฃŒ๊ตฌ์กฐ ๊ณ„์ธต์ ์ธ ์ž๋ฃŒ๋ฅผ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ์ด์šฉ ๋…ธ๋“œ(node)๋“ค๊ณผ ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (edge)๋“ค๋กœ ๊ตฌ์„ฑ ํ•˜๋‚˜์˜ ๋ฃจํŠธ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง ํŠธ๋ฆฌ์™€ ๊ด€๋ จ๋œ ์šฉ์–ด ๋…ธ๋“œ(node) ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ์š”์†Œ ๋…ธ๋“œ์—๋Š” ํ‚ค ๋˜๋Š” ๊ฐ’๊ณผ ํ•˜์œ„ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ ๊ฐ„์„ (edge) ๋…ธ๋“œ์™€ ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„  (link, branch๋ผ๊ณ ๋„ ๋ถ€๋ฆ„) ๋ฃจํŠธ ๋…ธ๋“œ(root node) ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” ์ตœ์ƒ์œ„ ๋…ธ๋“œ, ํŠธ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋งŒ์„ ๊ฐ€์ง (A) ๋ถ€๋ชจ ๋…ธ๋“œ(parent node) ์ž์‹  ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ (H, I์˜ ๋ถ€๋ชจ ๋…ธ๋“œ๋Š” D) ์ž์‹ ๋…ธ๋“œ(child node) ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ํ•˜์œ„ ๋…ธ๋“œ (๋…ธ๋“œ D์˜ ์ž์‹ ๋…ธ๋“œ๋Š” H, I) ํ˜•์ œ ๋…ธ๋“œ(sibling node) ๊ฐ™์€.. 2023. 3. 9.
[์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ž˜ํ”„(Graph) ๊ทธ๋ž˜ํ”„(Graph) ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ์›์†Œ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ๋…ธ๋“œ(Node)์™€ ๊ทธ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (Edge)์„ ํ•˜๋‚˜๋กœ ๋ชจ์•„ ๋†“์€ ์ž๋ฃŒ๊ตฌ์กฐ ๊ทธ๋ž˜ํ”„ ๊ด€๋ จ ์šฉ์–ด ์ •์ (vertex): ์œ„์น˜๋ผ๋Š” ๊ฐœ๋… (node ๋ผ๊ณ ๋„ ๋ถ€๋ฆ„) ๊ฐ„์„ (edge): ์œ„์น˜ ๊ฐ„์˜ ๊ด€๊ณ„, ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„  (link, branch ๋ผ๊ณ ๋„ ๋ถ€๋ฆ„) ์ธ์ ‘ ์ •์ (adjacent vertex): ๊ฐ„์„ ์— ์˜ ํ•ด ์ง์ ‘ ์—ฐ๊ฒฐ๋œ ์ •์  ์ •์ ์˜ ์ฐจ์ˆ˜(degree): ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ํ•˜๋‚˜์˜ ์ •์ ์— ์ธ์ ‘ํ•œ ์ •์ ์˜ ์ˆ˜ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์— ์กด์žฌํ•˜๋Š” ์ •์ ์˜ ๋ชจ๋“  ์ฐจ์ˆ˜์˜ ํ•ฉ = ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„  ์ˆ˜์˜ 2๋ฐฐ ์ง„์ž… ์ฐจ์ˆ˜(in-degree): ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ ์™ธ๋ถ€์—์„œ ์˜ค๋Š” ๊ฐ„์„ ์˜ ์ˆ˜ (๋‚ด์ฐจ์ˆ˜ ๋ผ๊ณ ๋„ ๋ถ€๋ฆ„) ์ง„์ถœ ์ฐจ์ˆ˜(out-degree): ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”™์—์„œ ์™ธ๋ถ€๋กœ ํ–ฅํ•˜๋Š” .. 2023. 3. 8.
[์ž๋ฃŒ๊ตฌ์กฐ] Time Complexity (์‹œ๊ฐ„ ๋ณต์žก๋„) Time Complexity (์‹œ๊ฐ„ ๋ณต์žก๋„) ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์ž…๋ ฅ๊ฐ’๊ณผ ์—ฐ์‚ฐ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ฒ™๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ ์ž…๋ ฅ์˜ ํ•จ์ˆ˜ ๊ด€๊ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋กœ์ง์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋กœ์ง์„ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ, ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผ ํ•จ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„: ์ž…๋ ฅ๊ฐ’์ด ์ปค์ง์— ๋”ฐ๋ผ ์ฆ๊ฐ€ํ•˜๋Š” ์‹œ๊ฐ„์˜ ๋น„์œจ์„ ์ตœ์†Œํ™”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌ์„ฑ ์ฃผ๋กœ ๋น…-์˜ค ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ๋‚˜ํƒ€๋ƒ„ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ํ‘œ๊ธฐํ•˜๋Š” ๋ฐฉ๋ฒ• Big-O(Big-Oh, ๋น…-์˜ค) ⇒ ์ƒํ•œ ์ ๊ทผ, ์ตœ์•…์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ• Big-Ω(Big-Omega, ๋น…-์˜ค๋ฉ”๊ฐ€) ⇒ ํ•˜ํ•œ ์ ๊ทผ, ์ตœ์„ ์˜ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ• Big-θ(Big-Theta, ๋น…-์„ธํƒ€) ⇒ ๋น… ์˜ค์™€ ๋น… ์˜ค๋ฉ”๊ฐ€์˜ ๊ณตํ†ต๋ถ€.. 2023. 3. 7.
๋ฐ˜์‘ํ˜•