목록동적 배열 (4)
대학생 쩡딱구리
그동안 동적 배열과 동적 배열을 기반으로 한 자료구조를 다루었다. 하지만 동적 배열엔 아래와 같은 단점이 있다. 동적 배열의 길이가 저장하는 요소의 수보다 길다. 즉 메모리 낭비가 있다. 분할 분석 방식이 실시간 시스템에서 허용되지 않을 때가 있다. 배열의 삽입 또는 삭제 연산 비용이 O(n)으로 비싸다. 삽입, 삭제 연산이 중요할 경우 문제가 될 수 있다. 동적 배열의 이러한 단점을 해소해 삽입/연산을 빠르게 할 수 있는 선형 자료구조가 연결 리스트이다. 1. 연결 리스트란? 연결 리스트는 분산 관리 방식 자료구조이다. 이 말은 각 요소 별로 노드를 할당해 관리한다는 의미이다. 연결 리스트는 노드가(node)가 링크(link)로 연결된 순차 자료 구조로, 요소의 접근이 느리지만(O(n)) 삽입/삭제 연..
1. 스택이란? 스택(Stack)이란 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 자료 구조이다. 스택은 LIFO(Last In First Out) 형태의 자료구조로, 가장 최근에 저장된 값 다음에 자료가 저장되고(push), 가장 최근에 저장된 값이 먼저 나간다(pop). 스택은 데이터를 순서대로 쌓아두었다가 가장 최근 데이터부터 봐야 할 때 쓰이는데 예를 들어 편집기의 되돌리기 기능(undo)이 스택의 예이다. 스택의 기본 연산은 아래와 같다. Operation Comment S.push(e) Top에 새로운 요소 추가 S.pop() - Top 요소를 반환하면서 제거 - 단, 스택이 비어 있으면 error 생성 S.top() - Top 요소 반환 - 스택이 비어 있으면 error 생성 S.is_e..
2-2. 동적 배열 2-1. 배열 1. 배열이란? 2020년 수능 시험에 548,734명이 지원했다고 한다. 이런 상황에서 54만명의 성적을 처리하려면 데이터를 어떻게 관리하는 것이 좋을까? 학생 개개인마다 변수를 선언해 자료� jjeongttakgoori.tistory.com 동적 배열에서 이어진다. 1. 분할 분석 분할 분석(Amortization Analysis)이란 연산이 연속적으로 일어날 때 각 시점별로 연산을 따로 분석하지 않고 전체 연산을 함께 분석해 비용을 계산하는 방식이다. 위 그래프를 보도록 하자. 특정 시점의 연산량은 많지만 대부분의 시점에서 연산량이나 시간이 적다는 것을 알 수 있다. 이때 분할 분석을 사용하는 것이 효과적이다. 분할 분석은 단순히 분석방식이기보다 알고리즘의 설계 방..
2-1. 배열 1. 배열이란? 2020년 수능 시험에 548,734명이 지원했다고 한다. 이런 상황에서 54만명의 성적을 처리하려면 데이터를 어떻게 관리하는 것이 좋을까? 학생 개개인마다 변수를 선언해 자료를 관리하 jjeongttakgoori.tistory.com 동적 배열을 알기 위해서는 배열을 알아야 한다! 1. 리스트 아래 코드를 살펴보자. 이 코드를 실행했을 때 데이터를 계속 추가할 경우 베열의 길이가 고정되어 있다면 오류가 날 텐데 리스트는 오류가 나지 않는다. 그 이유는 바로 데이터가 추가될수록 크기가 일정 단계마다 커지기 때문이다! import sys# provides getsizeof function data = [] for k in range(n):# NOTE: must fix choi..