Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- stl
- 프로그래머스
- UELOG
- moreeffectiveC++
- BFS
- 스마트포인터
- 언리얼엔진구조체
- 자료구조
- 선택정렬
- map
- 정렬
- 람다
- 언리얼가비지컬렉터
- C++최적화
- 델리게이트
- unorder_map
- C++
- 크리티컬섹션
- 애셋로드
- UE4 커스텀로그
- enumasByue
- 약참조
- 알고리즘
- 정렬알고리즘
- 데이터애셋
- UE_LOG
- 강참조
- 람다사용정렬
- UML관련
- dataasset
Archives
- Today
- Total
기억을 위한 기록들
[알고리즘] Least Recently Used(LRU) 알고리즘 / [1차] 캐시 본문
Least Recently Used 알고리즘이란?
- 가장 오랫동안 참조되지 않은 페이지를 교체하는 기법
- 컴퓨터의 자원은 한정적이며, 한도내에서 최고의 효율을 얻기 위해 여러 알고리즘이 존재, 그 중에 하나.
(FIFO,OPT,LRU,LFU,MFU 등등..)
방법
첫번째 : 페이지에 저장 된 데이터가 언제 사용되었는지를 알 수 있게하는 부분을 구현해서 제일 오랫동안 참조되지 않는 데이터를 제거 하는 방법.
두번째 : 페이지에 데이터를 큐 형식으로 저장하는 방식.
페이지내에 데이터가 존재한다면 데이터를 페이지 내에서 제거하고 맨 위로 다시 올리고,
존재하지 않는다면, 바로 입력하여 맨 아래에 있는 데이터를 삭제하는 과정을 진행.
예제 그림
위 그림에서 7번, 9번같은 상황은 참조하는 값이 이미 페이지에 존재하며 Cache Hit 라고 하며,
나머지 상황들이 존재하지 않을때 새로 교체 됨으로 Cache Miss 라고한다.
응용
https://programmers.co.kr/learn/courses/30/lessons/17680
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cctype>
using namespace std;
int solution( int cacheSize, vector<string> cities ) {
if( cacheSize == 0 ) {
return cities.size() * 5;
}
int answer = 0;
int tempcacheSize = 0;
vector<string> cach;
for( auto city : cities )
{
transform( city.begin(), city.end(), city.begin(), ::tolower );
auto it = find( cach.begin(), cach.end(), city ); //해당 도시가 있는지 확인 find 함수
if( it == cach.end() )
{ //없을 때
answer += 5; //cach miss
if( tempcacheSize >= cacheSize ) //사이즈 초과 시
cach.erase( cach.begin() ); //맨앞의 도시 목록 삭제
else
tempcacheSize++;
}
else
{ //이미 있을 때
answer += 1; //cach hit
if( tempcacheSize >= cacheSize ) //사이즈 초과 시
cach.erase( it ); //도시 목록 삭제
else
tempcacheSize++;
}
cach.push_back( city );
}
return answer;
}
이미지 참고 블로그 :
'자 & 알 > 알고리즘' 카테고리의 다른 글
[알고리즘] 그래프 탐색 2가지 - 깊이 우선 탐색(Depth First Search) & 너비우선탐색(Breadth First Search)/ C++ 구현 (0) | 2021.01.06 |
---|---|
[알고리즘] 탐색/검색에 관하여 (0) | 2021.01.01 |
[알고리즘] 정렬알고리즘 비교해보기 (0) | 2020.12.04 |
[알고리즘] 이진검색(Binary Search) + 순위(Rank)확인 시스템(?) (0) | 2020.09.09 |
[알고리즘] 길찾기 알고리즘 #1- 길찾기가 가능한지?/BFS / C++ (0) | 2020.08.05 |