ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C

    [์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ (DFS, BFS)

    [์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ (DFS, BFS)

    [ ๊ทธ๋ž˜ํ”„์˜ ํƒ์ƒ‰ ] ๋”๋ณด๊ธฐ - ๊ทธ๋ž˜ํ”„์˜ ํƒ์ƒ‰ โ”” ํ•˜๋‚˜์˜ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ฐจ๋ก€๋Œ€๋กœ ๋ชจ๋“  ์ •์ ๋“ค์„ ํ•œ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜์—ฌ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ ๋งŽ์€ ๋ฌธ์ œ๋“ค์ด ๋‹จ์ˆœ ๊ทธ๋ž˜ํ”„์˜ ๋…ธ๋“œ(์ •์ )๋ฅผ ํƒ์ƒ‰ํ•˜๋А ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•จ - ํƒ์ƒ‰ ๋ฐฉ๋ฒ• โ”” ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ( DFS : Depth First Search ) ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ ( BFS : Breath First Search ) [ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ (DFS) ] ๋”๋ณด๊ธฐ - ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ (DFS) โ”” ํŠธ๋ฆฌ๋‚˜ ๊ทธ๋ž˜ํ”„์—์„œ ํ•œ ๋ฃจํŠธ๋กœ ํƒ์ƒ‰ํ•˜๋‹ค๊ฐ€ ํŠน์ • ์ƒํ™ฉ์—์„œ ์ตœ๋Œ€ํ•œ ๊นŠ์ด ๋“ค์–ด๊ฐ€์„œ ํ™•์ธํ•œ ๋’ค ๋‹ค์‹œ ๋Œ์•„๊ฐ€ ๋‹ค๋ฅธ ๋ฃจํŠธ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ฃผ๋กœ ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„, ๋‹จ์ˆœ ํƒ์ƒ‰ ์†๋„ ์ž์ฒด๋Š” ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ (BFS)์— ๋น„ํ•ด ๋А๋ฆผ. ํƒ์ƒ‰์ด ์•„๋‹Œ ์ˆœํšŒ๋ฅผ ํ•  ๊ฒฝ์šฐ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค โ‘  ๊ฐˆ๋ฆผ..

    [์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ž˜ํ”„

    [์ž๋ฃŒ๊ตฌ์กฐ] ๊ทธ๋ž˜ํ”„

    [ ๊ทธ๋ž˜ํ”„ ] ๋”๋ณด๊ธฐ - ๊ทธ๋ž˜ํ”„ (Graph) โ”” ๊ทธ๋ž˜ํ”„๋Š” ์ •์ (Vertex)๊ณผ ์ •์ ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (Edge)์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ด๋ก ์ ์œผ๋กœ ํ–‰๋ ฌ๊ณผ ๋ฆฌ์ŠคํŠธ ๋‘๊ฐœ์˜ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‚˜ ์ตœ์ ์˜ ํ˜•ํƒœ๋Š” ๋‘ ๊ตฌ์กฐ์˜ ์กฐํ•ฉ๋œ ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ์Œ [ ๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„ ] ๋”๋ณด๊ธฐ - ๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„ (Weight Graph) โ”” ์ •์ ๊ณผ ์ •์  ์‚ฌ์ด๋ฅผ ์ž‡๋Š” ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๊ฐ€ ์ฃผ์–ด์ง„ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งํ•œ๋‹ค. ๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„ ์ค‘ ์œ ํ–ฅ ๊ทธ๋ž˜ํ”„๋ฅผ ๋„คํŠธ์›Œํฌ(Network)๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๊ฐ ์ •์ ๋“ค์„ ๋„์‹œ, ๊ฐ„์„ ๋“ค์„ ๋„๋กœ๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด ๊ฐ€์ค‘์น˜๋Š” ๊ฐ ๋„๋กœ๋ฅผ ์ง€๋‚˜๊ธฐ ์œ„ํ•œ ๋น„์šฉ์ด๋‚˜ ๋„์‹œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋“ฑ์˜ ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ [ ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„ / ์œ ๋„ ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„ ] ๋”๋ณด๊ธฐ - ๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”„ (Subgraph) โ”” ์–ด๋– ํ•œ ๊ทธ๋ž˜ํ”„์˜ ์ •์ ๊ณผ ๊ฐ„์„  ๊ฐ€์šด๋ฐ ์ผ๋ถ€๋กœ..

    [์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ (2)

    [์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ (2)

    ใ€Š ํŠธ๋ฆฌ ใ€‹ [ ์ด์ง„ํŠธ๋ฆฌ์˜ ์ˆœํšŒ ] ๋”๋ณด๊ธฐ - ์ „์œ„์ˆœํšŒ(Preorder) โ”” ์ˆœํšŒ ์ˆœ์„œ : ๋ฃจํŠธ → ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ → ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์ˆœ์„œ๋กœ ์ˆœํšŒ (VLR) // C code // ์ „์œ„ ์ˆœํšŒ void preorder(TreeNode* root) { if (root != NULL) { printf("[%2d] ", root->data); preorder(root->left); preorder(root->right); } } - ์ค‘์œ„์ˆœํšŒ(Inorder) โ”” ์ˆœํšŒ ์ˆœ์„œ : ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ → ๋ฃจํŠธ → ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ์ˆœ์„œ๋กœ ์ˆœํšŒ (LVR) // C code // ์ค‘์œ„ ์ˆœํšŒ void inorder(TreeNode* root) { if (root != NULL) { inorder(root->left); print..

    [์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ (1)

    [์ž๋ฃŒ๊ตฌ์กฐ] ํŠธ๋ฆฌ (1)

    ใ€Š ํŠธ๋ฆฌ(Tree) ใ€‹ [ ํŠธ๋ฆฌ์˜ ๊ฐœ๋… ] - ๋ฆฌ์ŠคํŠธ, ์Šคํƒ, ํ ๋“ฑ๊ณผ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ๋‚˜์—ด๋œ ์„ ํ˜• ๊ตฌ์กฐ์ž„ - ํŠธ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ„์ธต์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋น„์„ ํ˜• ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ - ๋ถ€๋ชจ์™€ ์ž์‹ ๊ด€๊ณ„์˜ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ - ์ธ๊ณต์ง€๋Šฅ ํ•™์Šต์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฐ์ •ํŠธ๋ฆฌ(decision tree), PC์˜ ํด๋” ๊ตฌ์กฐ ๋“ฑ๊ณผ ๊ฐ™์ด ๊ณ„์ธต์ ์ธ ์กฐ์ง์„ ํ‘œํ˜„ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ [ ํŠธ๋ฆฌ์˜ ์šฉ์–ด ] ๋…ธ๋“œ : ํŠธ๋ฆฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ ๋‹จ๋ง ๋…ธ๋“œ / ๋ฆฌํ”„ ๋…ธ๋“œ(terminal node / leaf node) : ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ ๋น„๋‹จ๋ง๋…ธ๋“œ(internal node) : ์ ์–ด๋„ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž์‹์„ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ ๋ฃจํŠธ ๋…ธ๋“œ(root node) : ํŠธ๋ฆฌ์˜ ์ตœ์ƒ์œ„ ๋…ธ๋“œ๋กœ์จ ๋ถ€๋ชจ ๋…ธ๋“œ x ์„œ๋ธŒ ํŠธ๋ฆฌ(sub tree) : ํ•˜๋‚˜์˜..

    [์ž๋ฃŒ๊ตฌ์กฐ] ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (2)

    [์ž๋ฃŒ๊ตฌ์กฐ] ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (2)

    ใ€Š ์›ํ˜• ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ใ€‹ - ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๋งํฌ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ - ์‚ญ์ œ๋‚˜ ์‚ฝ์ž…์‹œ ํ•ญ์ƒ ์„ ํ–‰ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ํ•„์š”ํ•จ - ๋ณดํ†ต ํ—ค๋“œ ํฌ์ธํ„ฐ๊ฐ€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ๋” ๊ตฌ์„ฑํ•จ - ๋ฆฌ์ŠคํŠธ์˜ ์ฒ˜์Œ์ด๋‚˜ ๋งˆ์ง€๋ง‰์— ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์—ฐ์‚ฐ์ด ๋‹จ์ˆœ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ๋น„ํ•ด ์šฉ์ด [ insert_first() ํ•จ์ˆ˜ ] // C code // ํ•ด๋‹น ๋…ธ๋“œ์˜ ์•ž์— ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ํ•จ์ˆ˜ ListNode* insert_first(ListNode* head, element value) { ListNode* node = (ListNode*)malloc(sizeof(ListNode)); node->data = value; if (head == NULL) { head = node; node->link = head; ..