All about Data Structure & Algorithm

(26)
동적계획법(Dynamic Programming) ※ 이 글은 chatGPT를 기반으로 작성한 글입니다. ① 동적 계획법은 복잡한 문제를 효율적으로 해결하는 알고리즘 설계 기법 중 하나이다. ② 동적 계획법은 일반적으로 다음과 같은 단계로 수행된다. ㉠ 문제를 하위 문제로 나눈다. ㉡ 가작 작은 크기의 하위 문제부터 해를 구한다. ㉢ 작은 하위 문제의 해를 저장하고, 큰 문제의 해를 계산할 때 이를 이용한다. ㉣ 모든 하위 문제의 해를 계산하여 최종적인 문제의 해를 구성한다. ③ 동적계획법을 사용하기 위해선 문제가 최적 부분 구조와 중복 부분 문제를 만족해야 한다. ㉠ 최적 부분 구조(Optimal Substructure)를 갖는 문제는 큰 문제의 최적해가 작은 하위 문제들의 최적해로 구성되는 경우를 말한다. ⓐ 정점 A, B, C, D가 존재하고 각 ..
브루트 포스 ※ 이 글은 chatGPT를 기반으로 작성한 글입니다.
라빈 카프 알고리즘 ※ 이 글은 chatGPT를 기반으로 작성한 글입니다.
보이어 무어 알고리즘(Boyer moore)
문자열 검색 알고리즘: KMP(Knuth-Morris-Pratt) ※ 이 글은 chatGPT를 기반으로 작성한 글입니다. ① KMP(Knuth-Morris-Pratt) 알고리즘은 문자열 검색 알고리즘(string matching algorithm) 중 하나로, 특정 패턴 문자열을 찾기 위한 알고리즘이다. ㉠ 보이어-무어 알고리즘(boyer-moore algorithm)과 함께 가장 많이 사용되는 문자열 검색 알고리즘이다. ② 브루트 포스 방식을 이용하면 최악의 경우 O(N * M)의 시간 복잡도를 갖기 때문에 이를 사용하는 것은 효율적이지 않다. 브루트 포스 ※ 이 글은 chatGPT를 기반으로 작성한 글입니다. hemahero.tistory.com ③ KMP 알고리즘은 패턴 문자열의 접두사와 접미사가 일치하는 최대 길이를 이용한다. ㉠ 패턴의 유사도를 측정하여 불필요..
홀짝 정렬(Odd-Even sort) ※ 이 글은 chatGPT를 기반으로 작성한 글입니다. ① 홀짝 정렬은 배열을 오름차순으로 정렬하는 병렬 정렬 알고리즘이다. ㉠ 홀짝 정렬은 브릭 정렬(brick sort)이라고도 알려져있다. ② 홀짝 정렬은 분할 정복 전략(devide-and-conquer strategy)를 사용하는 병합 정렬을 기반으로 한다. ③ 홀짝 정렬의 기본 원리는 다음과 같다. ㉠ 홀수 인덱스의 인접한 두 요소를 비교한다. ㉡ 순서가 잘못되어 있으면 순서를 바꾼다. ㉢ 짝수 인덱스에 대해서 ㉠ ㉡을 시행한다. ㉣ 정렬이 완료될 때까지 ㉠ ㉡ ㉢를 반복한다. ④ 홀짝 정렬의 의사 코드(psuedo code)는 다음과 같다. HTML 삽입 미리보기할 수 없는 소스 ⑤ 비교적 구현이 매우 간단하지만, 최악의 경우 시간 복잡도가 O..
시간 복잡도(Time Complexity) ※ 이 글은 chatGPT를 기반으로 작성한 글입니다. ① 시간 복잡도(time complexity)는 알고리즘의 수행 시간이 입력 크기에 따라 어떻게 증가하는지를 분석하는 데 사용되는 개념이다. ② 알고리즘의 시간 복잡도를 분석할 떄는 일반적으로 알고리즘이 실행하는 기본적인 연산 수행 횟수를 계산하고, 이를 입력 크기와 비교한다. ③ 시간 복잡도는 일반적인 최선, 평균, 최악의 경우로 나뉜다. ④ 시간 복잡도는 일반적으로 빅오(Big - O) 표기법을 사용하여 표기한다. 빅오 표기법은 입력 크기에 대한 함수의 상한(upper bound)을 나타내며, 알고리즘의 실행 시간이 이 함수보다 더 느리게 증가하지 않는 것을 보장한다. ㉠ 이를 수학식으로 나타내면 다음과 같이 나타낼 수 있다. ⓐ 이 부등식은 알..
바이토닉 정렬(Bitonic Sort) ※ 이 글은 chatGPT를 기반으로 작성한 글입니다. ① 바이토닉 정렬(bitonic sort)는 병렬 배열들을 정렬하기에 효과적인 정렬 방법이다. ② 바이토닉 정렬의 최악의 시간 복잡도는 O(n log^2 (n))이다. ㉠ 시간 복잡도를 볼 경우 그다지 뛰어난 성능을 가진 것 같아 보이지 않는다. ⓐ 그러나 바이토닉 정렬은 병렬 배열을 정렬할 때와 같은 특정 상황에서 쉽게 병렬화할 수 있고, 캐시 효율이 좋다는 장점이 있다. ③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮ ㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭ ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