본문 바로가기

반응형

전체 글

(195)
GCD 알고리즘 GCD(Greatest Common Divisor), 즉 최대 공약수를 구하는 방법에 대해 한 번 알아보고자 한다. 최대 공약수를 구하는 방법은 우리가 이미 초등학교, 중학교 때 배우기는 하였다. 두 수에 대해서 소수(Primary Number)를 나누어 주어 서로소로 만든 후, 나누어주었던 소수 집합을 모두 모아 곱해주면 그게 바로 최대 공약수였다. 그러나 이 방식을 컴퓨터에서 구현하기에는 아름답지 못한 방법이다. 우선 나누어주는 수가 소수인지 판단하는 데 시간을 소모하고, 두 수가 모두 해당 소수로 나누어지는 지 판단해야 한다. 이런 방식은 잠시 뒤로 밀어두고 우리는 유클리드 호제법을 이용하여 GCD를 구하고자 한다. 유클리드 호제법의 가장 기본적이고 핵심적인 부분을 꼽자면 A, B라는 두 수에 대해..
23년 8월 22일 : MakeFile 최근 리눅스 상에서 프로그래밍을 하면서 Makefile을 이용하여 C 내지는 C++ 소스 코드를 실행 파일로 변환시켜야 하는 일들이 많아졌다. 생각난 김에 한 번쯤은 Makefile에 대해서 정리할 필요가 있어서 이 글을 쓰게 되었다. 우선 컴퓨터가 이해할 수 있는 것은 오직 0과 1 밖에 없다는 것이 출발점이다. 못할 것은 없지만 사람이 0과 1만을 가지고 필요한 프로그램을 작성하는 것은 매우 번거롭고 힘든 일일 것이다. 그렇기에 자연어에 가까운 프로그래밍 언어(C/C++, Java, Python 등)을 사용하여 코드를 짜고, 이를 컴파일러(Compiler)로 기계어로 번역하여 사용하게 된다. 소스 코드를 최종적으로 기계어로 번역하는 과정을 컴파일(Compile)이라고 한다. 하나의 소스 코드 파일에 ..
[머신러닝] AI, 머신 러닝, 딥러닝, 지도 학습 등 해당 내용은 강의를 들으면서 정리한 내용이다. 짜임새 있는 글이라기보다는 복습 겸 쓰는 글이어서 두서가 없을 수 있다는 점에 대해 양해를 구한다. 강의를 듣고 싶은 사람을 위해서 밑에 링크를 남긴다. 개인적으로는 선형대수에 대해 기본적인 것을 익히고 학습을 한다면 훨씬 이해가 잘될 것이라 생각한다. https://www.youtube.com/watch?v=vcCaSBJpsHk&list=PLS8gIc2q83OjStGjdTF2LZtc0vefCAbnX 인공지능(AI) : 인간의 학습 능력, 추론 능력 등을 인공적으로 컴퓨터 상에 구현한 것 머신러닝(ML) : 인공지능의 하위 카테고리에 속하며, 정확히는 인공지능을 구현 또는 성능 향상을 위한 단계이다. 머신러닝은 지도 방식에 따라서 지도 머신러닝과 비지도 머신..
Sorting Simulator 유튜브에서 알고리즘으로 다양한 sorting algorithm을 보여주는 영상들이 보여서 한 번 만들어 보기로 하였다. 모든 sorting 알고리즘을 다루지는 않았고 대표적인 몇 개만을 구현하였다. 구현한 Sorting은 Bubble sort, Insertion sort, Selection sort, Quick sort, Merge sort이다. 각각의 정렬 방법을 선택하였을 때, 1부터 600까지 저장되어 있는 배열을 랜덤하게 섞은 후, 선택한 정렬 방법으로 오름차순으로 재정렬한 후, 정렬 과정을 화면으로 보여주는 것이 프로그램의 주요 내용이다. 또한 해당 과정을 보여주기 위해 몇 개의 장면을 저장하였는 지 출력하는 기능을 추가하였다. 저장된 장면의 수가 많을 수록 비교 혹은 Swap이 많이 이루어졌다..
이클립스 쓰면서 발생한 문제들에 대한 간단한 tips 1. 이클립스가 java 버전이 잘 안 맞는다면서 에러가 뜬다. - 구글링 해보면 뭐 config 파일에서 최소 자바 버전을 낮추어 주면 된다고 하는데, 나는 오히려 이 방법을 따라했다가 부가적인 에러가 발생하였다. 우선은 제대로 시스템 환경 변수에 들어가서 제대로 자바가 등록되어 있는지 확인하기를 바란다. 또 최신 버전의 자바와 구 버전의 자바가 모두 등록되어 있다면 구 버전 자바를 path에서 지우거나 최소한 최신버전의 자바가 리스트의 위 쪽으로 가도록 해야한다.(path 참조 우선 순위는 리스트 위쪽이 높다!) 그래도 안된다면 최신 버전의 이클립스를 다운 받는 것을 권장한다. https://coding-factory.tistory.com/838 [Java] 자바(JDK) 환경변수 설정방법 (for ..
내가 볼려고 만든 이클립스 단축키 주석 Ctrl + Shift + / : 블록을 주석으로 처리 (/* */) Ctrl + Shift + \ : 블록 주석을 해제 Ctrl + / : 한줄 or 블록 주석 처리 / 해제 (//) 검색 Ctrl + F : 키워드 검색 (해당 소스에서만) Ctrl + H : 키워드 검색 (프로젝트 전체에서) Ctrl + Shift + R : 전체 리소스에서 파일 찾기 Ctrl + Shift + T : Jar 포함 클래스 찾기 Ctrl + Alt + H : 특정 클래스 호출 위치 찾기 Ctrl + K : 찾을 문자열을 블럭으로 지정하고 검색 Ctrl + Shift + K : 밑에서 문자열 검색 위치 이동 Ctrl + 특정 클래스 마우스 왼쪽 클릭(F3) : 특정 클래스로 이동 Ctrl + O : 소스의 메소드 리..
FFT Algorithm, Cooley-Tukey Algorithm 푸리에 변환은 다양한 곳에서 응용된다. 컴퓨터는 푸리에 변환 중 주기를 가진 이산 신호에 대해서만 푸리에 변환을 수행할 수 있다. DFT(Discrete Time Fourier Transform)는 다음과 같이 정의될 수 있을 것이다. 정의에 따라 푸리에 변환을 구하게 되면 O(N^2)의 시간이 걸리게 된다. 즉 신호의 주기가 길어질 수록 푸리에 변환을 얻기 위해 걸리는 시간은 주기 제곱에 비례하여 증가하게 되고, 이는 빨리 문제를 해결하고자 하는 우리 입장에서 바람직한 현상은 아니다. FFT Algorithm은 주기에 따라 제곱에 비례하여 증가하는 현상을 O(NlogN)까지 개선할 수 있다. FFT의 기본적인 컨셉은 분할과 정복(Divide and Conquer)이다. 분할과 정복에 대해서 간단히 설명..
Spring : DI, IoC, Bean 등록 관련 사용 스프링(Spring)의 가장 큰 특징으로는 DI (Dependency Injection), IoC(Inversion of Control) 을 들 수 있다. DI는 클래스의 생성 방식과 연관되어 있다. 클래스 안에는 필드가 있고, 프로그래머는 필드(Field)에 대해 클래스를 생성할 때 직접 생성할 것인지, 아니면 외부에서 이미 생성된 인스턴스(Instance)를 참조할 것인지 결정할 수 있다. 전자의 방식인 경우 만약 필드에 대한 클래스에 변경 사항이 생길 경우, 연쇄적으로 본 클래스를 변경할 여지가 있다. 그러나 DI 방식을 사용하면 이런 문제를 어느 정도 해결할 수 있다. 자바는 인터페이스(Interface)를 제공하여 같은 인터페이스를 이식(Implement)받은 클래스들을 모두 받아들일 수 있도록..

반응형