반응형

Algorithm/Concept 8

[DP] LIS(최장 증가 부분 수열)

# DP(Dynamic Programming)DP는 이해하는데 어려운 개념은 아니다. 문제에 적용하는 방법이나 방식, 점화식을 찾는데 어려움이 있다. 하나의 큰 문제를 여러 개의 작은 문제로 나누어서 그 결과를 저장하여 궁긍적인 문제를 해결할때 사용하는 문제푸는 방법의 패러다임이라고 볼 수 있다. 풀어서 설명하자면, 꺼내서 사용하기 쉬운 자료구조에 작은 문제에 대한 해결값을 담아둔뒤에 그 자료구조에서 꺼내어서 풀고자 하는 문제를 풀어나아가는 것이다.# LIS(Longest Increasing Subsequence)DP에서 가장 많이 등장하는 문제로 배열이 주어지면 만들 수 있는 증가하는 가장 긴 수열을 만드는 것이다. 사람의 직관으로 풀면 어렵지 않다. 하지만 컴퓨터는 어떻게 풀어야할까? 컴퓨터가 dp를..

Algorithm/Concept 2024.05.21

[Algorithm] 정렬 - 힙정렬(Heap Sort)

#요약 2023.11.20 - [Computer Science/Data Structure] - [Data Structure] 비선형 - 힙(Heap) 최대 힙, 최소 힙 트리를 구성하여 정렬하는 방법 내림차순 정렬 ➡️ 최대 힙 구성 오름차순 정렬 ➡️ 최소 힙 구성 [Data Structure] 비선형 - 힙(Heap) #요약 우선순위 큐(Priority Queue)를 위해 만들어진 자료구조 ※ 우선순위 큐 (Priority Queue) : 우선순위의 개념을 큐에 도입한 자료구조 데이터들이 우선순위를 갖고 있으며 우선순위가 높은 순서대 blaj2938.tistory.com #구체적 설명 정렬해야할 n개의 요소들로 최대 힙(내림차순 정렬을 위해)을 만든다. 최대 힙(max heap): 부모 노드의 key..

Algorithm/Concept 2023.11.22

[Algorithm] 정렬 - 병합 정렬(Merge Sort)

#요약 현대 컴퓨터의 아버지 '존 폰 노이만'이 제안 분할 정복(Divid & Conquer)의 전략을 도입 문제를 작은 문제로 분리하고 각각 해결한 후에, 결과를 모아서 원래 문제를 해결하는 전략 순환 호출을 구현 리스트의 길이가 0 OR 1일때 이미 정렬된 것 정렬되지 않는 리스트들 절반으로 잘바 비슷한 크기의 두 부분 리스트로 나눔 ➡️ Divid 각 부분 리스트를 재귀적으로 병합 정렬을 이용해 정렬 ➡️ Conquer 두 부분 리스트를 다시 하나의 정렬된 리스트로 병합 ➡️ Combine #구체적 설명 하나의 데이터 배열을 균등하게 절반으로 나눈다. 나누어진 2개의 배열을 정렬한다. 분할: 입력 배열을 2개의 부분 배열로 분할한다. 정복: 부분 배열을 정렬한다. 부분 배열의 크기가 충분히 작지 않..

Algorithm/Concept 2023.11.14

[Algorithm] 정렬 - 삽입 정렬(Insertion Sort)

#요약 Target과 그 이전 데이터들과 비교하며 정렬한다. 소규모 데이터에 효율적이다. #구체적 설명 두번째 요소부터 시작하여 배열을 순회 현재 요소를 Target이라고 하고, Target 이전의 요소들과 비교 Target이 이전 요소보다 작으면, 이전 요소를 한 칸 뒤로 이동 이를 Target이 이전 요소들보다 크거나 같을 때까지 반복하고, Target을 적절한 위치에 삽입 모든 요소에 대해 위 과정을 반복 #알고리즘 #코드 작성 import java.util.Arrays; public class SortAlgorithm { static int[] arr = new int[]{7, 1, 3, 2, 4, 5, 6}; static int cnt = 0; public static void main(Stri..

