- Tree
- Queue
- 백트래킹
- ORM
- Article & User
- delete
- 쟝고
- 트리
- distinct
- SQL
- 큐
- Django
- 뷰
- 스택
- 완전검색
- M:N
- Vue
- stack
- 통계학
- count
- 그리디
- update
- outer join
- N:1
- 이진트리
- create
- regexp
- DB
- drf
- migrations
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
목록데이터 사이언스/알고리즘 (66)
데이터 분석 기술 블로그
힙(Heap) 메모리 개념컴퓨터의 메모리는 "스택(Stack)과 힙(Heap)" 두 영역으로 나뉜다.메모리 구조설명스택(Stack) 메모리함수 호출 시 지역 변수, 매개변수가 저장됨 (작은 용량, LIFO 구조)힙(Heap) 메모리동적 할당된 데이터가 저장됨 (크기가 크지만, 관리 필요) Heap Overflow는 힙 메모리를 과도하게 사용하여 발생스택(Stack)과 다르게 힙은 직접 해제해야 함 (메모리 관리 필요)2025.01.20 - [데이터 사이언스/알고리즘] - Stack OverflowHeap Overflow 발생 원인메모리 과다 할당 (너무 많은 객체 생성)너무 큰 리스트(배열)를 할당하면 메모리가 초과됨메모리 누수(Memory Leak)객체가 해제되지 않고 계속 남아있으면 메모리 부족 발생..
스택(Stack) 메모리 개념컴퓨터의 메모리는 "스택(Stack)과 힙(Heap)" 두 영역으로 나뉜다. 메모리 구조 설명 스택(Stack) 메모리함수 호출 시 지역 변수, 매개변수가 저장됨 (작은 용량, LIFO 구조)힙(Heap) 메모리동적 할당된 데이터가 저장됨 (크기가 크지만, 관리 필요) 스택 메모리는 한정적이며, 너무 많이 사용하면 Stack Overflow 발생2025.01.20 - [데이터 사이언스/알고리즘] - Heap OverflowStack Overflow 발생 원인무한 재귀(Recursive Function)재귀 호출이 계속 발생하면서 스택이 꽉 참너무 깊은 재귀 호출너무 깊이 호출하면 스택 메모리가 초과됨비효율적인 재귀 알고리즘 (예: 피보나치)중복된 계산이 많아 스택을 과도하게..

퀵 정렬"피벗(Pivot)을 기준으로 작은 값과 큰 값을 나누면서 정렬하는 빠른 정렬 알고리즘"분할 정복(Divide & Conquer) 방식 사용평균 시간복잡도 O(n log n) → 빠른 정렬 방법 중 하나실제로 가장 많이 사용되는 정렬 알고리즘 중 하나퀵 정렬 동작 원리피벗(Pivot) 선택리스트에서 특정한 요소를 피벗으로 선택 (보통 첫 번째, 마지막, 중간 값 중 하나) 분할(Partitioning)피벗을 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 이동재귀 호출(Recursion)왼쪽과 오른쪽 리스트를 다시 퀵 정렬 수행크기가 1 이하가 되면 정렬 종료 # Pseudo CodeFUNCTION QuickSort(arr) IF length(arr) pivot THEN ..

삽입 정렬"각 요소를 적절한 위치에 삽입하며 정렬하는 방식"현재 요소를 앞쪽 정렬된 부분과 비교하여 올바른 위치에 삽입거의 정렬된 데이터에서 빠르게 동작(O(n))하지만, 일반적으로 비효율적(O(n²))삽입 정렬 동작 원리첫 번째 요소는 이미 정렬된 상태로 간주두 번째 요소를 앞쪽 정렬된 부분과 비교하여 적절한 위치에 삽입세 번째 요소도 앞쪽 정렬된 부분과 비교하여 삽입이 과정을 마지막 요소까지 반복# Pseudo CodeFUNCTION InsertionSort(arr) FOR i FROM 1 TO length(arr) - 1 key = arr[i] j = i - 1 WHILE j >= 0 AND arr[j] > key DO arr[j + 1..

선택 정렬"가장 작은(또는 큰) 값을 선택해서 정렬하는 단순한 정렬 알고리즘"리스트에서 가장 작은 값을 찾아 맨 앞 요소와 교환하는 방식단순하지만 비효율적(O(n²)), 실무에서는 거의 사용되지 않음선택 정렬 동작 원리리스트에서 가장 작은 값을 찾아 첫 번째 요소와 교환두 번째 요소부터 끝까지 탐색하여, 가장 작은 값을 찾아 두 번째 요소와 교환이 과정을 반복하여 리스트가 완전히 정렬될 때까지 수행# Pseudo CodeFUNCTION SelectionSort(arr) FOR i FROM 0 TO length(arr) - 1 min_index = i FOR j FROM i + 1 TO length(arr) - 1 IF arr[j] 선택 정렬의 시간복잡도경..

버블 정렬"옆에 있는 요소와 비교하며 swap(교환)하여 정렬하는 가장 기초적인 정렬 알고리즘" 큰 값이 거품(Bubble)처럼 밀려 올라가는 방식가장 단순한 정렬 방법이지만, 성능이 좋지 않아 실무에서는 거의 사용되지 않음버블 정렬 동작 원리리스트의 처음부터 시작하여 인접한 두 개의 값을 비교만약 앞의 값이 크다면, 두 값을 교환 (swap)리스트의 끝까지 반복하면 가장 큰 값이 맨 뒤로 이동위 과정을 반복하여 정렬이 완료될 때까지 진행# Pseudo CodeFUNCTION BubbleSort(arr) FOR i FROM 0 TO length(arr) - 1 swapped = FALSE FOR j FROM 0 TO length(arr) - i - 1 I..
알고리즘의 효율성을 평가하는 핵심 개념 → "시간"과 "메모리(공간)" 시간복잡도(Time Complexity) → 알고리즘이 실행되는 데 걸리는 시간공간복잡도(Space Complexity) → 알고리즘이 사용하는 메모리 공간 크기즉, 빠르고 효율적인 알고리즘을 찾으려면 "시간"과 "공간"을 모두 고려해야 한다.1. 시간복잡도(Time Complexity)입력 크기(n)에 따라 실행 시간이 어떻게 변하는지 나타내는 함수Big-O 표기법(O(n)) 을 사용하여 최악의 경우(Worst Case)를 표현 시간복잡도 종류 표기법의미예제O(1)상수 시간리스트 첫 번째 요소 접근 (arr[0])O(log n)로그 시간이진 탐색 (Binary Search)O(n)선형 시간리스트 전체 탐색 (for 반복문)O(n l..

1. 최단 경로최단 경로 정의간선의 가중치가 있는 그래프에서 두 정점 사이의 경로들 중에 간선의 가중치의 합이 최소인 경로하나의 시작 정점에서 끝 정점까지의 최단 경로다익스트라(dijkstra) 알고리즘 : 음의 가중치를 허용하지 않습니다.벨만-포드(Bellman-Ford) 알고리즘 : 음의 가중치 허용모든 정점들에 대한 최단 경로플로이드-워샬(Floyd-Warshall) 알고리즘2. Dijkstra 알고리즘시작 정점에서 거리가 최소인 정점을 선택해 나가면서 최단 경로를 구하는 방식입니다.시작정점(s)에서 끝정점(t)까지의 최단 경로에 정점 x가 존재합니다.이때, 최단경로는 s에서 x까지의 최단 경로와 x에서 t까지의 최단경로로 구성됩니다.탐욕 기법을 사용한 알고리즘으로 MST의 프림 알고리즘과 유사합니다.