μκ°λ³΅μ‘λ = μκ³ λ¦¬μ¦μ μμ(resource) μ¬μ©λμ λΆμ
μμμ΄λ μ€νμκ°, λ©λͺ¨λ¦¬, μ μ₯μ₯μΉ, ν΅μ λ±μ λ§νλ κ² μΈλ° κ·Έ μ€μμ μ€νμκ°μ λν΄μ νν
λ©λͺ¨λ¦¬ : κ°κ²©λλΉ λ©λͺ¨λ¦¬ μ©λμ΄ ν¬κ² μ¦κ°νμ¬ μλμ μΈ μ€μμ±μ΄ κ°μλμλ€.
μ€νμκ°μ νλμ¨μ΄, μ΄μ체μ , μΈμ΄, μ»΄νμΌλ¬ λ±μ λ°λΌμ λ¬λΌμ§κ² λλ―λ‘ μ€νμκ°μ μΈ‘μ νλ λμ μ°μ°μ μ€ν νμλ₯Ό μΈ‘μ ν΄μΌ νλ€.
μ°μ°μ μ€ν νμ
- μ λ ₯ λ°μ΄ν°μ ν¬κΈ°(n)μ κ΄ν ν¨μλ‘ νννκ² λλ€.
- λ°μ΄ν°μ ν¬κΈ°κ° κ°λλΌλ μ€μ λ°μ΄ν°μ λ°λΌμ λ¬λΌμ§λ€.
(nκ°μ λ°μ΄ν°μμ κ²μμ ν λ, μ΄μ΄ μ’μΌλ©΄ λ°λ‘ μ°Ύμ μλ μκ³ , μ΄μ΄ λμλ©΄ nκ°μ λ°μ΄ν°λ₯Ό λͺ¨λ κ²μν΄μ μ°ΎμμΌ ν μλ μλ€.)- μ΅μ μ κ²½μ° μκ°λ³΅μ‘λ
- νκ· μκ°λ³΅μ‘λ
(νκ· μκ°λ³΅μ‘λ λΆμμ΄ μ΄λ €μμ λλΆλΆ μ΅μ μ μκ°λ³΅μ‘λλ₯Ό μ¬μ©νλ€.)
μ κ·Όμ λΆμ
λ°μ΄ν°μ κ°―μ nμ΄ λ¬΄νλλ‘ μ¦κ°ν λ μνμκ°μ΄ μ¦κ°νλ growth rateλ‘ μκ°λ³΅μ‘λλ₯Ό νννλ κΈ°λ²μ΄λ€.
μλ₯Όλ€μ΄ λ€μκ³Ό κ°μ΄ νννλ κ²μ΄λ€.
=>
μ κ·Όμ λΆμμ μ
int sum(int data[], int n){
int sum=0;
for (int i=0; i<n; i++)
sum += data[i]; // κ°μ₯ μμ£Ό μ€νλλ λ¬Έμ₯
return sum
}
μ μ½λμμ sum+=data[i]
λ¬Έμ₯μ΄ κ°μ₯ μμ£Ό μ€νλλ©°, νμ nλ² μ€νλλ€.
κ°μ₯ μμ£Ό μ€νλλ λ¬Έμ₯μ μ€ννμκ° nλ²μ΄λΌλ©΄ λͺ¨λ λ¬Έμ₯μ μ€ν νμμ ν©μ nμ μ νμ μΌλ‘ λΉλ‘νκ² λλ€.
λͺ¨λ μ°μ°λ€μ μ€ννμμ ν©λ μμ nμ μ νμ μΌλ‘ λΉλ‘νκ² λλ€.
O(n)μ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ€κ³ ν μ μλ€.
bool is_distinct(int n, int x[]){
for (int i=0; i<n-1; i++)
for (int j=i+1; j<n; j++)
if (x[i]==x[j]) // κ°μ₯ μμ£Ό μ€νλλ λ¬Έμ₯
return false;
return true;
}
λ°°μ΄ xμ μ€λ³΅λ μμκ° μλμ§ κ²μ¬νλ μ½λμ΄λ€.
μ λ¬Έμ₯μμ κ°μ₯ μμ£Ό μ€νλλ λ¬Έμ₯μ if(x[i]==x[j])
λ¬Έμ₯μ΄λ€.
i=0 μΌ κ²½μ° 1 ~ n-1 : n-1λ² μ€ν
i=1 μΌ κ²½μ° 2 ~ n-1 : n-2λ² μ€ν
i=2 μΌ κ²½μ° 3 ~ n-1 : n-3λ² μ€ν
.
.
.
i=n-2 μΌ κ²½μ° n-1 ~ n-1 : 1λ² μ€ν
μ¦ μ΅μ
μ κ²½μ° 1+2+ ... + n-1 = n(n-1)/2λ² μ€νλλ€.
μ΅μ
μ κ²½μ° O(n**2)μ μκ°λ³΅μ‘λλ₯Ό κ°μ§λ€κ³ λ§ν μ μλ€.
for (i=1; i<n; i*=2){
//Do something
}
μ μ½λλ O(logn)μ μκ°λ³΅μ‘λλ₯Ό κ°λλ€.
μ κ·Όμ νκΈ°λ²
μκ³ λ¦¬μ¦μ ν¬ν¨λ μ°μ°λ€μ μ€ν νμλ₯Ό νκΈ°νλ νλμ κΈ°λ²μ΄λ€.
λΉ μ€ νκΈ°λ² (O, big-O)
(nμ΄ n0 μ΄μμΌ λ) g(n)μ μ μ ν μμ cλ₯Ό κ³±νλ©΄ f(n)μ λνμ¬ upper boundκ° λλκ²μ νννλ€. μ¦ μ΅μ μ κ²½μ°λ₯Ό νννλ κ²μ΄λ€.
λΉ -μ€λ©κ° νκΈ°λ² (Big-Omega)
λΉ μ€ νκΈ°λ²κ³Ό λ°λμ μλ―ΈμΈ lower boundκ° λλκ²μ νννλ€. μ¦ μ΅μ μ κ²½μ°λ₯Ό νννλ κ²μ΄λ€.
μΈν νκΈ°λ² (Theta)
(nμ΄ n0 μ΄μμΌ λ) g(n)μ μ μ ν μμ cλ₯Ό κ³±νλ©΄ f(n)μ λνμ¬ upper boundκ° λ μλ μκ³ , lower boundκ° λ μλ μλκ²μ νννλ€. μ¦ μ΅μ κ³Ό μ΅μ
μ μ€κ°μ μΈ νκ· μ μΈ λ³΅μ‘λ μλ€.
λ€μ λ§ν΄ f(n)κ³Ό g(n)μ λμΌμ°¨μμΈ κ²μ΄λ€.
μ΄μ§κ²μμ μκ°λ³΅μ‘λ
def binary_search(l,target):
start=0
end=len(l)-1
while start<=end:
mid = (start+end)//2
if target==l[mid]:
return mid
elif target > l[mid]:
start = mid+1
elif target < l[mid]:
end = mid-1
return False
μ΄μ§κ²μμ νλ €λ©΄ λ°°μ΄(리μ€νΈ)μ λ°μ΄ν°λ€μ΄ μ€λ¦μ°¨μμΌλ‘ μ λ ¬λμ΄ μμ΄μΌ νλ€.
ν λ² λΉκ΅ν λλ§λ€ λ¨μμλ λ°μ΄ν°κ° μ λ°μΌλ‘ μ€μ΄λ λ€. μλ λ°μ΄ν°κ° nκ° μλ€λ©΄ μ΅μ
μ κ²½μ° λͺλ² λ°λ³΅ν΄μΌ 1κ°κ° λλκ°? λ‘ μκ° ν μ μλ€.
μ¦ O(log n)μ μκ°λ³΅μ‘λλ₯Ό κ°λλ€.
μμ°¨κ²μμ μκ°λ³΅μ‘λλ O(n)μ΄κ³ μ΄μ§κ²μμ μκ°λ³΅μ‘λλ O(log n)μΈλ° μ΄ λμ μ°¨μ΄λ λ§€μ° ν° κ²μ΄λ€.
λ°λΌμ μ΄μ§κ²μμ ν μ μλ 쑰건(λ°μ΄ν°κ° μ λ ¬λμ΄ μμ)μμλ μμ°¨κ²μ λ³΄λ¨ μ΄μ§κ²μμ νλκ²μ΄ μκ°λ³΅μ‘λ μΈ‘λ©΄μμ ν¨μ¬ μ 리ν κ²μ΄λ€.
λ²λΈ μ λ ¬μ μκ°λ³΅μ‘λ
void bubbleSort(int data[], int n){
for(int i=n-1; i>0; i--){
for(int j=0; j<i; j++){
if(data[j]>data[j+1]){
int tmp=data[j];
data[j]=data[j+1];
data[j+1]=tmp;
}
}
}
}
if(data[j]>data[j+1])
λ¬Έμ΄ κ°μ₯ μμ£Όμ€νλλ λ¬Έμ₯μ΄λ€.
i=n-1 μΌ κ²½μ° n-1λ² λ°λ³΅
i=n-2 μΌ κ²½μ° n-2λ² λ°λ³΅
.
.
.
i=2 μΌ κ²½μ° 2λ² λ°λ³΅
i-1 μΌ κ²½μ° 1λ² λ°λ³΅
1+2+...+n-1 = n(n-1)/2
μ¦ O(n**2)μ μκ°λ³΅μ‘λλ₯Ό κ°λλ€.
μ½μ μ λ ¬μ μκ°λ³΅μ‘λ
void insertion_sort(int n, int data[]){
for(int i=1;i<n;i++){
int tmp=data[i];
int j=i-1;
while(j>=0 && data[j]>tmp){
data[j+1]=data[j];
j--;
}
data[j+1]=tmp;
}
}
μ΅μ μ κ²½μ°(μ λ ¬λμ΄ μλκ²½μ°) whileλ¬Έμ 1λ²λ§ μ€ννλ―λ‘ O(n)μ μκ°λ³΅μ‘λλ₯Ό κ°λλ€.
μ΅μ
μ κ²½μ°(λ°λλ‘ μ λ ¬λμ΄ μλ κ²½μ°) n(n-1)/2λ² μ€νλ κ²μ΄λ―λ‘ O(n**2)μ μκ°λ³΅μ‘λλ₯Ό κ°λλ€.
'πμ½λ©ν μ€νΈ:CodingTest' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μκ³ λ¦¬μ¦]μ΅λ 곡μ½μ(GCD) μκ³ λ¦¬μ¦ - μ ν΄λ¦¬λ νΈμ λ² (0) | 2023.06.19 |
---|---|
[μκ³ λ¦¬μ¦]λ³ν© μ λ ¬(Merge Sort) (0) | 2023.06.19 |
μΉ΄μ΄ν μ λ ¬(Counting Sort)Permalink (0) | 2023.06.19 |
[μκ³ λ¦¬μ¦]Recursion μμ©(λ―Έλ‘μ°ΎκΈ°) (0) | 2023.06.19 |
[μκ³ λ¦¬μ¦]Recursion κ°λ (0) | 2023.05.03 |