๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Welcome.
:: C_ ๐Ÿšฉ/์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ž๋ฃŒ๊ตฌ์กฐ] by c์–ธ์–ด #02 ์‹œ๊ฐ„๋ณต์žก๋„, ๊ณต๊ฐ„๋ณต์žก๋„, Big-O ํ‘œ๊ธฐ๋ฒ•

by EunBird 2021. 2. 16.

๊ณต๊ฐ„ ๋ณต์žก๋„(Space Complexity) : ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ด๋Ÿ‰ 

 

์‹œ๊ฐ„ ๋ณต์žก๋„(Time Complexity) : ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์ˆ˜ํ–‰๋˜๋Š” ์—ฐ์‚ฐ ํšŸ์ˆ˜ ์ด๋Ÿ‰

 

 

์˜ˆ์‹œ๋“ค์„ ํ†ตํ•ด ๊ณต๊ฐ„๋ณต์žก๋„์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ๋‹ค.


ใ…กใ…กใ…กใ…กใ…ก

int get_sum(int arr[], int n) {

   int sum = 0;

   int i = 0;

   for (i = 0; i < n; ++i) {

        sum += arr[i];

   }

   return sum;

}

ใ…กใ…กใ…กใ…กใ…ก

๊ณต๊ฐ„๋ณต์žก๋„ = n + 3 

 

3์€ sum, i, n ์ด ์„ธ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.


ใ…กใ…กใ…กใ…กใ…ก

int get_sum(int** arr, int a, int b) {

   int sum = 0;

   int i = 0, j = 0;

   for (i = 0; i < a; ++i) {

        for(j = 0; j < b; ++j){

            sum += arr[i][j];

        }

   }

   return sum;

}

ใ…กใ…กใ…กใ…กใ…ก

๊ณต๊ฐ„๋ณต์žก๋„ = a * b + 5

 

5: sum, a, b, i, j


์˜ˆ์‹œ๋“ค์„ ํ†ตํ•ด ์‹œ๊ฐ„๋ณต์žก๋„์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ๋‹ค.

ใ…กใ…กใ…กใ…กใ…ก

int get_sum(int arr[], int n) {

   int sum = 0;

   int i = 0;

   for (i = 0; i < n; ++i) {

        sum += arr[i];

   }

   return sum;

}

ใ…กใ…กใ…กใ…กใ…ก

์‹œ๊ฐ„๋ณต์žก๋„: n

 

์œ„ for๋ฌธ์„ nํšŒ ๋ฐ˜๋ณตํ•œ๋‹ค.


ใ…กใ…กใ…กใ…กใ…ก

int get_sum(int arr[], int n) {

   int sum = 0;

   int i = 0;

   for (i = 0; i < n; i+=2) {

        sum += arr[i];

   }

   return sum;

}

ใ…กใ…กใ…กใ…กใ…ก

์‹œ๊ฐ„๋ณต์žก๋„ = n/2


ใ…กใ…กใ…กใ…กใ…ก

int get_sum(int** arr, int a, int b) {

   int sum = 0;

   int i = 0, j = 0;

   for (i = 0; i < a; ++i) {

        for(j = 0; j < b; ++j){

            sum += arr[i][j];

        }

   }

   return sum;

}

ใ…กใ…กใ…กใ…กใ…ก

๊ณต๊ฐ„๋ณต์žก๋„ = a * b


ใ…กใ…กใ…กใ…กใ…ก

int get_sum(int n) {

   int sum = 0;

   int i;

   for (i = 0; i < n; ++i) {

        sum += i;

   }

   return sum;

}

ใ…กใ…กใ…กใ…กใ…ก

์‹œ๊ฐ„๋ณต์žก๋„ = n


ใ…กใ…กใ…กใ…กใ…ก

int get_sum(int** arr, int n) {

   int sum = 0;

   int i = 0, j = 0;

   for (i = 0; i < n; ++i) {

        for(j = 0; j < n; ++j){

            sum += arr[i][j];

        }

   }

   return sum;

}

ใ…กใ…กใ…กใ…กใ…ก

์‹œ๊ฐ„๋ณต์žก๋„ = n**2    (n์˜ 2์Šน)


ใ…กใ…กใ…กใ…กใ…ก

int get_sum(int n) {

   int sum = 0;

   int i;

   for (i = 1; i <= n; i*=2) {

        sum += i;

   }

   return sum;

}

ใ…กใ…กใ…กใ…กใ…ก

์‹œ๊ฐ„๋ณต์žก๋„ = log2(n)

๋ฐ‘์ด 2์ธ ๋กœ๊ทธ์— n

--> ๋Œ€๋žต log2(n) ๊ผด ์ด๋‹ค.

 

**๊ทธ๋ž˜ํ”„๊ฐ€ ๊ฐ€ํŒŒ๋ฅผ์ˆ˜๋ก (๊ธฐ์šธ๊ธฐ๊ฐ€ ํด์ˆ˜๋ก) ์‹ค์šฉ์„ฑ์ด ๊ฐ์†Œํ•œ๋‹ค.**

 

 


