본문 바로가기
728x90

전체 글250

Boyer-Moore vs KMP https://lms0806.tistory.com/210 A Fast StringSearching Algorithm 리뷰해당 논문은 boyer–moore 알고리즘 이라고 불리는 kmp와 비슷한 알고리즘에 대하여 설명하고 있습니다. 보이어무어 알고리즘은 불필요한 것은 건너뛰고, 검색을 빠르게 하자는 것에서 KMP와 유사lms0806.tistory.com이전 포스팅에서 보이어-무어에 대해 설명중인 논문에 대해 설명을 했었습니다.https://lms0806.tistory.com/211 JAVA에서의 Boyer-Moore해당 글은 보이어 무어 알고리즘을 사용하고 있는 JAVA의 내부 코드에 대해 이야기하고자 합니다.Boyer-Moore에 대해서는 해당 글 참조 부탁드립니다.https://lms0806.tisto.. 2024. 6. 25.
JAVA에서의 Boyer-Moore 해당 글은 보이어 무어 알고리즘을 사용하고 있는 JAVA의 내부 코드에 대해 이야기하고자 합니다.Boyer-Moore에 대해서는 해당 글 참조 부탁드립니다.https://lms0806.tistory.com/210 A Fast StringSearching Algorithm 리뷰해당 논문은 boyer–moore 알고리즘 이라고 불리는 kmp와 비슷한 알고리즘에 대하여 설명하고 있습니다. 보이어무어 알고리즘은 불필요한 것은 건너뛰고, 검색을 빠르게 하자는 것에서 KMP와 유사lms0806.tistory.com 해당 글의 마지막에 보이어 무어 알고리즘을 사용하고 있는 BMPatter.java에 대해 링크를 남긴적이 있습니다.이제는 저희가 자주 사용중인 내부 라이브러리 함수 중에 Boyer-Moore 알고리즘을 .. 2024. 6. 23.
A Fast StringSearching Algorithm 리뷰 해당 논문은 boyer–moore 알고리즘 이라고 불리는 kmp와 비슷한 알고리즘에 대하여 설명하고 있습니다. 보이어무어 알고리즘은 불필요한 것은 건너뛰고, 검색을 빠르게 하자는 것에서 KMP와 유사합니다. 단, 뒷부분에서 불일치가 일어날 확률이 높다는 성질을 활용하여 오른쪽 끝부터 비교하여 문자열 매칭을 진행합니다. 다음과 같이 "EAT A APPLE"의 문장에 "APPLE"이라는 단어가 있는지 체크하는 과정을 거친다고 가정해보겠습니다.APPLE의 맨 뒤 단어인 E와 같은 위치에 있는 단어는 A로 서로 다르다는 것을 인식하였습니다.이후, A라는 단어가 찾고자 하는 APPLE 이라는 단어에 포함되어 있는지 확인하고, 포함되어 있다면 해당 위치로 이동을 시킵니다.위치로 이동결과, APPLE이라는 단어를 찾.. 2024. 6. 16.
int vs Integer int와 Integer의 차이는 원시타입과 객체타입로 보시면 됩니다.그러나 둘다 숫자를 저장한다는 공통점을 가지고 있습니다.'그러면 int대신에 Integer로 전부 통일시키면 괜찮지 않을까?' 라는 생각을 하게 되었고, 이를 기반으로 시간 테스트를 진행해 보았습니다. 가장먼저 각 값들을 n번 선언해보았습니다. int a = 0; long beforeTime = System.currentTimeMillis(); for(int i = 0; i  intInteger시간(ms)14 이번엔 값 선언 후, +1 연산을 수행해 보았습니다.  int a = 0; long beforeTime = System.currentTimeMillis(); for(int i = 0; i  intInteger시간(ms)1.. 2024. 6. 9.
알아두면 좋은 for, switch 자바로 소스코드를 작성하다 보면, for문(반복문)이나 switch(조건문) 등의 코드를 작성하게 됩니다.해당 코드들을 편리하게 사용하기 위한 방법들에 대해 이야기해보고자 합니다. for문for문에 대해서는 일반적으로 해당 방식으로 사용합니다.ArrayList arr = new ArrayList():int sum = 0;for(int i = 0; i 굳이 i라는 변수를 for문내에서 말고는 사용하지 않은 경우, 특정 컬렉션들의 값들을 전부 출력하는 경우에는 더 효율적은 foreach문이 존재합니다. foreach문은 해당 방식으로 사용이 가능합니다.ArrayList arr = new ArrayList();int sum = 0;for(int a : arr) { sum += a;} switch문기본적으로 j.. 2024. 6. 2.
보기 좋은 코드? 알고리즘 문제 풀이를 진행하거나, 블로그에 코드를 작성할 때, 다른 사람들이 보기 좋게 코드를 짜는 방식에 대해 정리해보고자 간단하게 글을 작성하였습니다. 보통 알고리즘 문제를 풀 경우에는 '어차피 알고리즘 문제 푸는데, 풀리기만 하면 되지'라는 생각으로 코드를 정리하지 않고 작성하는 경우가 있습니다.대회에서는 해당 방식으로 코드를 작성하는 것이 좋을 수 있으나, 일반적인 문제풀이의 경우 프로젝트 하나의 기능에 대하여 코드를 작성한다고 생각하면서 작성하시는 편이 좋습니다. 1. 공백 제거아주 간단한 방법으로 불필요한 공백을 제거함으로써, 보기 좋은 코드를 만들 수 있습니다.public class Main { public static void main(String[] args) { int a =.. 2024. 5. 26.
heap vs TreeMap<key, list> treemap());vsPriorityQueueNode(String, String); 과연 어느게 더 메모리를 적게 먹고, 시간을 적게 소요할까요? 코드를 작성하는 와중에 단순 PriorityQueue에 데이터를 넣다보면, java heap memory error가 발생할 거 같다는 생각을 하게 되었습니다. 간단한 이유로는하나의 바구니에 데이터를 모두 담는가 vs 여러 바구니에 나눠서 담는가 에 대하여 생각해보면 당연 후자가 더 효율적이라고 생각했기 때문입니다. 이를 증명하기 위하여 하나의 테스트과정을 거치게 되었습니다. Map의 소스는 이러합니다.Map> map = new TreeMap();for(int i = 0; i ()); for(int j = 0; j  PriorityQueue의 소스는 이러합니.. 2024. 5. 19.
.yaml 파일 수정하기 기본적으로 .yaml파일을 읽어오는 방법은 2가지가 존재합니다.1. class를 활용하여 값을 저장하기2. new Yaml()을 활용해서 map형태로 받아오기 class를 활용하여 가져오기해당 방식을 사용하기 위해서는 yaml파일에 저장되어 있는 1step의 값들로 이루어진 class가 필요힙니다. a: b: c:d: e: f: 해당 형식으로 이루어진 yaml파일을 읽어오기 위해서는@Getter@Setterclass Node{ static A a; static D d; public Node(A a, D d){ this.a = a; this.d = d; }}해당 형식으로 된 class와 A와 D에 해당하는 class에 각각 b,c와 e,.. 2024. 5. 12.
빠른 문자열 복사 C언어로 문자열 복사 및 붙여넣기시, 다른 언어들과 다르게 +=을 사용할 수 없습니다. 이런 경우 C언어를 배우게 되면서 학습한 strcpy나 strcat을 활용하시면 됩니다. 그러나, strcat이나 strcpy를 활용해서 다량을 문자열들을 복사나 붙여넣기 하게되면 시간이 오래 소요되게 됩니다.오늘은 strcat이나 strcpy가 아닌 다른 방식으로 같은 효과를 보면서 시간이 더 빠른 방법에 대해 알아보고자 합니다. strcat을 보시면 strcpy를 활용하는 것을 볼 수 있습니다.그러면 이런 생각을 하게 되죠.'strcat을 하지말고 그냥 strcpy를 사용하면 되지 않아?'맞습니다. strcat대신에 strcpy를 활용하게 된다면 아마 조금의 속도향상은 있을 겁니다.그러나, 아직까지 속도가 느리다고.. 2024. 4. 29.
728x90