알고리즘 - 데이터 구조에 따른 효율성에 관하여

Jocy·2022년 4월 17일
0
post-thumbnail

1. 알고리즘

알고리즘은 여러개의 지시사항이라고 할 수 있습니다.

데이터구조를 어떻게 구성하는지에 따라 서비스가 빠르거나 느려질 수 있다.
데이터 구조를 이용하는 4가지 상황은 아래와 같다.

  1. 검색 Search
  2. 읽기 Read
  3. 삽입 Add
  4. 삭제 Delete

읽기 Read

배열을 만들 때 컴퓨터에게 이게 얼마나 긴 지를 설명해야 메모리에 그 공간을 미리 예약/할당하게 된다.
JS, Python 언어들은 그것을 대신 처리해준다. 그래서 나도 모르게 내 프로그램이 느려질 수 있다.
그러나 C는 메모리를 직접 핸들링해서 사용 해야한다.

많은 자료를 읽어야 한다면 배열이 좋다

보통 선형 검색 Linear Search을 한다.
0부터 끝까지 차례대로 검색하는 것을 말한다.
배열 안에서의 검색은 그닥 빠르지 않다.

삽입 Insert, Add

삽입의 시나리오 3가지
1. 최고의 케이스 :5개의 공간이 있는 배열에 4가지 데이터가 들어있고
데이터을 추가로 1가지를 추가한다면 컴퓨터는 배열이 어디서 시작하고 얼마나 긴지를 알고 있으므로
걍 배열의 끝으로 이동해서 토마토를 추가한다

  1. 좋지도 나쁘지도 않은 케이스 : 아까 말한 5개의 공간에 중간에 데이터를 삽입한다면 3번째 공간에 데이터가 들어갈 수 있도록 기존의 데이터들은 뒤로 데이터를 옮겨주고 중간에 삽입해서 넣어준다
    속도가 좋지도 나쁘지도 않다.

  2. 최악의 케이스:
    1) 제일 앞 공간에 데이터를 넣을 경우
    앞 공간에 데이터를 넣으려면 다른 데이터들 뒤로 다 보내주고 앞자리에 넣어야되기 때문에 연산처리가 배열이 길 수록 길어진다
    2) 공간이 꽉 찼을 때 값을 추가하는 경우
    기존의 배열을 복사해서 새로운 배열을 만들어서 삽입하고 저장을 해야해서 더 느려짐

Delete

삭제의 시나리오 3가지
1. 최고의 케이스 : 제일 끝을 삭제할 경우는 공간이 크기를 알기 때문에 바로 삭제가능
2. 중간 케이스 : 가운데를 삭제하면 뒤에 있는 데이터들을 앞으로 옮겨야 하는 일이 발생
3. 최악의 케이스 : 제일 앞을 삭제하려면 삭제하고 뒤에 있는 데이터를 다 앞으로 이동 시켜줘야됨

2. 데이터구조

Time Complexity 시간복잡도
작업을 처리하는 초 단위의 속도를 측정하는 것이 아니라 얼마나 많은 단계(Step)가 있는가로 측정
그래서 컴퓨터 성능을 좌우하는 2가지(휘발성, 비휘발성) 메모리 상태에 따라서 초 단위의 속도는 달라진다.

메모리의 종류
1. 휘발성 메모리(volatile memory) (ex:RAM)
RAM은 Random Access Memory - 랜덤으로 접속 할 수 있는 메모리라서
예를 들면 메모리 주소 1번에 있다가 메모리 주소 7번으로 건너뛸 수 있다
2. 비휘발성 메모리(non-volatile memory) (ex:SSD, HDD)

위의 기본적인 사항들을 고려하여 데이터구조를 설계한다면 더 효율적인 서비스를 만들 수 있다.

profile
Software Engineer

0개의 댓글