ใ…กใ…กใ…กใ…กใ…ก

int get_sum(int n) {

   int sum = 0;

   int i, j;

   for (i = 1; i <= n; ++i) {

        for(j = 1; j <= i; ++j){

            sum += j;

        }

   }

   return sum;

}

ใ…กใ…กใ…กใ…กใ…ก

์‹œ๊ฐ„๋ณต์žก๋„ = n ( n + 1 ) / 2

ใ…กใ…กใ…กใ…กใ…ก

n=5 ์ธ ๊ฒฝ์šฐ.


ใ…กใ…กใ…กใ…กใ…ก

int get_sum(int n) {

   int sum = 0;

   int i, j;

   for (i = 1; i <= n; ++i) {      // nํšŒ ๋ฐ˜๋ณต.

        for(j = 1; j <= i; i*=2){       // log2(n).       --> n*log2(n)

            sum += j;     

        }

   }

   return sum;

}

ใ…กใ…กใ…กใ…กใ…ก

์‹œ๊ฐ„๋ณต์žก๋„ = n log2(n)

 


๋น…-์˜ค ํ‘œ๊ธฐ๋ฒ•(Big-O Notation)

์‹œ๊ฐ„๋ณต์žก๋„์™€ ๊ณต๊ฐ„๋ณต์žก๋„์˜ ์ตœ๊ณ ์ฐจํ•ญ๋งŒ์„ ํ‘œ๊ธฐํ•˜์—ฌ

๊ฐ„๋žตํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ๊ธฐ๋ฒ•

๋ณดํ†ต ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ํ‘œ์ค€ ์‹œ๊ฐ„ ๋Œ€์‹  ์ตœ์•…์˜ ์‹œ๊ฐ„์„ ์‚ฐ์ถœํ•˜์—ฌ ํ‘œ๊ธฐํ•จ

 

์˜ˆ)

 

  T(n) = 3n + 1     -> O(n)

  T(n) = n**2 + 3n + 1     ->  O(n2)

  T(n) = 26n**3+ n + 255   ->  O(n3)

 

 

 

ํ‘œ๊ธฐ

์ด๋ฆ„

1

2

4

8

16

32

O(1)

์ƒ์ˆ˜ํ˜•(Constant)

1

1

1

1

1

1

O(n)

์„ ํ˜•(Linear)

1

2

4

8

16

32

O(log n)

๋กœ๊ทธํ˜•(Logarithmic)

0

1

2

3

4

5

O(n log n)

์„ ํ˜• ๋กœ๊ทธํ˜•(Log Linear)

0

2

8

24

64

160

O(n2)

ํ‰๋ฐฉํ˜•(Quadratic)

1

4

16

64

256

1024

O(n3)

์ž…๋ฐฉํ˜•(Cubic)

1

8

64

512

4,096โ€ฌ

32,768

O(2n)

์ง€์ˆ˜ํ˜•(Exponential)

2

4

16

256

65,536โ€ฌ

4,294,967,296โ€ฌ

O(n!)

๊ณ„์Šนํ˜•(Factorial)

1

2

24

40,320โ€ฌ

20,922,789,888,000โ€ฌ

2.6313083693369353016721801216e+35โ€ฌ


O(1)์˜ ์˜ˆ (๋ฐ˜๋ณต์ด ๋˜์ง€ ์•Š๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜)

void test1() {

  printf("Hello!");

}

void test2(int arr[]) {

  printf("%d", arr[2]);

}

void test3(int n) {

  if (n % 2)

      printf("ํ™€์ˆ˜");

  else

      printf("์ง์ˆ˜");

}


O(n)์˜ ์˜ˆ (์„ ํ˜• ๊ตฌ์กฐ์˜ ์ˆœ์ฐจ ํƒ์ƒ‰)

void test(int arr[], int n) {

   int i;

   for (i = 0; i < n; ++i)

      printf("%d", arr[i]);

}


O(log n)์˜ ์˜ˆ (์ด์ง„ ํƒ์ƒ‰)

int index(int arr[], int n, int target) {

   int i = n / 2;  // i๋Š” 2๋กœ ๋‚˜๋ˆˆ ๋ชซ.

   while (i >= -1 && i < n)

           if (target == arr[i])

              return i;

           if (target > arr[i]) {

              i = (n - i) / 2 + i;

              continue;

           }

           if (target < arr[i])

                i = i / 2; 

   

   return -1;

}


O(n log n)์˜ ์˜ˆ (Quick Sort, Heap Sort)

 

O(n2)์˜ ์˜ˆ (์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ์˜ ์ฒ˜๋ฆฌ)

O(n3)์˜ ์˜ˆ (์‚ผ์ค‘ ๋ฐ˜๋ณต๋ฌธ์˜ ์ฒ˜๋ฆฌ)

728x90

๋Œ“๊ธ€