본문 바로가기

이론3

LRU Cache Algorithm(Least Recently Used) LRU 알고리즘이란? 해석 그대로 가장 오래된 데이터를 없애고 새로운 데이터를 넣는 알고리즘이다. 캐시에서 사용되는 알고리즘 캐시는 많은 데이터를 담지 못하므로 이러한 페이지 교체 알고리즘이 필요하다. 이중연결리스트를 사용하여 node를 관리한다. 설명 ListNode로 사용할 클래스를 만든다. 접근 성능 개선을 위해 Map을 사용하여 key의 존재 유무를 빠르게 찾을 수 있다. head는 새로 들어올 node를 nodeList에 연결해 주기 위한 역할(next만 사용) tail은 삭제될 node를 가리키기 위한 역할 (prev만 사용) put 메서드 새로운 노드 생성 키 존재 여부확인 존재하는 경우, Listnode에서 해당 키를 가진 노드를 삭제 후 inserToHead 호출 존재하지 않은 경우, 또.. 2019. 11. 3.
깊이 우선 탐색(depth-first search, DFS) 깊이 우선 탐색이란? 트리에서는 왼쪽 노드부터 확인하여 탐색하지 않은 경우에 왼쪽노드에 넘어가고를 반복하여 마지막 깊이까지 들어간 뒤 마지막 노드의 인접 노드들을 전부 탐색한 뒤 백트래킹을 하며 탐색하지 않은 노드들을 탐색한다. 단지 현 경로상의 노드들만을 기억하면 되므로 저장공간의 수요가 비교적 적다. 목표노드가 깊은 단계에 있을 경우 해를 빨리 구할 수 있다. 해가 없는 경로에 깊이 빠질 가능성이 있다. 따라서 실제의 경우 미리 지정한 임의의 깊이까지만 탐색. 얻어진 해가 최단 경로가 된다는 보장이 없다. 탐색 지점에서 일직선으로 탐색을 해나가는 느낌 설명 방문을 체크하는 배열 존재 시작 노드를 설정한 뒤 DFS메서드를 불러오고 시작노드의 방문체크를 true로 바꾼다. DFS메서드에서는 설정한 시작노.. 2019. 10. 10.
너비 우선 탐색(Breadth-first search, BFS) 너비 우선 탐색이란? 시작 정점에서 인접한 모든 정점들을 우선 탐색하는 방법 OPEN List(검색 가능성이 있는 노드의 집합)는 큐(Queue)를 사용해야지만 레벨 순서대로 접근 가능 출발노드에서 목표노드까지의 최단 길이 경로를 보장한다. 경로가 매우 길 경우, 탐색 가지가 급격히 증가하여 보다 많은 기억 공간이 필요하다. 탐색 지점에서 둥그렇게 탐색을 해나가는 느낌 설명 방문을 체크하는 배열존재 시작노드를 큐에 넣고 탐색시작 이중 반복문을 사용! - 큐 안에 있는 값을 pop하고 pop해서 나온 값의 인접한 노드에 대해서 가져오고 방문한 적 없는 노드에 경우 방문체크해주고 큐안에 노드를 넣어준다. 예시 코드(Java) import java.io.*; import java.util.*; /* 인접 리스.. 2019. 10. 6.