[4์ฃผ์ฐจ ๊ฐ๋ ]
โ๏ธ ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ - ์ ํ ๊ฒ์, ์ด์ง ๊ฒ์
์ ํ ๊ฒ์ : ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ํ๋์ฉ ์ฆ๊ฐ์ํค๋ฉด์ ๋ฐฉ๋ฌธํ์ฌ ๊ทธ ๊ฐ์ด ์ํ๋์ง๋ฅผ ๊ฒ์ฌ์ด์ง ๊ฒ์ : ๋ง์ฝ ๋ฐฐ์ด์ด ์ ๋ ฌ๋์ด ์๋ค๋ฉด, ๋ฐฐ์ด ์ค๊ฐ ์ธ๋ฑ์ค๋ถํฐ ์์ํ์ฌ ์ฐพ๊ณ ์ ํ๋ ๊ฐ๊ณผ ๋น๊ตํ๋ฉฐ ๊ทธ๋ณด๋ค ์์ ๊ฐ์ด ์ ์ฅ๋์ด ์๋ ์ธ๋ฑ์ค ๋๋ ํฐ ๊ฐ์ด ์ ์ฅ๋์ด ์๋ ์ธ๋ฑ์ค๋ก ์ด๋์ ๋ฐ๋ณต
โ๏ธ ์๊ณ ๋ฆฌ์ฆ ํ๊ธฐ๋ฒ - Big O, Big Ω
Big O : ์๊ณ ๋ฆฌ์ฆ ์คํ ์๊ฐ์ ์ํ
Big Ω : ์๊ณ ๋ฆฌ์ฆ ์คํ ์๊ฐ์ ํํ
-> ์คํ์๊ฐ์ ์ํ์ด ๋ฎ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ข๋ค
โ๏ธ ์ ํ ๊ฒ์ - ์ ํ ๊ฒ์, ๊ตฌ์กฐ์ฒด
์ ํ ๊ฒ์ : ์ํ๋ ์์๊ฐ ๋ฐ๊ฒฌ๋ ๋๊น์ง ์ฒ์๋ถํฐ ๋ง์ง๋ง ์๋ฃ๊น์ง ์ฐจ๋ก๋๋ก ๊ฒ์ -> ์ ํํ์ง๋ง ์์ฃผ ํจ์จ์ ์ด์ง ๋ชปํ ๋ฐฉ๋ฒ -> ์๋ฃ๊ฐ ์ ๋ ฌ๋์ด ์์ง ์๊ฑฐ๋ ๊ทธ ์ด๋ค ์ ๋ณด๋ ์์ด ํ๋์ฉ ์ฐพ์์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉ
๊ตฌ์กฐ์ฒด : ์๋ฃ๊ฐ ์ ๋ ฌ๋์ด ์์ง ์๊ฑฐ๋ ๊ทธ ์ด๋ค ์ ๋ณด๋ ์์ด ํ๋์ฉ ์ฐพ์์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉ -> ์๋ก์ด ์๋ฃํ์ผ๋ก ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํด์ ์ด๋ฆ๊ณผ ๋ฒํธ๋ฅผ ๋ฌถ์ด์ค
โ๏ธ ๋ฒ๋ธ ์ ๋ ฌ
๋ฒ๋ธ ์ ๋ ฌ : ๋ ๊ฐ์ ์ธ์ ํ ์๋ฃ ๊ฐ์ ๋น๊ตํ๋ฉด์ ์์น๋ฅผ ๊ตํํ๋ ๋ฐฉ์์ผ๋ก ์ ๋ ฌ
(๋จ์ : ๋จ ํ๋์ ์์๋ฅผ ์ ๋ ฌํ๊ธฐ ์ํด ๋๋ฌด ๋ง์ด ๊ตํํ๋ ๋ญ๋น๊ฐ ๋ฐ์)
๋ฒ๋ธ ์ ๋ ฌ ์คํ ์๊ฐ์ ์ํ์ O(n^2)
๋ฒ๋ธ ์ ๋ ฌ์ ์คํ ์๊ฐ์ ํํ๋ Ω(n^2)
โ๏ธ ์ ํ ์ ๋ ฌ
์ ํ ์ ๋ ฌ : ๋ฐฐ์ด ์์ ์๋ฃ ์ค ๊ฐ์ฅ ์์ ์(ํน์ ๊ฐ์ฅ ํฐ ์)๋ฅผ ์ฐพ์ ์ฒซ ๋ฒ์งธ ์์น(ํน์ ๊ฐ์ฅ ๋ง์ง๋ง ์์น)์ ์์ ๊ตํํด์ฃผ๋ ๋ฐฉ์์ ์ ๋ ฌ
(์ฅ์ : ๊ตํ ํ์๋ฅผ ์ต์ํ, ๋จ์ : ๊ฐ ์๋ฃ๋ฅผ ๋น๊ตํ๋ ํ์๋ ์ฆ๊ฐ)
์์ ์๊ฐ์ ์ํ๊ณผ ํํ์ ๋ฒ๋ธ ์ ๋ ฌ๊ณผ ๋์ผ
โ๏ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์คํ์๊ฐ - Big O, Big Ω
์คํ์๊ฐ์ ์ํ(Big O)
O(n^2): ์ ํ ์ ๋ ฌ, ๋ฒ๋ธ ์ ๋ ฌ
O(n log n)
O(n): ์ ํ ๊ฒ์
O(log n): ์ด์ง ๊ฒ์
O(1)
์คํ์๊ฐ์ ํํ(Big Ω)
Ω(n^2): ์ ํ ์ ๋ ฌ
Ω(n log n)
Ω(n): ๋ฒ๋ธ ์ ๋ ฌ
Ω(log n)
Ω(1): ์ ํ ๊ฒ์, ์ด์ง ๊ฒ์
โ๏ธ ์ฌ๊ท
์ฌ๊ท : ํจ์๊ฐ ๋ณธ์ธ ์ค์ค๋ก๋ฅผ ํธ์ถํด์ ์ฌ์ฉํ ์ ์์, ํจ์๋ฅผ ํจ์ ๋ด์์ ์ฌ์ฌ์ฉ -> ์ฝ๋ ๊ธธ์ด๊ฐ ์งง์์ ธ ํจ์จ์ ์ธ ์ฝ๋ฉ ๊ฐ๋ฅ
โ๏ธ ๋ณํฉ ์ ๋ ฌ
๋ณํฉ ์ ๋ ฌ : ์์๊ฐ ํ ๊ฐ๊ฐ ๋ ๋๊น์ง ๊ณ์ํด์ ๋ฐ์ผ๋ก ๋๋๋ค๊ฐ ๋ค์ ํฉ์ณ๋๊ฐ๋ฉฐ ์ ๋ ฌ์ ํ๋ ๋ฐฉ์
๋ณํฉ ์ ๋ ฌ ์คํ ์๊ฐ์ ์ํ์ O(n log n)
์คํ ์๊ฐ์ ํํ๋ Ω(n log n)
[4์ฃผ์ฐจ ํ๋ณ๋ฏธ์ ]
#include <stdio.h>
#include <cs50.h>
int* SelectionSort(int a[], int size){ // ์ ํ ์ ๋ ฌ ํจ์
int min;
int temp; // ์๋ก ๊ตํํ๋ ๊ณผ์ ์์ ํ์ํ ์์ ๋ณ์
for(int i=0; i<size-1; i++){ // ์ฒซ๋ฒ์งธ ์์๋ถํฐ ์์ํ์ฌ ์ ํ ์ ๋ ฌ์ (n-1)๋ฒ ๋ฐ๋ณตํ์ฌ ์ํ
min = i; // ๊ธฐ์ค ์์น ์์์ ์ธ๋ฑ์ค i๋ฅผ ๋ณ์ min์ ์ค์
for(int j=i; j<size; j++){ // i๋ฒ ์์๋ก๋ถํฐ ๋ง์ง๋ง ์์๊น์ง ๋น๊ตํ๋ฉด์ ๊ฐ์ฅ ์์ ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ณ์ min์ ์ ์ฅ
if(a[j] < a[min]) // ๋ง์ฝ min๋ณด๋ค ์์ j๋ฒ์งธ ์์๊ฐ ์กด์ฌํ๋ค๋ฉด
min = j; // j๋ฅผ ๋ณ์ min์ ์ค์
}
temp = a[i]; // ๊ฐ์ฅ ์์ ๊ฐ a[min]๊ณผ ๊ธฐ์ค ์์ a[i]๋ฅผ ์๋ก ๊ตํํ๋ ๊ณผ์
a[i] = a[min]; // "
a[min] = temp; // "
}
return a; // ๋ฐฐ์ด ๋ฆฌํด
}
int main(){
printf("์
๋ ฅ๊ฐ : ");
int size = 5; // ๋ฐฐ์ด์ ํฌ๊ธฐ ๋ณ์ ์ถ๋ ฅ
int list1[5] = {1,1,1,3,2};
for(int i=0; i<size; i++){ // list1 ์ถ๋ ฅ
printf("%d", list1[i]);
}
SelectionSort(list1, size);
int* num1 = SelectionSort(list1, size); // SelectionSort ํจ์์์ ์ ๋ ฌ๋ ๋ฐฐ์ด์ num1์ ๋ฐํ
printf(", ");
int list2[5] = {2,1,1,3,1};
for(int i=0; i<size; i++){ // list2 ์ถ๋ ฅ
printf("%d", list2[i]);
}
SelectionSort(list2, size);
int* num2 = SelectionSort(list2, size); // SelectionSort ํจ์์์ ์ ๋ ฌ๋ ๋ฐฐ์ด์ num2์ ๋ฐํ
printf("\n");
if (num1[0] == num2[0] && num1[1] == num2[1] && num1[2] == num2[2] && num1[3] == num2[3] && num1[4] == num2[4]){ // ์ ๋ ฌ๋ list1๊ณผ list2๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์
printf("์ถ๋ ฅ๊ฐ : True"); // true๋ฅผ ์ถ๋ ฅ
} else { // ๋ง์ฝ ํ๋์ ์กฐ๊ฑด์ด๋ผ๋ ๋ค๋ฅด๋ค๋ฉด
printf("์ถ๋ ฅ๊ฐ : False"); // false ์ถ๋ ฅ
}
}
'๊ฐ๋ฐ > CS50 ์ฝ์นญ์คํฐ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS50 ์ฝ์นญ์คํฐ๋] 6์ฃผ์ฐจ_์๋ฃ๊ตฌ์กฐ (0) | 2021.03.02 |
---|---|
[CS50 ์ฝ์นญ์คํฐ๋] 5์ฃผ์ฐจ_๋ฉ๋ชจ๋ฆฌ (0) | 2021.03.01 |
[CS50 ์ฝ์นญ์คํฐ๋] 3์ฃผ์ฐจ_๋ฐฐ์ด (0) | 2021.02.27 |
[CS50 ์ฝ์นญ์คํฐ๋] 2์ฃผ์ฐจ_C์ธ์ด (0) | 2021.02.25 |
[CS50 ์ฝ์นญ์คํฐ๋] 1์ฃผ์ฐจ_์ปดํจํ ์ฌ๊ณ (0) | 2021.02.25 |