Top-K — heap 이 항상 답은 아니다
K번째 큰 값 문제에서 heap 은 반사적인 선택이지만, 전체 배열이 이미 메모리에 있다면 Quick Select 가 평균 더 빠르다. heap 크기 K 유지와 Quick Select 의 메커니즘, 그리고 데이터 형태에 따른 선택 기준.
K번째 큰 값 문제에서 heap 은 반사적인 선택이지만, 전체 배열이 이미 메모리에 있다면 Quick Select 가 평균 더 빠르다. heap 크기 K 유지와 Quick Select 의 메커니즘, 그리고 데이터 형태에 따른 선택 기준.
Union-Find 는 그룹마다 root 대표를 두고 같은 그룹인지 판정한다. 최적화 없는 구현은 사슬 트리에서 find 가 O(N) 까지 늘어지지만, path compression 과 union by rank 를 더하면 사실상 상수가 된다.
위상정렬의 Kahn BFS 는 진입차수 0 인 노드를 반복해서 꺼내 처리하는 알고리즘이고, 사이클 검출은 별도 로직 없이 따라온다. Kahn BFS 의 메커니즘, Course Schedule 유형, DFS post-order 와의 선택 기준.
부분 배열 합 문제는 슬라이딩 윈도우와 누적합 두 도구로 O(N) 환원된다. 입력에 음수가 섞이거나 합이 정확히 K 인 등식 조건이 붙으면 단조성이 깨지고, 도구는 누적합 + 해시 영역으로 넘어간다.
답을 직접 찾지 못하는 문제도 결정 함수와 단조성이 보이면 답 자체를 이분탐색할 수 있다. parametric search 의 사고 패턴 — 결정 함수 정의, 단조성 방향, lo/hi 정당화.
Rust + Python + React 로 개발하고 있는 개인 자동매매 플랫폼의 중간 회고. ETF 리밸런싱과 개별 종목 시그널 매매까지 기능은 갖췄지만, 운영 진입 전에 안전 잠금장치(중지/차단/감지/시뮬레이션)부터 만들게 된 경위 기록.
Java 는 강타입 + JVM 바이트코드 + JIT 의 적응형 최적화. Python 은 동적 타입 + 인터프리터 + 선언적 type hint. Go 는 정적 + structural typing + 단일 컴파일러. 타입 시스템 결정이 런타임 매커니즘을 결정한다.
CPython 의 GIL 은 멀티스레드 CPU bound 를 차단하고 우회법을 강제한다. Java 는 OS 스레드 1:1 의 비용을 Java 21 virtual thread 로 우회해 thread-per-request 를 살렸다. Go 는 처음부터 M:N 스케줄러로 goroutine 을 경량화했다. 세 모델이 같은 백엔드 워크로드에서 다른 결정으로 이어진다.
세 언어 모두 GC 를 쓰지만 우선순위가 다르다. Java 는 generational + region(G1/ZGC), Python 은 reference counting + cyclic detector, Go 는 concurrent tri-color mark-sweep. 각 GC 가 무엇을 포기했는지가 운영 특성을 가른다.
함수에 객체를 넘기는 동작을 ‘참조 전달’ 이라 부르지만 메모리에서는 모두 값 복사다. Java reference value 복사, Python call by sharing, Go 구조체 헤더와 escape analysis. 무엇이 복사되느냐가 다를 뿐 메커니즘은 같다.