전체 글243

[알고리즘] Approximation Algorithm 이란 / NP 문제 알고리즘
Approximation Algorithm 이란 세상에는 무수한 문제들이 있고, 그 만큼 어려운 문제도 무수히 많다. (ex. NP문제) 알고리즘적으로 보통 어려운 문제는 polynomial 시간 안에 풀 수 없는 문제들을 말한다. 이들을 프로그래밍 적으로 사용하기에는 과부하가 너무 크다. 따라서, 완벽한 답을 구하는 것에는 살짝 내려놓고, 조금은 틀릴 수 있는 가능성이 있더라 하더라도 근접한 답을 구해낼 수 있는 빠른 알고리즘(polynomial 시간안에 해결이 가능한)을 택하는 것이다. 예를들자면, 우리가 인터넷으로 성능대비 가격이 좋은 컴퓨터를 사려고한다. 가장 좋은 방법은 온라인 상에 있는 모든 웹 사이트에 판매중인 컴퓨터 제품들을 하나하나 다 비교하고, 최고 가성비의 제품을 사는 것이다. 하지만..
[Python] 파이썬 Heapq 모듈 사용하기 / 힙(Heap) 구조
Heap 이란Heap 이란 자료구조 형태 중 하나로서 우선순위 큐를 위해 만들어진 구조이다. (자세한 Heap에 대해 : https://gmlwjd9405.github.io/2018/05/10/data-structure-heap.html 참고) 코딩 테스트 문제 중 최솟값 , 혹은 최댓값을 계속해서 호출해야 하는 상황인 경우 Heap 구조를 이용하여 구현하면 시간측면에서 굉장히 효율적인 구현이 가능하다. import heapqheapq 모듈을 이용하여 힙 자료구조를 사용할 수 있다. heapq 는 내장 모듈이므로 따로 설치가 필요하지 않는다. 기본적으로 Min-priority-queue 구조를 가지고 있다.import heapq 기존 배열을 Heap 구조로 - heapify() testheap = [1,..
[컴퓨터구조] Locality 란 / Locality 종류
Locality 란Locality를 한국어로 직역하면 '지역성' 이라는 뜻이다. 프로그램적으로 생각해보자. 우리의 프로그램은 항상 메모리의 특정 주소를 찾아가서 데이터를 읽어오고 특정 주소로 찾아가서 데이터를 쓰는 행위들이 기본이다. 여기서 '특정주소' 가 어떻게 될지, 실행해보기 전의 우리는 아직 잘 모른다. 하지만! 이 Loaclity 라는 특성을 이용하면 이를 예상하고 접근 시간을 줄일 수 있다는 것이다! (또한, 이 접근 시간은 프로세서의 성능에 직접적인 연관이 있다.) Temporal Locality 와 Spartial LocalityTemporal Loaclity : 최근에 접근했던 주소값을 다시 접근하는 경향 - 한번 사용한 주소의 메모리 영역은 자주 접하게 된다. - 예시) Loop문 안의..
[MIPS] Pipeline Hazard 종류 / Structure / Data / Control
Hazard 란pipeline 형식에서 어떠한 문제가 발생해서 다음 사이클의 다음 명령을 실행할 수 없는 경우를 뜻한다. Structure Hazard 물리적인 원인에 의하여 발생하는 hazard 로, 메모리를 1개만 쓴다던지 포트가 하나라던지 하는 이유로 발생한다. 1개의 메모리로 읽고 쓰는 게 동시에 진행되려할 때 발생한다. 해결방법 : 1. 메모리 수를 늘린다. (물리적으로 하드웨어를 추가해준다.) 2. 해당 기능 사용 가능한 시점까지 지연시킨다. Data Hazard Instruction 의 식 실행을 위해 필요한 데이터가 아직 만들어지지 않은 경우!해결방법 : 1. 계산되자마자 MEM 과 WB를 거지 않고 바로 결과값을 넘겨준다. (Forwarding or Bypassing)2. 소프트웨어적으로..
[DB] 데이터베이스 Evaluation / PipeLining 과 Materialization
쿼리 실행의 단계 1. Parsing and Translation 2. Optimization 3. Evaluation Evaluation - 엔진이 1,2 단계를 거친 쿼리를 보고 어떻게 실행할건지 실행 계획을 세우고 행하는 것. 대표적으로 Pipelining 방식과 Materialization 방식이 있다. Pipelining 한 연산의 실행이 끝나서 결과 값을 내기 전에, 다른 연산도 실행하는 방법 ( 동시에 계산 이라 생각해도 됨) - Materialization 보다 저렴하다. (따로 릴레이션을 메모리에 저장할 필요가 없음) - 정렬이나 해쉬 조인에는 적용 불가. - demand driven 과 producer driven 으로 나뉜다. demand driven(lazy driven) : 현재 ..

