[[TableOfContents]] = ì˜ˆê³ = ìš”êµ¬ì‚¬í• : 지금까지 ë°°ìš´ ë‚´ìš©ì„ ëª¨ë‘ ì•Œê³ ìžˆì–´ì•¼ 함 ì¶œì œë°©ì‹ : 새로운 ê°œë…ì„ ì´ìš©í•˜ëŠ” í”„ë¡œê·¸ëž¨ì„ ë§Œë“ ë‹¤ ë³´ìƒ : 테스트 실패시 ë³´ê°• ì§„í–‰ || ë¬¸ì œ || 종류 || 난ì´ë„ || || 1단계 || Binary Search || 보통 || || 2단계 || BFS / DFS 중 하나 ì¶œì œ || ì–´ë ¤ì›€ || || 3단계 || Bayesian Classifier || 지옥불 || = 테스트 = == Binary Search == '''ë¬¸ì œ''' binary search(ì´ì§„ íƒìƒ‰)는 '''ì´ë¯¸ ì •ë ¬ëœ ë°°ì—´'''ì„ ëŒ€ìƒìœ¼ë¡œ 수행하는 검색 ì•Œê³ ë¦¬ì¦˜ì´ë‹¤. 첫 번째 ê³¼ì œëŠ” 오름차순으로 ì •ë ¬ëœ ì •ìˆ«ê°’ì„ ê°€ì§€ëŠ” 1ì°¨ì› ë°°ì—´ë¡œë¶€í„° ì›í•˜ëŠ” ê°’ì˜ ì¡´ìž¬ìœ ë¬´ì™€ ì¸ë±ìФ 번호를 ì¶œë ¥í•˜ëŠ” binary_search 함수를 구현하는 것ì´ë‹¤. 만약 ì°¾ìœ¼ë ¤ëŠ” ê°’ì´ ë°°ì—´ì— ì¡´ìž¬í•˜ì§€ 않으면 '''-1ì„ ë¦¬í„´'''한다. ë™ìž‘ ë°©ì‹ì€ 다ìŒê³¼ 같다. 여기서는 ì¤‘ë³µëœ ê°’ì´ ì¼ì¹˜í•˜ëŠ” ê²½ìš°ì— ëŒ€í•´ì„œëŠ” 아무 ì¸ë±ìŠ¤ë‚˜ ì¶œë ¥í•˜ë©´ ë˜ëŠ” 것으로 ê°€ì •í•œë‹¤. {{{ 1. ë°°ì—´ì˜ ì¤‘ì•™ì— ìœ„ì¹˜í•œ ê°’ì„ pivot으로 잡는다. 2. ì°¾ìœ¼ë ¤ëŠ” ê°’ê³¼ pivotì— ìœ„ì¹˜í•œ ê°’ì„ ë¹„êµí•œë‹¤. 2-1. 만약 ê·¸ ê°’ì´ ì¼ì¹˜í•œë‹¤ë©´, ì°¾ì€ ê²ƒì´ë‹¤. 2-2. 만약 ê·¸ ê°’ì´ pivotì— ìœ„ì¹˜í•œ 값보다 í¬ë©´ 3-1로 ì´ë™í•œë‹¤. 2-3. 만약 ê·¸ ê°’ì´ pivotì— ìœ„ì¹˜í•œ 값보다 í¬ë©´ 3-2로 ì´ë™í•œë‹¤. 3-1. pivotì„ í¬í•¨í•´ ê·¸ ì´í›„ì˜ ë¶€ë¶„ë“¤ì€ ë¬´ì¡°ê±´ ì°¾ìœ¼ë ¤ëŠ” 값보다 í¬ë¯€ë¡œ 검색 대ìƒì—서 ì œì™¸í•œë‹¤. 3-2. pivotì„ í¬í•¨í•´ ê·¸ ì´ì „ì˜ ë¶€ë¶„ë“¤ì€ ë¬´ì¡°ê±´ ì°¾ìœ¼ë ¤ëŠ” 값보다 í¬ë¯€ë¡œ 검색 대ìƒì—서 ì œì™¸í•œë‹¤. 4. 만약 ë” ì´ìƒ ì œì™¸í• ìˆ˜ 없다면(ìµœê·¼ì˜ ê²€ì‚¬ 대ìƒì´ 마지막 검색 대ìƒì´ì—ˆë‹¤ë©´) ì´ ë°°ì—´ì—는 ì°¾ìœ¼ë ¤ëŠ” ê°’ì´ ì—†ìœ¼ë¯€ë¡œ ì•Œê³ ë¦¬ì¦˜ì„ ì¢…ë£Œí•œë‹¤. 5. ë‚¨ì€ ë¶€ë¶„ì˜ ë°°ì—´ì—서 ì¤‘ê°„ì— ìœ„ì¹˜í•œ ê°’ì„ pivot으로 ìž¡ê³ 2로 ì´ë™í•œë‹¤. }}} 함수 ì •ì˜ ì˜ˆì‹œëŠ” 다ìŒê³¼ 같다. {{{ int binary_search(int* arr, int tofind, int start, int end) { int pivot = [start와 endì˜ ì¤‘ê°„]; /* 주요부분 ìƒëžµ */ if (end < start) return -1; return binary_search(arr, tofind, start, end); } }}} 테스트용 코드 {{{ #include <stdio.h> #pragma warning(disable:4996) int binary_search(int*, int, int, int); //function prototype int main(void) { int arr1[10] = { 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 }; int arr2[10] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }; int arr3[10] = { 5, 5, 5, 10, 10, 10, 10, 15, 15, 15 }; for (int i = 0; i < 10; i++) { printf("%d ", arr1[i]); } printf("\n\n===================\n\n"); for (int i = 0; i < 10; i++) { printf("%d ", arr2[i]); } printf("\n\n===================\n\n"); for (int i = 0; i < 10; i++) { printf("%d ", arr3[i]); } printf("\n\n===================\n\n"); int scan; printf("Input number to find : "); scanf("%d", &scan); printf("Input number found at %d, %d, %d", binary_search(arr1, scan, 0, 9), binary_search(arr2, scan, 0, 9), binary_search(arr3, scan, 0, 9)); return 0; } }}} == Depth-First Search == ''ë¬¸ì œ'' ---- ----------------------------------- [새싹êµì‹¤/2015] [새싹êµì‹¤/2015/ì˜ì‚¬ì–‘ë°˜]