- DB
- create
- migrations
- 통계학
- delete
- Tree
- 큐
- 완전검색
- distinct
- 쟝고
- 백트래킹
- Article & User
- count
- 그리디
- update
- N:1
- Django
- outer join
- drf
- stack
- 이진트리
- Queue
- regexp
- SQL
- ORM
- Vue
- 트리
- M:N
- 뷰
- 스택
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
목록전체 글 (373)
데이터 분석 기술 블로그
스택(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..

해시 테이블 (비선형)키를 해시 함수에 의해 해시 값으로 변환하여 저장하는 자료 구조삽입 / 삭제 / 탐색이 O(1)서로 다른 키가 같은 인덱스로 해싱되는 경우 충돌 해결이 필요하다.Chaining: 같은 인덱스에 연결 리스트로 여러 개의 값을 저장개방 주소법: 충돌 시 다른 빈 공간을 찾아 저장중복 없는 데이터 저장 (set 구현 가능), API 요청 결과를 저장하여 반복적인 요청을 줄이는 캐싱과 메모이제이션에 활용 가능