4. 자료구조

2024. 10. 30. 18:45·Cs

1️⃣ 복잡도

- 시간 복잡도: 알고리즘의 실행 시간을 정량화하는 것

- 공간 복잡도: 알고리즘 실행시 필요한 메모리 사용량을 정량화하는 것

- 빅오 표기법: 입력 값에 대한 수식에서 최고차항을 기준으로 알고리즘이 수행되는 최악의 시간 복잡도를 표현

2️⃣선형 자료구조와 비선형 자료구조의 차이

- 선형 자료구조: 연속적으로 데이터가 나열되는 자료구조. 1:1 연결

- 비선형 자료구조: 하나의 데이터 뒤에 n개의 데이터가 이어질 수 있는 자료구조. 1:N, N:N 연결

3️⃣ 선형 자료구조 - 배열

- 정해진 크기만큼 데이터가 일렬로 저장되는 정적 자료구조

- 요소: 배열의 각 데이터 / 인덱스: 데이터를 가리키는 번호

- 시간 복잡도

  (1) 검색: O(n)

  (2) 삽입: O(n) (but 여유공간이 있고, 맨 마지막 삽입시 O(1))

  (3) 삭제: O(n) (마지막 데이터 삭제면 O(1))

4️⃣ 선형 자료구조 - 연결 리스트

- 여러 개의 노드로 구성 -> 배열과 달리 크기가 정해져있지 않은 동적 자료구조

- 노드는 데이터 + 다음 노드 주소 값으로 구성되어 있음

- 헤드 포인터와 테일 포인터로 시작과 끝을 알 수 있음

- 시간 복잡도

  (1) 검색: O(n)

  (2) 삽입: O(n) (but 맨 앞 삽입시 O(1)) -> 데이터를 추가하려는 위치로 이동해야하므로! 데이터 추가하는 연산 자체는 이전 노드가 가리키는 노드의 주소 값만 변경하면 되므로 O(1)  

  (3) 삭제: O(n) (but 맨 앞 삭제시 O(1)) -> 데이터를 추가하려는 위치로 이동해야하므로! 

👍장점: 배열과 달리 삽입시 기존 노드들의 위치 변경X -> 시간 효율적

👎단점: 배열과 달리 인덱스X -> 특정 위치 데이터 접근시 시간 비효율적

+ 이중 연결 리스트(앞 노드의 주소 값+다음 노드 주소 값 모두 저장) -> 양방향 탐색 가능으로 연속 탐색시 시간 효율적 but 구현 어렵고 메모리 많이 차지

+ 원형 연결 리스트(마지막 노드가 null이 아닌 첫 번째 노드의 주소 값을 가리킴)

5️⃣ 선형 자료구조 - 스택

- 데이터를 쌓는 형태. LIFO(후입선출)

- push(스택의 가장 위에 데이터 저장) <-> pop(스택의 가장 밑 데이터 삭제)

- top이라는 변수로 데이터를 마지막으로 저장한 인덱스 기억 -> 연산 포함 항상 O(1)으로 마지막 데이터 접근 가능!

- ex) 실행 취소, 웹 브라우저에서 뒤로가기

6️⃣ 선형 자료구조 - 큐

- 데이터가 순차적으로 들어오는 형태. FIFO(선입선출)

- front(맨앞), rear(맨뒤) 개념을 이용해 삽입, 삭제시 시간 복잡도를 줄임

- 인큐(enqueue): 삽입시 큐의 맨 뒤에 삽입 <-> 디큐(dequeue): 삭제시 큐의 맨 앞에서 삭제

- ex) 프로세스가 CPU를 할당받기 전까지 대기하는 준비 큐. 작업 요청이 들어온 순서대로 처리하는 경우

7️⃣ 비선형 자료구조 - 그래프

- 데이터를 포함하는 정점(=노드)과 정점을 잇는 간선으로 구성된 자료구조

- 차수: 정점에 연결된 간선의 수 / 진입 차수: 해당 정점으로 향하는 간선의 수 / 진출 차수: 해당 정점에서 나가는 간선의 수

- 간선의 방향성 유무에 따라 무방향 그래프와 방향 그래프로 나뉨

- BFS(너비 우선 탐색): 탐색을 시작하는 정점에서 가까운 정점을 먼저 탐색. 인접한 정점들을 큐에 모두 삽입하는 방식으로 진행. 중복 방지하기 위해 방문처리 꼭 해줘야함

