자료구조 기초
자료구조 기초
Data Structure
자료구조란?
자료를 효율적으로 저장하고 관리하기 위한 방법과 구조를 의미.- 자료구조의 필요성
- 데이터를 효율적으로 저장하고 검색하여 성능을 향상시킬 수 있음.
- 메모리 사용을 최적화하고, 프로그램의 실행 속도를 개선할 수 있음.
- 복잡한 문제를 단순화하고, 코드의 가독성과 유지보수성을 높일 수 있음.
- 효율성
- 비용(Cost)
어떤 문제를 해결하는 soultion이 요구하는 시간 & 공간 - 효율적인 자료구조와 알고리즘을 선택해야만 주어진 cost 내에서 문제를 풀 수 있음
- 비용(Cost)
- 자료구조 선택 방법
- 문제 분석을 통해 필요한 기초 연산 정의
- 각 연산의 자원 제약을 정량화
- 요구사항을 제일 만족하는 자료구조 선택
- 각 구조마다 장점과 비용이 존재
- 모든 상황에서 다른 구조보다 우월한 자료구조는 거의 없음
- 자료구조가 요구하는 자원
- 시간 & 공간
- 프로그래밍 복잡도 - 선택 전 고려할 사항
- 데이터는 처음에 모두 삽입되는가? 아니면 중간 삽입도 있는가?
- 삭제 가능한가?
- 순차 처리인가, 무작위 접근이 필요한가?
Abstract Data Types
- 추상 자료형(Abstract Data Type, ADT)
- 데이터와 데이터에 수행할 수 있는 연산을 정의한 수학적 모델.
- 연산은 입력과 출력으로 정의
- Encapsulation:
구현 세부 사항은 숨기고, 인터페이스만 제공.
- 데이터와 데이터에 수행할 수 있는 연산을 정의한 수학적 모델.
- 자료구조는 ADT의 물리적 구현
- 구현과 사용을 분리해 복잡성 추상화
- 논리적 형태
- 데이터를 ADT를 이용해 정의 (e.g. 정수형, 실수형)
- 물리적 형태
- 정의된 자료 구조 안에서 구현된 데이터 (e.g. 4바이트 정수)
Problem, Algorithm, Program
- 문제
- 해결해야 할 과제나 질문. 입력과 출력이 명확히 정의되어야함.
- 예 : 검색 문서 찾기(입력: 쿼리, 출력: 문서)
- 잘못된 문제 정의 :
- 입력 - 언어 데이터
- 출력 - 감성 분석 결과
- 문제 - 딥러닝 알고리즘 구현하기
❌ -> 구현 방법을 문제 단계에 선언
언어 데이터를 긍정, 부정으로 구분하는 분류기 구현 ✅
- 해결해야 할 과제나 질문. 입력과 출력이 명확히 정의되어야함.
- 알고리즘
문제를 해결하기 위한 단계적 절차나 방법.- 특징 :
- 정확성
- 명확한 단계
- 유한성(명확한 종료 조건 명시)
- 예 : 이진 탐색 알고리즘
- 특징 :
- 프로그램
알고리즘을 특정 프로그래밍 언어로 구현한 것.- 예 : Python으로 구현된 이진 탐색 코드
해당 포스트는 서울대학교 컴퓨터공학부 강유 교수님의 자료구조 25-1학기 강의를 정리한 내용입니다.
This post is licensed under CC BY 4.0 by the author.