실생활에서의 알고리즘 설계: 완전 탐색의 한계와 휴리스틱 접근법

이번에는 이전에 multiplex PCR의 primer 디자인을 하던 중 공부했던 휴리스틱 접근법에 대해 정리해보겠습니다. 우리는 문제를 해결할 때 종종 동적 계획법(DP)이나 분할 정복과 같은 완전 탐색 기반의 알고리즘을 사용합니다. 하지만 이러한 방법들은 실생활에서 적용하기엔 한계가 있습니다. 특히, 입력 크기가 크거나 최적의 분할 전략을 찾기 어려운 경우, 기존의 완전 탐색 방법은 비효율적일 수밖에 없습니다. 이럴 때 접근할 […]

파이썬으로 이해하는 퍼사드 패턴

파이썬 퍼사드 패턴

“파이썬으로 이해하는 퍼사드 패턴” : 처음 디자인 패턴이 나왔을 때는 23개의 디자인 패턴이 나왔는데요. 저는 그중에 우선 “파사드 패턴”을 공부해보았습니다. 언어는 자바가 아닌 파이썬으로 정리했습니다.

HTTP 버전 : http1, http1.1, http2, http3

http 버전

HTTP/1은 1996년에 도입된 HTTP 프로토콜의 첫 번째 버전입니다. 모든 요청에 별도의 TCP 연결이 필요 했습니다. HTTP/1.1은 네트워크 리소스의 비효율적인 사용 및 대기 시간과 같은 문제를 해결하는 것을 목표로…

동시성 병렬성 : 멀티 태스킹의 비밀

동시성 병렬성

모든 사람들이 멀티 태스킹이라고 하면 직관적으로 병렬 작업을 생각할 것 같습니다. 하지만 멀티 태스킹을 공부하다 보면 동시성 병렬성 개념이 등장 합니다.

프로세스 vs 스레드 : IPC, 주소 공간, 멀티 프로세스, 멀티 스레드

멀티 프로세스 vs 멀티 스레드

프로젝트를 진행 하다가 처리 시간이 긴 프로세스를 만난 적이 있었습니다. 그때 바로 생각난 개념이 “멀티 프로세싱” 이였습니다. 그런데 공부를 하다 보니 “스레드”라는 개념이 튀어나옵니다. “프로세스 vs 스레드” 끝인가? 아닙니다… 동시성, 병렬성, 뮤텍스…

멀티 태스킹 : 스케줄러, Dispatch, Context Switching, PCB

멀티 태스킹

“Context Switching”에서 Context는 프로세스의 상태를 의미합니다. 기본적으로 Context Switching은 프로세스 상태를 바꾸는 것을 말하며,다시 말하면 프로세스를 일시 중지하고 다시 시작할 수 있도록 프로세스/스레드 상태를…

프로세스 생명주기 : 대기열, 스케줄링, 가상 메모리 스와핑

프로세스 생애주기

어찌보면 당연한거지만 프로세스에도 생애주기가 있었습니다. 사람도 세포도, 여러 대사 작용들도 모두 cycle이 있습니다. SDLC 개념도 처음 들으면서 재밌다 생각했는데, “프로세스 생명주기”도 있다는 걸 깨닫지 못한 게 오히려 신기한 건가 싶기도 합니다.

CPU : ALU, CU, 레지스터, 캐시 메모리, 버스, 클럭, 코어, TDP

cpu 성능, cpu 구성 요소, alu, cu, 버스, 캐시 메모리

작업 관리자를 들어가면 성능 탭에 CPU 성능에 대한 모니터링 데이터를 볼 수 있는데요.여기에 속도, 코어, 논리 프로세서, 캐시 같은 내용이 있습니다. 오늘은 CPU 란 어떻게 구성이 되어있고, 어떤 과정을 통해서 연산을 하는지…

재귀 함수 : 볼수록 빠져는 게 꼭 재귀같네

파이썬으로 이해하는 재귀 함수

여러 알고리즘을 공부하게 되면서 “재귀 함수”가 프로그래밍의 기초 개념을 위해 초반에만 살짝 지나가는 개념이 아니라는 것을 깨닫게 되었습니다. “재귀 함수”는 문제를 해결하기 위해 문제를 더 작은 형태로 나누어 직접 또는 간접적으로 정의 내에서 자신을 호출하는 함수입니다.