- DFS(깊이 우선 탐색): 탐색을 시작하는 정점에서 탐색 가능한 최대 깊이의 정점까지 탐색. 최대깊이 도달하면 방문했던 정점들을 역순으로 재방문->탐색 가능한 정점에서 또 최대깊이까지 탐색. 재귀or스택으로 구현

8️⃣ 비선형 자료구조 - 트리

- 그래프의 한 종류로, 사이클이 없어서 계층적 관계 표현 가능

- 이진 트리: 자식 노드가 최대 2개인 트리

    (1) 완전 이진 트리: 마지막 레벨은 제외 모든 레벨에 노드 있음 + 마지막 레벨은 노드가 왼쪽에서 오른쪽으로 채워져있음

    (2) 포화 이진 트리: 마지막 레벨까지 노드가 모두 채워져 있음

    (3) 이진 탐색 트리: 한 노드의 왼쪽 서브트리는 해당 노드의 값보다 작은 값 + 오른쪽은 큰 값을 가진 노드로 구성

        -> 균형 이진 탐색 트리에서는 루트 노드와 가까운 노드일수록 검색해야 하는 노드 개수가 절반으로 줄어듦! 

9️⃣ 비선형 자료구조 - 우선순위 큐 & 힙

 - 우선순위가 높은 데이터가 먼저 나오는 자료구조

- 구현하는 방식은 배열, 연결 리스트, 완전 이진 트리인 힙 -> 힙이 가장 효율적!

- 힙: 완전 이진 트리. 최댓값 or 최솟값을 빠르게 찾을 수 있음! 

- 최대 힙(부모 노드의 값이 자식 노드의 값보다 크거나 같음) <-> 최소 힙

    (1) 삽입 연산: 힙의 맨 끝에서 데이터 삽입 -> 부모 노드와 우선순위 비교해 위치를 바꾸며 루트 노드까지 비교

    (2) 삭제 연산: 우선순위가 가장 높은 루트 노드 삭제 -> 루트 노드 자리에 마지막 노드를 옮긴 후 재정렬

🔟 비선형 자료구조 - 해시 테이블

- 하나의 키에 대해 하나의 값을 저장하는 형태의 자료구조

- 키는 해시 함수를 이용해 해시를 얻을 수 있음

- 해시: 값이 저장되어 있는 해시 테이블의 인덱스를 찾을 수 있는 값

- 해시 함수에 키를 넣으면 해시 테이블에서 매칭되는 결과 값에 한 번에 접근할 수 있음! -> O(1)

- 해시 충돌: 서로 다른 키에 대해 같은 해시가 도출되는 것

- 해시 충돌 해결 방법

                        (1) 체이닝: 같은 해시가 나오는 키의 값을 연결 리스트에 저장하는 방식. 저장 공간에 대한 제약이 적음 but                                             하나의 해시(인덱스)에 노드가 몰릴 수 있음!

                        (2) 개방 주소법: 해당 해시가 아닌 비어 있는 공간에 값을 저장하는 방식

                               a. 선형 조사법: 다음 인덱스로 이동하며 빈 공간을 찾음. -> 특정 인덱스 범위에 데이터가 몰리는 현상!

                               b. 이차 조사법: 거듭제곱한 인덱스만큼 이동하며 빈 공간을 찾음 -> 선형보다 군집화 현상이 적음

                               c. 이중 해싱: 해시 충돌 발생 시 다른 해시 함수를 한 번 더 적용

저작자표시 (새창열림)

'Cs' 카테고리의 다른 글

JWT access Token, 어디에 저장하는 것이 좋을까?  (0) 2025.03.28
5. 알고리즘  (0) 2024.11.02
3. 데이터베이스  (0) 2024.10.29
2. 컴퓨터 네트워크  (0) 2024.10.26
1. 운영체제 (3)  (0) 2024.10.26
'Cs' 카테고리의 다른 글
  • JWT access Token, 어디에 저장하는 것이 좋을까?
  • 5. 알고리즘
  • 3. 데이터베이스
  • 2. 컴퓨터 네트워크
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (381)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (1)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    항해99
    개발자취업
    Til
    99클럽
    코딩테스트준비
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
4. 자료구조
상단으로

티스토리툴바