[알고리즘] 시리즈는 따로 포스팅 하겠지만 자료구조와 알고리즘은 다른 과목임에도 불구하고 매우 많은 연관성을 지니고 있기에 [자료구조] 시리즈에서 관련이 있는 알고리즘도 같이 설명하겠습니다!
자료구조와 알고리즘
프로그램이란 데이터를 표현하고, 그렇게 표현된 데이터를 처리하는 것이다.
데이터 표현(저장) : 자료구조 / 데이터 처리 : 알고리즘
프로그램이 실행되기 위해서는 메모리에 올릴 데이터가 필요하며 이 데이터들을 담아내는 방식이 자료구조이다.
쉽게 말해 '데이터의 저장'을 담당하는 것은 자료구조이고, 그 데이터를 이용해 문제를 해결하는 방법은 알고리즘이다.
우리는 데이터(자료)를 저장한 경험이 있다. 예를 들면
"정수를 저장하기 위해 int형 변수를 선언한다."
"다양한 정보를 저장하기 위해 배열을 선언한다."
int형 변수도, 배열도 자료구조의 일종이다. 데이터를 표현 및 저장하는 하나의 방법이기 때문이다.
이처럼 우리는 항상 자료구조를 사용해왔다. 자료구조는 결국 이 데이터란 것들을 잘 정리하기 위해 존재하고 데이터를 어떻게 정리하느냐에 따라서 우리의 서비스가 빨라질 수도, 느려질 수도 있는 것이다. 자료구조는 '정렬'에 최적화 되어 있거나 '검색'에 최적화 되어 있는 등 여러개 존재하고 어떤 작업에 어느 자료구조를 어떻게 쓰는지 아는 것이 중요하다.
필자가 생각하는 자료구조와 알고리즘을 공부하는 이유는 상황에 따라 알맞는 자료구조와 알고리즘을 사용해서 좋은 프로그램을 만들기 위한 것이라고 생각한다.
※ 좋은 프로그램? : 효율적(속도가 빠르고, 메모리 사용량이 적은)이며, 범용성이 높은 프로그램
자료구조의 분류
데이터를 저장하는 도구인 파일도 자료구조이고 정수나 실수를 저장하는 단순구조(위에서 말한 int형 변수 등)도 자료구조에 포함이 된다. 하지만 여기서 자료구조를 공부하면서 올리는 글은 선형구조와 비선형구조이다!
📌 선형 자료구조
선형 자료구조는 이름 뜻 그대로 자료를 표현 및 저장하는 방식이 선형(linear)이다. 즉, 데이터를 선의 형태로 나란히 혹은 일렬로 저장하는 방식이다.
📌 비선형 자료구조
반면 비선형 자료구조는 그 이름이 의미하듯이, 데이터를 나란히 저장하지 않는 구조이다.
자료구조와 알고리즘의 차이
📌 자료구조
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
1부터 10까지 정수를 표현하고 싶다. 그럼 배열을 선언해서 데이터를 담는 방법이 하나 있을 것이다.
이게 바로 자료구조이다. (위에서 말했듯이 배열도 자료구조의 일종이다.)
📌 알고리즘
for(idx = 0; idx < 10; idx++)
sum += arr[idx];
위에서 1부터 10까지의 정수를 저장을 했다! 이 데이터들을 저장한 이유는? 어떠한 목적이 있을 것이다.
예를 들어 목적이 합(+)이라고 해보자! 그럼 알고리즘에서는 arr이라는 배열에 저장된 데이터들을 더해야 한다.
어떻게 더하느냐? 그 더하는 문제의 해결이 알고리즘이다. 위의 예시에선 for문을 이용해서 합을 구하는 방법처럼
자료구조를 근거로 해서 만들어진 알고리즘이 바로 합(SUM)을 위한 알고리즘이다.
알고리즘은 자료구조에 의존적이다. 자료구조가 결정되어야 그에 따른 알고리즘을 정의하고 개발할 수 있다는 것이다. (쉽게 말해 자료구조를 활용하여 어떤 문제를 해결하는 것이 알고리즘이다.)
References
📚 윤성우의 열혈 자료구조 : C언어를 이용한 자료구조 학습서
📄 https://blog.yena.io/studynote/2018/11/14/Algorithm-Basic.html
'ETC > Study' 카테고리의 다른 글
[자료구조] 연결 리스트(Linked List) (0) | 2022.05.23 |
---|---|
[자료구조] 자료구조 종류 (0) | 2022.05.19 |
[자료구조] 추상 자료형(스택 & 큐) (0) | 2022.05.19 |
[자료구조] 추상 자료형(Abstract Data Type) (0) | 2022.05.17 |
[Suck Study] 스터디 시작! (0) | 2022.05.02 |
댓글