자료구조와 알고리즘

고유·2022년 3월 9일
1

목록 보기
11/11

1. 자료구조

데이터를 어떻게 저장할 것인가에 대한 문제

1) 정의

  • 가장 효율적인 방식으로 필요한 데이터에 빠르게 접근하고 필요한 수정, 삽입, 삭제를 할 수 있도록 도와주는 ‘구조’를 말한다.

2) 이유

  • 기능에 적합한 자료구조를 쓰는 것이 왜 중요할까?
  • 어떤 자료구조를 쓰냐에 따라 사용자가 원하는 기능을 수행하는데 0.1초가 걸릴 수도, 1초가 걸릴 수도 있기 때문이다.

3) 포인트

  • 데이터를 ‘잘’ 저장해놓는 방법에 대한 공부이다.
  • 자료 구조 안에 있는 데이터들의 순서가 보장이 되는가
  • 중복된 데이터가 들어갈 수 있는가
  • 수정이나 검색할 때 얼마나 효율적인가

2. 알고리즘

1) 정의

  • 제한된 공간과 시간 안에서 데이터를 어떻게 처리할 것인지 정해 놓은 ‘로직’이다.
  • 주어진 인풋으로 계산을 수행하고 아웃풋을 내는 것을 말한다.
  • 이렇게 알고리즘은 주어진 데이터를 검색하거나 정렬, 총점을 구하는 등 다양한 계산을 할 수 있는 것을 말한다.
  • 같은 아웃풋을 배출한다 해도 20단계를 거치는 것보다 5단계를 거치는 것이 빠를 것이다.

2) Big O

  • 알고리즘 속도를 그래프로 나타낸 것이 Big O이다.
  • 동일한 알고리즘의 로직으로 인풋의 사이즈가 점점 커질수록 시간복잡도가 얼마나 더 걸리는 지를 표기하는 그래프다.

3) 포인트

  • 인풋을 넣고 함수를 돌려 아웃풋을 배출하는데 아웃풋을 보다 빨리 받기 위한 함수 로직에 대한 공부이다.
  • 인풋의 사이즈가 커질수록 Big O가 어떻게 변화하는가
  • 공간과 시간 복잡도는 어떠한가
  • 어떤 자료구조를 이용해서 이 알고리즘을 쓰는게 좋은가

4) Best 알고리즘

  • 제일 좋은 알고리즘은 제공된 데이터를 최소한의 공간과 최소한의 시간으로 효율적으로 처리할 수 있는 것이다.

3. 자료구조와 알고리즘에 대한 내 생각

  • 결국 자료구조는 데이터를 빨리 가져오기 위한 효율적인 저장방법, 알고리즘은 아웃풋을 빨리 배출하기 위해 함수를 어떻게 구성할 지를 말하는 것 같은데?
  • 이 것만 따로 죽어라 파는 것이 아니라 내가 프로젝트를 하다가 내 앱이 느린 것 같다, 효율적이지 않은 것 같다라는 생각이 들 때 자료구조 알고리즘을 공부하여 해결하는 것이 맞는 것 같다.

4. 정리

1) 시간복잡도

시간복잡도를 개선하기 위해 자료구조와 알고리즘이 필요하다.

  • 자료구조와 알고리즘을 이야기할 때 시간복잡도를 항상 먼저 명심하자.

① 시간복잡도란?

  • 자료구조의 작동이나 알고리즘이 얼마나 빠르고 느린지 측정하는 방법

② 시간복잡도 측정 기준

  • 시간복잡도는 실제 ‘시간’을 측정하는 것이 아니라 얼마나 많은 ‘단계’가 있는가가 기준이다.
  • 같은 아웃풋을 배출해도 알고리즘의 단계가 적은 것이 시간복잡도가 더 좋은 것이다.
profile
프론트엔드

0개의 댓글