자료구조 알고리즘 1,2 챕터

이승우·2025년 9월 23일

1챕터 - 스택

  1. 스택
    마지막에 들어간 자료가 가장 먼저 나오는 LIFO 원칙을 따르는 선형자료구조. 주로 깊이우선탐색(DFS) 알고리즘에서 사용되며, 이는 AI 분야에서 그래프나 트리 형태의 상태 공간을 탐색할때 중요

1-2. 선형자료구조
배열, 연결 리스트, 스택처럼 데이터 요소들을 일렬로 나열하여 순차적으로 저장하는 방식을 의미합니다. 각 요소가 이전 및 다음 요소와 1:1 관계를 이루고 있음. AI 모델에 입력되는 시계열 데이터나 텍스트 같은 순차적 정보를 표현하고, 메모리에 효율적으로 데이터를 적재하는 가장 기본적인 방법

  1. 배열과 연결 리스트의 차이점
    배열은 물리적으로 연속된 메모리에 데이터를 저장해 인덱스를 통한 빠른 접근이 가능하지만, 중간에 데이터를 삽입하거나 삭제하려면 나머지 데이터를 이동해야 해서 비효율 적이다. 반면, 연결 리스트는 포인터로 노드를 연결하여 데이터의 삽입과 삭제가 유연하지만, 데이터를 찾으려면 처음부터 차례대로 탐색해야 되어서 접근 속도가 느리다.
    따라서 데이터 크기가 고정적이고 조회가 빈번한 AI 모델의 가중치 행렬이나 이미지 픽셀 데이터를 다룰 땐 배열이 유리하고, 데이터의 추가와 삭제가 실시간으로 필요한 경우나 가변적인 크기의 데이터를 관리할 때는 연결 리스트가 더 효율적이다.

  2. 스택 오버플로우와 언더플로우
    오버플로우는 스택에 데이터가 꽉 찬 상태에서 또다시 데이터를 푸쉬할때 발생, 언더플로우는 스택이 텅 빈 상태에서 데이터를 팝하려고 할때 발생

  3. 힙 트리
    최댓값, 최솟값을 빠르게 찾기 위한 비선형자료구조, 우선순위 큐를 만들기 위한 자료구조, 완전 이진 트리의 일종. 모든 노드에 저장된 값이 자식 노드의 값보다 크거나 작아야 하는 구조

  4. 스택을 배열로 구현할 때와 연결리스트로 구현할 때의 차이
    배열로 스택을 구현하면 데이터가 연속된 메모리에 저장되어 접근 속도가 빠르고 메모리 효율이 좋지만, 크기가 고정되어 있어 스택 오버플로우가 발생할 수 있다. 반면 연결 리스트로 구현하면 필요에 따라 크기가 동적으로 조절되어 유연하지만, 각 노드마다 포인터를 위한 추가 메모리가 필요하고 데이터가 메모리상에 흩어져 있어 접근 속도가 상대적으로 느리다. 따라서 스택의 최대 크기를 예측할 수 있다면 배열이, 예측이 어렵다면 연결 리스트가 유리하다.

  • 추상 자료형: 어떤 자료를 다루고 어떤 연산이 필요한지 정의해 보는것

  • 가변성이 있을때는 연결리스트가 더 좋다.
    연결리스트는 데이터마다 다음 주소도 같이 있어서 메모리를 더 많이 사용하기 때문에 메모리 효율이 더 안좋다. 쉽게 삽입 삭제가 가능하다

  • 스택의 시간 복잡도는 항상 O(1)이다 데이터 개수 상관없이
    (하지만 스택을 배열로 구현할 때 칸이 꽉 차면 새로운 배열을 만들고

스택은 순환, 되돌리기, 함수 호출에 유용
큐는 버퍼관리랑 작업 스케줄링에 유용

  • 순환: 함수가 자기자신을 호출해서 문제를 해결하는 기법

리스트를 스택으로 구현할때 뒤쪽에서

운영체제에서 스택은 함수의 수행을 바치고 복귀할 주소 및 데이터를 임시로 저장하는 공간
컴파일러는 재귀함수에서 호출되면 push, 끝나면 pop에 스택이 사용됨

2챕터 - 큐

  1. 큐? 선입선출. 임시 기억장치로도 사용 = 버퍼관리,
    순차처리 작업 스케줄링
    연결리스트 기반 삽입 삭제
    큐 종류는 선형 큐, 원형 큐, 이중 큐(=덱 deque), 우선순위 큐
    원형큐는 선형 큐가

0개의 댓글