자료구조의 필요성

- 데이터를 효과적으로 저장하고, 처리하는 방법에 대해서 바르게 이해할 필요가 있음

- 자료구조를 제대로 이해하지 못하면 불필요하게 메모리와 성능을 낭비할 여지가 있음

 

기본적인 자료구조들

- 선형 구조

배열, 연결 리스트, 스택, 큐

 

-비선형 구조

트리, 그래프

 

자료구조와 알고리즘

- 효율적인 자료구조 설계를 위해 알고리즘 지식이 필요함

- 효율적인 알고리즘을 작성하기 위해서는 문제 상황에 맞는 적절한 자료구조가 사용되어야 함

- 자료구조론과 알고리즘 이론은 동일선상에 놓을 수 있음

 

프로그램의 성능 측정 방법론

1.

- 시간 복잡도(Time Complexity)란 알고리즘에 사용되는 연산 횟수를 의미

- 공간 복잡도(Space Complexity)란 알고리즘에 사용되는 메모리의 양을 의미

- 효율적인 알고리즘을 사용한다고 가정했을 때 일반적으로 시간과 공간은 반비례 관계

- 시간 복잡도를 표현할 때는 최악의 경우를 나타내는 Big-O 표기법을 사용

 

* O(n)의 시간 복잡도

int main(void)
{
    int a, b;
    cin >> a >> b;
    int sum = 1;
    for (int i = 0; i < b; i++)
    {
        sum *= a;
    }
    cout << sum;
}

 

* O(n2)의 시간 복잡도

#include <iostream>

using namespace std;

int main(void) {
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            cout << "*";
        }
        cout << '\n';
    }
}

 

 

* [예시] n이 1000일 때

 

n : 1,000번 연산

nlogn : 약 10,000번의 연산

n2 : 1,000,000번의 연산

n3 : 1,000,000,000번의 연산

 

보통 연산 횟수가 10억을 넘어가면 1초 이상의 시간이 소요됨

 

2.

- 시간 복잡도를 표기할 때는 항상 큰 항과 계수만 표시

 

O(3n2 + n) = O(n2)

 

- 현실적인 다양한 문제에서는 시간제한이 1초 정도라고 생각하면 됨

- 공간 복잡도를 표기할 때는 일반적으로 MB 단위로 표기

 

int a [1000] : 4kb

int a [1000000] : 4mb

int a [2000][2000] : 16mb

 

 

- 자료구조의 종류로는 스택, 큐, 트리 등이 있음

- 프로그램을 작성할 때는 자료구조를 적절히 활용하여 성능 최적화를 노려야 함

'자료구조 알고리즘' 카테고리의 다른 글

  (0) 2020.12.10
스택을 활용한 계산기 만들기  (0) 2020.12.10
스택  (0) 2020.12.09
양방향 연결 리스트  (0) 2020.12.09
연결 리스트  (0) 2020.12.09
Posted by khon98
,