Algorithm/Concept 2023.11.13

[Algorithm] 정렬 - 선택 정렬(Selection Sort)

# 요약 인간이 정렬하는 과정과 매우 비슷 데이터를 한번에 읽고 정렬 진 # 구체적 설명 주어진 데이터 리스트 중에 최솟값을 찾는다. 그 값을 맨 앞에 위치한 값과 교체한다. 맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다. # 알고리즘 # 코드 작성 - JAVA import java.util.Arrays; public class SortAlgorithm { static int[] arr = new int[]{7, 1, 3, 2, 4, 5, 6}; static int cnt =0; public static void main(String[] args) { selectionSort(arr); System.out.println(Arrays.toString(arr)); } private static ..

Algorithm/Concept 2023.11.13

[Algorithm] 정렬 - 칵테일 정렬(Cocktail Sort)

# 요약 버블 정렬의 파생형 정렬 양방향 버블 정렬이 이루어진다. 마치 양쪽에서 흔드는것처럼 보여서 칵테일 혹은 쉐이커 정렬이라고 불린다. # 구체적 설명 홀수 번째 돌때는 앞부터, 짝수번째를 돌때는 뒤부터 훑는다. 제일 처음에 하나, 제일 뒤에하나, 다시 제일 앞에 하나를 정렬하면서 마치 정렬하는 과정이 앞뒤로 흔드는 것처럼 보인다. 1회전을 수행하고 나면 오름차순, 내림차순에 따라 자료가 정렬이 진행된다. # 알고리즘 # 코드 작성 - JAVA import java.util.Arrays; public class SortAlgorithm { static int[] arr = new int[]{7, 1, 3, 2, 4, 5, 6}; public static void main(String[] args) {..

Algorithm/Concept 2023.11.11

[Algorithm] 정렬 - 버블 정렬(Bubble Sort)

# 요약 서로 인접한 두원소를 검사하여 정렬하는 알고리즘 인접한 2개의 데이터를 비교하여 크기가 순서대로 되어있지 않으면 SWAP한다. 선택 정렬과 기본 개념이 유사 # 구체적 설명 버블 정렬은 1번째 데이터와 2번째 데이터, 2번째 데이터와 3번째 데이터, 3번째 데이터와 4번째 데이터를 비교한다. 즉, n과 n+1을 비교하며 조건에따라 SWAP을 진행한다.. 1회전을 수행하고 나면 오름차순, 내림차순에 따라 자료가 정렬이 진행된다. # 알고리즘 # 코드 작성 - JAVA import java.util.Arrays; public class sort_bubble { static int[] arr = new int[]{7, 1, 3, 2, 4, 5, 6}; //정렬 대상 public static void ..

Algorithm/Concept 2023.11.10

[Algorithm] 탐색 - DFS와 BFS

DFS와 BFS란? 일단, 항상 공부하기전에 용어를 정리하는 습관을 기르고자 합니다. DFS(Depth-First Search) : 깊이 우선 탐색 BFS(Breadth-First Search) : 너비 우선 탐색 말그대로, 깊이 먼저 탐색하냐, 너비 먼저 탐색하냐 차이인거 같아요 그렇다면 뭘 탐색할까요? 그래프(Graph) 탐색 알고리즘 입니다. 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것 DFS와 BFS는 대표적인 그래프 탐색 알고리즘 입니다. DFS의 동작 원리 깊이 우선 탐색 답게 깊이를 우선적으로 탐색합니다. 수직적 탐색 이라고 생각하면 쉬울것 같네요 이렇게 수직 방향으로 탐색을 하게 됩니다. Java를 통해 구현해볼까요?? import java.util.Linked..

Algorithm/Concept 2023.09.22
반응형