전체 글 420

[알고리즘] Seach: Binary Search

1. Binary Search 란?정렬된 배열에서 찾고자 하는 요소를 빨리 찾는 알고리즘 입니다.주로 Binary Search Tree에서 사용됩니다. 과정중간 원소 선택범위 지정찾고자 하는 값보다 작다면, 배열의 오른쪽 반을 대상으로 이진 검색찾고자 하는 값보다 크다면, 배열의 왼쪽 반을 대상으로 이진 검색 찾을때까지 반복 (재귀적) Lower Bound값이 해인 인덱스 중, 가장 작은 인덱스 값더보기while (left  Upper Bound해를 초과하는 값 중, 가장 작은 값의 가장 작은 인덱스 값더보기while (left  2. 구현Array더보기public int search(int[] arr, int data) { int l = 0, r = arr.length-1; while (l ..

Algorithm 2023.10.26

[기초 알고리즘] Sort

1. Selection Sortin-place 과정주어진 리스트 중, 최소값을 찾음최소값을 맨 앞에 위치한 값과 교체 (pass)맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체더보기public int[] sort(int[] arr) { for (int i = 0; i arr[j]) minIdx = j; } if (minIdx != i) swap(arr, i, minIdx); } return arr;} Time Complexity : O(n^2) 장점교환 횟수 최소화 단점성능: 항상 n^2의 시간 복잡도를 가짐안정성 없음 (같은 값이면 순서가 계속 바뀜) 2. Bubble Sort인접한 두 원소를 비교하여, 순서가 잘못되어 있으면 교환하는 방식의 알고리즘i..

Algorithm 2023.10.26

[고급 자료구조] Tree: Heap

1. Heap 이란?최댓값을 찾아내는 연산을 빠르게 하기 위해 고안된 자료구조 입니다.완전 이진트리 기반 입니다.우선순위 큐 구현에 사용됩니다. 완전 이진트리마지막 레벨을 제외한 모든 노드가 채워져 있는 이진트리 자료구조 입니다.마지막 레벨은 왼쪽부터 채워져 있어야 합니다. 인덱스모든 노드를 배열로 표현할 수 있습니다.노드 간 관계를 배열 인덱스를 통해 접근할 수 있습니다.왼쪽 자식 노드 indexindex*2 + 1오른쪽 자식 노드 index index*2 + 2부모 노드 index(index-1) / 2 2. 종류최대 힙부모 노드가 자식 노드보다 크거나 같은 값을 가집니다. 최소 힙부모 노드가 자식 노드보다 작거나 같은 값을 가집니다. 3. 연산Heapify전체 배열을 힙 구조로 만드는 연산입니다.리..

Data Structure 2023.10.26

[고급 자료구조] Tree: Trie

1. Trie 란?문자열 탐색에 최적화된 트리 자료구조 입니다.1959년 Edward Frendkin에 의해 처음 소개되었습니다. 2. 기능사전 검색완전한 단어나 문구를 입력하여 해당 단어를 찾아냅니다. 접두사 검색뿌리부터 시작해서 각각의 가지가 알파벳 문자를 표현합니다.표시된 노드까지 문자열을 이루고 있음을 마크해둡니다. (각 단어가 끝나는 지점에 표시)자동완성 기능을 구현할 수 있습니다. 3. 구현더보기public class MyTrie { class Node { Map children; boolean endOfWord; Node() { this.children = new HashMap(); this...

Data Structure 2023.10.26

[자료구조] Graph

1. Graph 란?비선형 다대다 자료구조 입니다. vertex와 edge로 객체간의 관계를 표현합니다.계층적 또는 네트워크 형식으로 연결되어 있습니다.명확한 부모-자식 관계가 존재 X1:n or n:n현실세계의 다양한 문제를 효과적으로 모델링하기에 적합합니다. 용어Vertex(정점)정점Edge(간선)정점과 정점을 연결하는 간선을 의미합니다.Adjacent(인접)두 정점이 간선으로 연결되어 있을 경우, 두 정점은 "인접하다" 표현합니다.Incident(부속)정점간의 연결을 담당하는 간선을 "부속되었다" 표현합니다.Degree(차수)한 정점에 부속된 간선의 개수를 그 정점의 "차수"라 표현합니다.Path(경로)출발지에서 목적지로 이어지는 일련의 간선들을 의미합니다.Cycle(사이클)시작노드와 종료노드가 동..

Data Structure 2023.10.26

[자료구조] Tree

1. Tree 란?그래프의 일종노드들과 이 노드들을 연결하는 엣지들로 구성된 일종의 그래프 순환이 없는 연결 그래프모든 노드가 연결되어 있는 구조어떤 두 노드를 선택해도 경로는 항상 단 하나만 존재 계층형 구조루트노드부터 시작해서 여러 개의 하위 노드로 분기됩니다.각 노드는 0개 이상의 자식 노드를 가질 수 있습니다. 용어 A (Root, Depth: 0, Height: 2, Level: 1) / \ / \ B C (Node, Depth: 1, Height: 1, Level: 2) / \ / \ D E F G (Leaf, Depth: 2, Height: 0, Level: 3)Node트리를 구성하는 기본단위 입니다...

Data Structure 2023.10.26

[기초 자료구조] HashTable

1. HashTable 이란?매핑할 수 있는 자료구조 입니다. (key-value)key를 사용하여 해당되는 value를 빠르게 찾을 수 있습니다. Hash Function임의 크기의 데이터를 고정된 크기의 데이터로 매핑하는 함수Key를 입력받아 HashCode를 출력합니다. HashCode정수값HashTable의 인덱스로 사용됩니다.총 버킷 갯수로 나머지 연산을 수행합니다.  (인덱스 값으로 사용하기 위함)h(x) = M % m 좋은 해시함수의 특징일관성같은 키 값으로 항상 동일한 해시 코드를 생성해야 합니다.빠른 계산효율적이며 빠르게 해시 코드를 생성해야 합니다.테이블 크기를 2의 거듭제곱으로 설정하면 모듈러 연산을 빠르게 할 수 있습니다.균등성가능한 한 모든 버킷에 균등하게 데이터를 분산시켜야 합니..

Data Structure 2023.10.26

[기초 자료구조] Stack

1. Stack 이란?LIFO 방식으로 데이터를 저장하는 자료구조 입니다. LIFOLast-In, First Out가장 나중에 들어온 데이터가 가장 먼저 나가는 방식을 의미합니다. 2. 연산push맨 위에 항목을 추가합니다.O(1)pop맨 위에 항목을 반환하고 제거합니다.O(1)peek맨 위에 항목을 반환합니다.O(1)  3. 사용 사례Undo / Redo애플리케이션 사용중, 최근 수행한 명령을 취소 / 취소한 명령을 다시 실행 하는 기능으로 사용합니다.call stack운영체제에서 프로그램의 함수 호출을 관리하기 위해 사용합니다.괄호 짝 맞추기수식의 괄호가 문법에 맞게 작성되었는지 확인하는데 사용합니다.문자열 역순으로 변환하기문자열을 역순으로 바꾸는데 사용합니다.후위 표기법으로 변환하기수식을 후위 표..

Data Structure 2023.10.26

[기초 자료구조] Queue

1. Queue 란?FIFO 방식으로 데이터를 저장하는 자료구조 입니다. FIFOFirst-In, First-Out먼저 추가된 요소가 먼저 제거되는 방식을 의미합니다. 2. 주요 연산enqueue항목을 추가합니다.O(1)dequeue항목을 반환하고 제거합니다.O(1)peek항목을 반환합니다.O(1) 3. 종류Linear Queue막대 모양 형태의 큐입니다.단점- dequeue 시, 앞 공간이 비어있게 됩니다. (이 공간의 재사용이 불가합니다) Circular Queue환형 형태의 큐 입니다.  - 순환적으로 요소를 관리합니다. (시작과 끝이 연결되어 있음)장점 (Linear Queue 단점 보완) - 앞에 빈 공간이 있을 경우, 해당 공간 재사용 가능 - enqueue 시, 첫번째 요소로 포인터를 옮김P..

Data Structure 2023.10.26