-
Arrays(λ°°μ΄), Binary Search(μ΄μ§ νμ), μ¦λͺ , κ·Έλ¦¬κ³ logPROGRAMMING/μλ£κ΅¬μ‘° 2020. 6. 18. 14:26
Arrays: μ°μλ μ£Όμ, λμΌν Type
μ₯μ : κ° μμμ λν μ κ·Όμ΄ μμ μκ°μ κ°λ₯. Search κ° λΉ λ¦
λ¨μ : λ°°μ΄μ ν¬κΈ°λ₯Ό λ³ννλ €λ©΄ λΉμ©μ΄ ν¬κ² λ¦. Insert, Delete κ° λ릴 μ μλ€.
-> λ³νκ° μκ±°λ λλ¬Έ ννμ μλ£μ μ¬μ©νλ€.
Binary Search (μ΄μ§ νμ)
μλ£μ νμ μκ³ λ¦¬μ¦ μ€ μ ν νμ(ν μμμ© μ²μλΆν° μμ°¨μ μΌλ‘ λ°©λ¬Ένμ¬ μ°Ύλ λ°©λ²) λ³΄λ€ μλ±ν λΉ λ₯Έ μκ³ λ¦¬μ¦μΌλ‘, μλ£λ₯Ό λ°μ© λλμ΄ νμνλ μκ³ λ¦¬μ¦μ΄λ€. μ¦, μ€κ°κ°μ λ³΄κ³ κ·Έλ³΄λ€ μΌμͺ½μ μμμ§ μ€λ₯Έμͺ½μ μμμ§ νλ¨νμ¬ κ·Έ ν΄λΉ ꡬμμμ μλ‘κ² λ°μ© νμνλ κ²μ΄λ€. μ΄λ, μλ£λ (무쑰건) μ λ ¬λμ΄ μμ΄μΌ νλ€.
λ€μμ κ°κ° λ°λ³΅μ μ μ°¨μ μ¬κ·μ μ μ°¨λ‘ μ μ±ν μ΄μ§ νμ μ½λμ΄κ³ , κ°κ°μ λν΄ μ¦λͺ ν΄λ³΄μ.
int search(int a[], int n, int target){ // arrays a, length n, and target int left, right, middle; // left, right, and middle elements of arrays a left=0; right=n-1; while(left <= right) { // repeat until the elements are flip middle = (left + right) /2; if(a[middle]==target) return middle; else if(a[middle]>target) right=middle-1; else left=middle+1; } return -1; // there isn't target in array a }
: Proof by Invariant : invariant* κ° μ¬μ€μ΄λΌλ κ²μ 보μ΄κ³ , κ·Έλ‘λΆν° μ΄ ν¨μκ° νμ μ±κ³΅νλ€λ κ²μ 보μ΄λ λ°©λ²
1) invariant : λ§μ½ μ΄λ€ i μ λν΄μ a[i] == target λΌλ©΄, left<=i<=right κ° νμ μ±λ¦½νλ€.
-> μ°Έ! invariant κ° μ΅μ΄μ μ±λ¦½ && invariant κ° κΊ μ§ μ μλ μ½λκ° μ ν μλ€.
(left, right κ° λ°λλ κ³³μ middle-1 or middle + 1 μΈλ°, μ΄λ invariant λ₯Ό κΉ° μ μλ€.)
2) a[i] == target μΈ i κ° μλ€λ©΄ 루νλ μΈμ κ° λ°λμ λλκ³ -1 μ 리ν΄, i κ° μλ€λ©΄ 루ν μμμ λ°λμ λ¦¬ν΄ λ¨
* invariant : νμ μ±λ¦½νλ μ¬μ€. νλ‘κ·Έλ¨μ΄ λμκ°λ λμ μ λ λ°λμ§ μλ μ±μ§
int search(int a[], int n, int target){ // arrays a, length n, and target int middle, r; if(n==0) return -1; middle = n/2; if(a[middle]==target) return middle; else if(a[middle]>target) search(a, middle-1, target); else { r = search(a+middle+1, n-middle-1, target); if(r==-1) return r; else return r+middle+1; } }
: Proof by Induction with μνμ κ·λ©λ²
P(n) ; λ§μ½ μ΄λ€ i μ λν΄μ a[i] == target μ΄λΌλ©΄ i λ₯Ό 리ν΄νλ€.
1) (Base) n=0 μΌ κ²½μ° μ΄λ€ i μ λν΄μ a[i]==target μ΄ μ±λ¦½ν λ°©λ²μ΄ μκ³ , ν¨μλ νμ -1 μ 리ν΄
2) (Step)
- case 1: a[middle] == target μΈ κ²½μ° middle μ 리ν΄νλ―λ‘ μ£Όμ₯μ΄ μ±λ¦½
- case 2: a[middle] > target μΈ κ²½μ° a[middle], a[middle+1], ..., a[n-1] μ€μμλ target μ κ°μ κ°μ΄ μλ€. λ°λΌμ a[i]==target μΈ κ²½μ°κ° μλ€λ©΄ i λ 0, 1, ... , m-1 μ€ νλμ΄λ€. κ·λ©μ μΌλ‘ search(a, middle-1, x) κ° μ ν(μ±λ¦½)νλ€κ³ νλ€λ©΄ (P(n-1) μ΄ μ°Έμ΄λΌκ³ κ·λ©μ μΌλ‘ κ°μ ) μ 체λ μ±λ¦½νλ€.
- case 3: a[middle] < target : case 2 μ μ μ¬ν¨
μ΄ μ¬κ· μκ³ λ¦¬μ¦μ Complexity λ₯Ό μ΄ν΄λ³΄μ.
T(n) = 1+ T(n/2)
= 1 + 1 + T(n/4) = ... = log n
∴ T(n) = O(log n)
=> λΉ λ₯Έ μλ!!!!!!!
log λ?
k=log2 n <=> 2^k = n
λ°λΌμ log n μ
- 2λ₯Ό λͺ λ² κ³±νλ©΄ n μ΄ λλλ
- n μ 2λ‘ λͺ λ² λλλ©΄ 1μ΄ λλλ
μ λ΅
λ€μ λ§ν΄, n μ΄ κ³μ 1/2 λ‘ μ€μ΄λλλ° log n λ²λ§μ μμ΄μ§λ€λ μκΈ°!
log n μ n λ³΄λ€ μλ±ν μμλ°, n μ΄ 10μ΅μ΄λΌλ©΄ log n μ μ½ 33 μ΄κΈ° λλ¬Έμ΄λ€.
log n μ μλ ₯μ νμ κΈ°μ΅νμ.μλ£κ΅¬μ‘°μ μκ³ λ¦¬μ¦μμ log n μ μ€λͺ νμ§ λͺ»νλ€λ©΄ 곡λΆλ₯Ό μ λλ‘ ν κ²μ΄ λ§λμ§ μμ¬ν΄μΌ νκΈ° λλ¬Έμ΄λ€.'PROGRAMMING > μλ£κ΅¬μ‘°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Selection Sort , Merge Sort, κ·Έλ¦¬κ³ μ¦λͺ (0) 2020.06.18 μνμ κ·λ©λ²μΌλ‘ μ¬κ· μκ³ λ¦¬μ¦ μ¦λͺ (0) 2020.06.18 μνμ κ·λ©λ² (0) 2020.06.18 λ³μμ ν¬μΈν° (0) 2020.06.18