본문 바로가기

전체 글130

힙 (heap) 개요, 자바로 구현 1. 개요 힙은 두가지 의미가 있다. 1. 완전 이진 트리인 힙, 2. 자바 메모리 영역 여기서 말하는 힙은 자료구조 힙이다. 힙의 특징으로는 트리 형태의 자료구조 힙의 종류에 따라 상 하의 관계만 중요하지 좌 우는 중요하지 않다. 최대, 최소를 기준으로 데이터를 찾는 연산이 빠르다. O(1) 상 하의 관계가 중요하단 말은 힙의 종류를 보면서 설명하는 게 편하겠다. . 최대 힙(Max Heap) 부모 노드의 값은 항상 자식 노드 보다 크거나 같음 루트 노드 = 트리의 최대값 9 5 7 4 2 . 최소 힙(Min Heap) 부모 노드의 값은 항상 자식 노드 보다 작거나 같음 루트 노드 = 트리의 최소값 1 6 2 7 8 연산 속도의 경우, 최대/ 최소 찾기 : O(1) 삽입 : O(logN) (1/2 씩 .. 2022. 2. 25.
자료구조 트리(Tree) 개요, 트리 탐색 방법 1. 개요 트리는 아래의 형태로 구현된다. A B C D E F G H I J K 이런 트리가 있다고 쳤을 때, A는 Root(트리의 시작점)이다. 노드를 연결하는 노드 간선을 edge라고 한다. A와 B, C를 연결하는 간선을 그리진 않았지만, edge로 이어졌다고 생각하면 된다. 노드간의 관계는 상위에 있는 노드는 parent parent 아래의 노드를 children 같은 parent를 가진 노드를 형제 노드 각 노드의 자식 수는 degree 라고 한다. (children 노드가 3개면 degree는 3이다. 자식이 없는 노드를 leaf 라 부르고, 터미널 노드라고도 부른다. 노드에서 다른 노드에 이르는 경로를 path라 부른다. path는 중복 경로를 포함하지 않는다. 노드의 구조는 노드의 깊이를.. 2022. 2. 22.
자료구조 원형 큐 (Circular Queue) 자바로 구현 1. 개요 이전 글에서 선형 큐는 LinkedList로 구현했다. 배열을 사용하지 않은 이유는 일반적인 방법으로 배열로 큐를 구현하면 효율성이 떨어지기 때문이다. 만약 데이터가 1억개 있다고 치자, 큐는 가장 먼저 들어온 데이터가 가장 먼저 나가야 하니, poll()을 하게 되면, 첫번째 자리가 비게 된다. 일반적인 방법이라면, 뒤에 있는 모든 데이터를 한칸씩 당겨와 줘야한다. 그런데 배열에서 그 작업을 하려면 poll() 한번 하고 99,999,999개의 메모리를 이동시켜야 하니 상당히 비효율적이다. 만약 poll() 을 하고 빈 자리를 그대로 놔둔다고 해도 문제가 된다. 처음에야 그리 시간이 걸리지 않겠지만, 데이터를 1,000만개를 뺐다고 하면, 가장 먼저 들어온 데이터를 찾기 위해, 1,000만번.. 2022. 2. 17.
자료구조 선형 큐 (Linear Queue) 자바로 구현 1. 개요 큐는 대표적인 자료구조중 하나로, 가장 먼저 들어간 데이터가 가장 먼저 나오는 선입선출, FIFO (First In First Out) 형태의 자료구조다. 활용방법으로는 프린터 출력 (가장 먼저 대기열에 오른 프린트를 먼저 실행) 대기열, 대기표 (먼저 신청한 사람이 먼저 업무를 봄) 순서가 보장된 처리를 제공 사용자가 몰린 서버에 유 기능으로는 offer() : 데이터 삽입 poll() : 데이터 빼기 peek() : 데이터를 뽑지 않고, 큐 안에서 가장 먼저 들어온 데이터 확인 2. 구현 package queue; public interface IQueue { void offer(T data); T poll(); T peek(); int size(); void clear(); boolean.. 2022. 2. 16.