😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[Coding Interview University] 이진탐색 : 이둠 및 κ΅¬ν˜„ λ³Έλ¬Έ

πŸ‘©‍πŸ’» 컴퓨터 ꡬ쑰/Computer Science

[Coding Interview University] 이진탐색 : 이둠 및 κ΅¬ν˜„

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 7. 7. 01:42
728x90
λ°˜μ‘ν˜•

<λ³Έ λΈ”λ‘œκ·ΈλŠ” μ½”λ”©μΈν„°λ·°λŒ€ν•™ λ‹˜μ˜ Gitκ³Ό μ„œμ μ„ μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•˜λ©° μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ :-)>

 

🫧 트리

: ν•˜λ‚˜μ˜ 루트 μ½”λ“œλ₯Ό 가진닀

: 루트 λ…Έλ“œλŠ” 0개 μ΄μƒμ˜ μžμ‹ λ…Έλ“œλ₯Ό κ°–κ³  μžˆλ‹€

: νŠΈλ¦¬μ—λŠ” 사이클 μ‘΄μž¬ν•  수 μ—†λ‹€

: λ…Έλ“œλ“€μ€ νŠΉμ • μˆœμ„œλ‘œ λ‚˜μ—΄λ  μˆ˜λ„ 있고 그럴 수 없을 μˆ˜λ„ μžˆλ‹€

: 각 λ…Έλ“œλŠ” μ–΄λ–€ μžλ£Œν˜•μœΌλ‘œλ„ ν‘œν˜„μ΄ κ°€λŠ₯ν•˜λ‹€

 

🫧 μ΄μ§„νŠΈλ¦¬

: 각 λ…Έλ“œκ°€ μ΅œλŒ€ 두 개의 μžμ‹μ„ κ°–λŠ” 트리

 

🫧 μ΄μ§„νƒμƒ‰νŠΈλ¦¬

: “λͺ¨λ“  μ™Όμͺ½ μžμ‹λ“€ ≤ n < λͺ¨λ“  였λ₯Έμͺ½ μžμ‹λ“€” 속성은 λͺ¨λ“  λ…Έλ“œ n에 λŒ€ν•΄μ„œ λ°˜λ“œμ‹œ 참이어야 함

: λͺ¨λ“  λ…Έλ“œμ— λŒ€ν•΄μ„œ μ™Όμͺ½ μžμ‹λ“€μ˜ 값이 ν˜„μž¬ λ…Έλ“œ 값보닀 μž‘κ±°λ‚˜ 같도둝 ν•˜κ³ , 였λ₯Έμͺ½ μžμ‹λ“€ 값은 ν˜„μž¬ λ…Έλ“œμ˜ 값보닀 λ°˜λ“œμ‹œ 컀야함

 

🫧 κ· ν˜• vs λΉ„κ· ν˜•

  • κ· ν˜•
    • λ ˆλ“œ λΈ”λž™ 트리
    • AVL 트리

 

🫧 μ™„μ „μ΄μ§„νŠΈλ¦¬

: 트리의 λͺ¨λ“  λ†’μ΄μ—μ„œ λ…Έλ“œκ°€ 꽉 μ°¨ μžˆλŠ” 이진 트리

: λ§ˆμ§€λ§‰ λ‹¨κ³„λŠ” 꽉 μ°¨ μžˆμ§€ μ•Šμ•„λ„ λ˜μ§€λ§Œ λ…Έλ“œκ°€ μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ μ±„μ›Œμ Έμ•Ό 함

 

🫧 μ „μ΄μ§„νŠΈλ¦¬

: λͺ¨λ“  λ…Έλ“œμ˜ μžμ‹μ΄ μ—†κ±°λ‚˜ μ •ν™•νžˆ 두 개 μžˆλŠ” 경우

: μžμ‹μ΄ ν•˜λ‚˜λ§Œ μžˆλŠ” λ…Έλ“œκ°€ μ‘΄μž¬ν•΄μ„œλŠ” μ•ˆλ¨

 

🫧 ν¬ν™”μ΄μ§„νŠΈλ¦¬

: μ „ 이진 νŠΈλ¦¬μ΄λ©΄μ„œ μ™„μ „ 이진 트리인 경우

: λͺ¨λ“  말단 λ…Έλ“œλŠ” 같은 높이에 μžˆμ–΄μ•Ό ν•˜λ©°, λ§ˆμ§€λ§‰ λ‹¨κ³„μ—μ„œ λ…Έλ“œμ˜ κ°œμˆ˜κ°€ μ΅œλŒ€κ°€ λ˜μ–΄μ•Ό ν•œλ‹€

: λ…Έλ“œμ˜ κ°œμˆ˜κ°€ μ •ν™•νžˆ 2^K-1 (KλŠ” 트리의 높이) 개

 

🫧 이진 탐색

μ²˜μŒμ— N개 크기의 λ°°μ—΄μ—μ„œ 단계가 ν•˜λ‚˜μ”© μ§€λ‚˜κ°μ— 따라 탐색할 λ°°μ—΄μ˜ 크기가 λ°˜μ”© 쀄어듀기 λ•Œλ¬Έ

 

🫧 (μ •μˆ˜κ°€ μ •λ ¬λœ λ°°μ—΄μ—μ„œ) 이진 탐색

int BSearch(int arr[], int target) {
    int low = 0;
    int high = arr.length - 1;
    int mid;

    while(low <= high) {
        mid = (low + high) / 2;

        if (arr[mid] == target)
            return mid;
        else if (arr[mid] > target)
            high = mid - 1;
        else
            low = mid + 1;
    }
    return -1;
}

 

🫧 μž¬κ·€λ₯Ό μ‚¬μš©ν•œ 이진 탐색

int BSearchRecursive(int arr[], int target, int low, int high) {
    if (low > high)
        return -1;

    int mid = (low + high) / 2;
    if (arr[mid] == target)
        return mid;
    else if (arr[mid] > target)
        return BSearchRecursive(arr, target, low, mid-1);
    else
        return BSearchRecursive(arr, target, mid+1, high);
}
728x90
λ°˜μ‘ν˜•
Comments