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

์•Œ๊ณ ๋ฆฌ์ฆ˜17

13-1๊ฐ•. ํ•ด์Š(Hashing) 1 SUHA(Simple Uniform Hashing Assumption) - ๊ฐ๊ฐ์˜ ํ‚ค๊ฐ€ ๋ชจ๋“  ์Šฌ๋กฏ๋“ค์— ๊ท ๋“ฑํ•œ ํ™•๋ฅ ๋กœ() ๋…๋ฆฝ์ ์œผ๋กœ(independently) ํ•ด์Š๋œ๋‹ค๋Š” ๊ฐ€์ • => ์‚ฌ์‹ค ํ˜„์‹ค์ ์ด์ง€ ์•Š๋‹ค. - ์„ฑ๋Šฅ๋ถ„์„์„ ์œ„ํ•ด์„œ ์ฃผ๋กœ ํ•˜๋Š” ๊ฐ€์ •์ผ ๋ฟ - hash ํ•จ์ˆ˜๋Š” deterministicํ•˜๋ฏ€๋กœ ํ˜„์‹ค์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค - Load factor alpha = n/m: - n : ํ…Œ์ด๋ธ”์— ์ €์žฅ๋  ํ‚ค์˜ ๊ฐฏ์ˆ˜ - m : ํ•ด์‰ฌํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ, ์ฆ‰ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๊นƒ์ˆ˜ - ๊ฐ ์Šฌ๋กฏ์— ์ €์žฅ๋œ ํ‚ค์˜ ํ‰๊ท  ๊ฐฏ์ˆ˜ - ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ T[j]์˜ ๊ธธ์ด๋ฅผ Nj๋ผ๊ณ  ํ•˜๋ฉด, E[Nj] = alpha - ๋งŒ์•ฝ n = O(m)์ด๋ฉด ํ‰๊ท ๊ฒ€์ƒ‰์‹œ๊ฐ„์€ O(1) 2020. 11. 24.
12-2๊ฐ•. ๋ ˆ๋“œ๋ธ”๋ž™ํŠธ๋ฆฌ (3) RB-DELETE(T, z) // T: Binary Search Tree, z : ์‚ญ์ œํ•  ๋…ธ๋“œ if left[z] == nil[T] or right[z] == nil[T]// ์ž์‹์ด ์—†๊ฑฐ๋‚˜, ์ž์‹์ด ํ•˜๋‚˜๊ฑฐ๋‚˜ then y 2020. 11. 22.
12-1๊ฐ•. ๋ ˆ๋“œ๋ธ”๋ž™ํŠธ๋ฆฌ(1) ๋ฌธ์ œ ์ƒํ™ฉ : ํ˜„์‹ค์„ธ๊ณ„์—์„œ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์ •๋ ฌ๋œ Binary Search Tree๋Š” ์ฐพ๊ธฐ ํž˜๋“ค๋‹ค. ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ทน๋‹จ์ ์œผ๋กœ ์น˜์šฐ์นœ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณด์™„ ๋ฐฉ๋ฒ• : ๋ ˆ๋“œ๋ธ”๋ž™ํŠธ๋ฆฌ(Red-Black Tree)๋Š” ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ๋‹ค. ์™„๋ฒฝํ•˜๊ฒŒ ํŠธ๋ฆฌ์˜ ๊ท ํ˜•์„ ๋งž์ถœ ์ˆ˜๋Š” ์—†์œผ๋‚˜, ์–ด๋Š์ •๋„ ๋ณด์™„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. INSERT, DELETE ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์ ˆํ•˜๊ฒŒ ์ˆ˜์ •ํ–ˆ๋‹ค. ๋ ˆ๋“œ๋ธ”๋ž™ํŠธ๋ฆฌ - ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ์ผ์ข… - ๊ท ํ˜• ์žกํžŒ ํŠธ๋ฆฌ : ๋†’์ด๊ฐ€ O(log2n) - SEARCH, INSERT, DELETE ์—ฐ์‚ฐ์„ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(log2n) ์‹œ๊ฐ„์— ์ง€์›ํ•œ๋‹ค. - ๊ฐ ๋…ธ๋“œ๋Š” ํ•˜๋‚˜์˜ ํ‚ค(key), ์™ผ์ชฝ์ž์‹(left), ์˜ค๋ฅธ์ชฝ ์ž์‹(right), ๊ทธ๋ฆฌ๊ณ  ๋ถ€๋ชจ๋…ธ๋“œ(p)์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค. - ์ž์‹๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ,.. 2020. 11. 17.
11-3๊ฐ•. ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ (Binary Search Tree) ์ง€๋‚œ ๊ฐ•์˜ ๊ณต๋ถ€ ๋‚ด์šฉ... ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ์˜ ํƒ์ƒ‰, ์‚ฝ์ž… ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ/์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ์‚ญ์ œ Case 1 : ์ž์‹๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ -> ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๊ทธ๋ƒฅ ์‚ญ์ œํ•œ๋‹ค. Case 2 : ์ž์‹๋…ธ๋“œ๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ -> ์ž์‹ ์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ์›๋ž˜ ์ž์‹ ์˜ ์œ„์น˜๋กœ ๋ณด๋‚ธ๋‹ค. Case 3 : ์ž์‹๋…ธ๋“œ๊ฐ€ 2๊ฐœ์ธ ๊ฒฝ์šฐ -> ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ž๋ฆฌ๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ , ๋ฐ์ดํ„ฐ๋งŒ ์‚ญ์ œํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋…ธ๋“œ์™€ ๊ฐ€์ž์•„ ๊ฐ€๊นŒ์šด ๊ฐ’์ธ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ํ•ด๋‹น ์ž๋ฆฌ๋กœ ๊ฐ€์ ธ ์˜จ๋‹ค. ๊ทธ ๋‹ค๋ฅธ ๋…ธ๋“œ๋Š” ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ successor์ด๋‹ค. ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ successor๋Š” ์ตœ๋Œ€ 1๊ฐœ์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค. TREE-DELETE(T, z)// z : ์‚ญ์ œํ•  ๋…ธ๋“œ { if left[z] == null or right[z] == null then y 2020. 11. 15.
์ œ11-1๊ฐ•. ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ(Binary Search Tree) ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ(Binary Search Tree) - ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ‚ค(key)๋ฅผ ์ €์žฅ - ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ๋“ค์„ ์ง€์›ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ INSERT - ์ƒˆ๋กœ์šด ํ‚ค์˜ ์‚ฝ์ž… SEARTCH - ํ‚ค ํƒ์ƒ‰ DELETE - ํ‚ค์˜ ์‚ญ์ œ ex) ์‹ฌ๋ณผํ…Œ์ด๋ธ” search insert delete ๋ฐฐ์—ด ์ •๋ ฌ๋œ ๊ฒฝ์šฐ O(logn) O(n) O(n) ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ O(n) O(1) O(1) ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ •๋ ฌ๋œ ๊ฒฝ์šฐ O(n) O(n) O(1) ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ O(n) O(1) O(1) ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค - ์ •๋ ฌ๋œ, ํ˜น์€ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐฐ์—ด ํ˜น์€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ INSERT, SEARCH, DELETE ์ค‘ ์ ์–ด๋„ ํ•˜๋‚˜๋Š” O(n) - ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ(Binary Search Tree), ๋ ˆ๋“œ-๋ธ”๋ž™ํŠธ๋ฆฌ(red-black tree), A.. 2020. 11. 10.
์ œ 10๊ฐ• ํŠธ๋ฆฌ์™€ ์ด์ง„ํŠธ๋ฆฌ ํŠธ๋ฆฌ (Tree) ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์กฐ์ง๋„๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ์„œ๋ธŒ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ, ๊ฐ€๊ณ„๋„๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์“ด๋‹ค. ํŠธ๋ฆฌ๋Š” ๋…ธ๋“œ(node) ๋“ค๊ณผ ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋งํฌ(link)๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ๋ฃจํŠธ(root) : ๋งจ ์œ„์˜ ๋…ธ๋“œ ๋งํฌ(link) : ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ์„  (=edge, branch) ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„ ํŠธ๋ฆฌ ๊ตฌ์กฐ ์ƒ์—์„œ ์ƒ๋Œ€์ ์œผ๋กœ ์œ„์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ๋ถ€๋ชจ ๋…ธ๋“œ๋ผ ํ•˜๊ณ , ์•„๋ž˜์— ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์ž์‹ ๋…ธ๋“œ๋ผ ํ•œ๋‹ค. ํŠธ๋ฆฌ์˜ ํ˜•์ œ ๊ด€๊ณ„ ๋ถ€๋ชจ๊ฐ€ ๋™์ผํ•œ ๋…ธ๋“œ๋“ค์„ ํ˜•์ œ(sibling) ๊ด€๊ณ„๋ผ๊ณ  ํ•œ๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์€ ์œ ์ผํ•œ ๋ถ€๋ชจ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค. ๋ฆฌํ”„๋…ธ๋“œ ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ๋“ค์„ ๋ฆฌํ”„(leaf) ๋…ธ๋“œ๋ผ ํ•œ๋‹ค. ๋ฆฌํ”„๋…ธ๋“œ๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ๋“ค์„ ๋‚ด๋ถ€(internal.. 2020. 11. 8.
9๊ฐ•. Java์—์„œ์˜ ์ •๋ ฌ - Arrays ํด๋ž˜์Šค๊ฐ€ primitive type์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ ์ •๋ ฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. int[] data = new int[capacity]; // data[0]์—์„œ data[capacity-1]๊นŒ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฝ‰ ์ฐจ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ ฌํ•œ๋‹ค. Arrays.sort(data); //๋ฐฐ์—ด์ด ๊ฝ‰ ์ฐจ์žˆ์ง€ ์•Š๊ณ , data[0]์—์„œ data[size-1]๊นŒ์ง€ size๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋งŒ ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ ฌํ•œ๋‹ค. Arrays.sort(data, 0, size); - int ์ด์™ธ์˜ ๋‹ค๋ฅธ primitive type ๋ฐ์ดํ„ฐ(double, char ๋“ฑ..)์— ๋Œ€ํ•ด์„œ๋„ ์ œ๊ณตํ•œ๋‹ค. Primitive type ๋ฐ์ดํ„ฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Arrays.sort() ๋ฉ”์„œ๋“œ๋กœ ์ •๋ ฌ๋œ๋‹ค. // fruits๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฐฐ์—ด ์„ ์–ธ๊ณผ .. 2020. 11. 5.
10. ํ•ฉ๋ณ‘์ •๋ ฌ (merge sort) - ๋ถ„ํ• ์ •๋ณต์•Œ๊ณ ๋ฆฌ์ฆ˜(Divide and Conquer) ๊ทธ๋ƒฅ ๋ง ๊ทธ๋Œ€๋กœ, ๋ฐฐ์—ด์„ ๋ถ„ํ• ํ•˜๊ณ , ํ•ด๊ฒฐํ•˜๊ณ , ... ์ด๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. 1. ๋ถ„ํ•  : ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ž‘์€ ํฌ๊ธฐ์˜ ๋™์ผํ•œ ๋ฌธ์ œ๋“ค๋กœ ๋ถ„ํ•  2. ์ •๋ณต : ๊ฐ๊ฐ์˜ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ์ˆœํ™˜์ ์œผ๋กœ ํ•ด๊ฒฐ 3. ํ•ฉ๋ณ‘ : ์ž‘์€ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ํ•ฉํ•˜์—ฌ(merge), ์›๋ž˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๋ฅผ ๊ตฌํ•จ ๋Œ€ํ‘œ์ ์ธ ๋ถ„ํ• ์ •๋ณต์•Œ๊ณ ๋ฆฌ์ฆ˜์—๋Š” ํ•ฉ๋ณ‘์ •๋ ฌ(merge sort)๊ณผ ํ€ต์ •๋ ฌ(quick sort)์ด ์žˆ๋‹ค. ๋ถ„ํ• ์€ ํ•˜๋‚˜์˜ ํฐ ๋ฌธ์ œ๋ฅผ ๊ฐ์ž ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๊ฐ๊ฐ์˜ ์ž‘์€ ๋ฌธ์ œ๋“ค์€ ์›๋ž˜ ๋ฌธ์ œ์™€ ๋™์ผํ•œ ๋ฌธ์ œ์—ฌ์•ผ ํ•œ๋‹ค. ์ •๋ณต์ด๋ผ๋Š” ์˜๋ฏธ๋Š” ๊ฐ๊ฐ์˜ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์€ ํ•ฉ๋ณ‘์ •๋ ฌ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘œํ˜„ํ•œ ์˜ˆ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์˜ ๋ฐฐ์—ด์—์„œ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋ฅผ .. 2020. 10. 15.
๋ฐ˜์‘ํ˜•