본문 바로가기

알고리즘6

자바로 만든 스윙 기반의 GUI 프로그램 알고리즘 과제중 순차탐색의 비교 횟수를 측정하는 내용이 있었다. - 비교적 쉬운 내용으로 코드로 표현하는건 어려운일이 아니었고 바로 결과를 확인 할 수 있었다. 그러나 터미널 화면에서 보이는 실행화면이 제출용으로는 마음에 들지 않았고 반복측정을 하기위한 인터페이스가 필요하다는 생각이들었다. 그래서 자바에서 제공하는 스윙 기반의 GUI라이브러리를 이용하여 프로그램으로 만들어 보기로 하였다. ComboBox를 사용하여 배열의 크기와 반복횟수를 사용자의 임의로 지정할 수 있게 만들었고 버튼을 추가하여 반복적인 측정이 가능하도록 구현하였다. 지금까지 GUI프로그램은 파이썬으로 만들어보다가 처음 자바로 만들어보는 작업이었는데 눈에 보이기 편하게 작업하려고 여러 클래스로 나누어서 만들다 보니까 객체를 만들어서 속성.. 2020. 9. 13.
알고리즘의 효율성, 시간복잡도 (Big-O) notation 알고리즘의 효율성은 - 알고리즘의 수행시간 (시간복잡도, Time Complexity) - 수행하는동안 사용되는 메모리 공간의 크기 (공간복잡도, Space complexity) 로 나타낼 수 있다. 사용되는 메모리, 공간등은 주어진 환경에 따라서 다르기 때문에 보통 알고리즘을 비교할때는 시간복잡도로 표현한다. 시간복잡도는 알고리즘의 수행하는 기본적인 연산의 횟수를 입력의 크기에 대한 함수로 표현한다. ex) 크기가 N인 데이터를 순차적으로 비교 한다면 총 비교 횟수는 (N-1)이 되므로 크기가 N인 순차적인 알고리즘의 시간복잡도는 (N-1)이다. 시간복잡도는 표현할때는 3가지의 분석 방법이 주어지는데 1. 최악의 경우 분석 (Worst Case Analysis) 2. 평균의 경우 분석 (Averge C.. 2020. 9. 10.
최초의 알고리즘 가장 오래된 알고리즘은 A.C 300년 전에 만들어진 유클리드의 최대공약수를 찾는 알고리즘으로 알려져 있다. 최대공약수(GCD) : 2개 이상의 자연수들의 공통된 약수중 가장 큰 수 유클리드는 2개의 자연수의 최대공약수를 구하기 위해 큰 수에서 작은 수를 뺀 수 작은수와의 최대공약수는 같다 라는 성질을 이용하여 최대공약수를 찾았다. ex) 24와 14의 최대공약수 (큰수 : 24, 작은수 :14) 큰수 - 작은 수 :: 24 - 14 = 10 > 10과 작은수(14)와의 최대 공약수는 같다 >> 이 과정에서 다시 큰수는 14, 작은수는 10으로 swap되며 소분해 나갈때 0을 제외한 나머지 수가 두 수의 최대 공약수 이다. 최대공약수 ( n, 0 ) = n 2020. 9. 10.
알고리즘이란 알고리즘이라는 이름은 페르시아 수학자인 '알콰리즈미'로부터 유래 되었다고 한다. 이건 별로 기억할 필요는 없고 여러 의미를 가지고 있는것 같은데 내가 생각하는 알고리즘은 문제를 해결하는 단계적인 절차, 또는 방법이라고 생각한다. 여기서 문제를 해결하기 위한 도구는 컴퓨터이며 여기서 입력이 주어지며 알고리즘을 통해 결과를 출력 받는다. 알고리즘의 특성으로는 1. 정확성 > 알고리즘은 주어진 입력에 대하여 올바른 정답만을 도출해 내어야 하며 오답을 뱉을시 이는 알고리즘이라고 할 수 없다. 2. 수행성 > 알고리즘의 각 단계는 코드는 컴파일러에 의하여 기계어로 번역이 가능하며 수행이 되어야 한다. 즉 컴퓨터가 알아먹을 수 있는 언어로 작성되어야 한다는 말이다. 3. 유한성 > 알고리즘은 일정한 시간내에서 종료.. 2020. 9. 10.
팩토리얼 함수 코딩, 알고리즘 ,Factorial Algorithm (재귀함수) 앞에서는 반복함수로 팩토리얼 알고리즘을 구현하였는데 이번에는 재귀함수를 사용하여 팩토리얼을 구해보도록 하겠습니다. 그림이 이해가 되셨으면 좋겠네요 재귀함수, 재귀호출 이라고 하며 여기서 재귀는 자기 자신을 포함하고 다시 자기 자신을 사용한다 이런 느낌을 재귀적이라고 합니다. 무슨말인지 모르시겠다면 그게 맞는겁니다. 나는 나고 나라는건 나야 재귀적으로 자신을 말할때 저렇게 말할 수 있게됩니다. 무슨말인지 모르시겠다면 그게 맞는겁니다. 즉 자기 자신을 포함하는 것이라고 생각하시면 편할것 같습니다. 팩토리얼을 설명하는데 왜 재귀함수를 이야기하는지 모르시겠다구요? 여기서 팩토리얼의 공식을 조금 더 자세히 살펴보겠습니다. 이해를 돕기위해 n > 5 라고 가정할시 n! = n*(n-1)*(n-2)*(n-3)...... 2020. 2. 24.
팩토리얼 함수 코딩, 알고리즘 , Factorial Algorithm (반복함수) 팩토리얼은 n부터 1까지의 정수를 곱하는 단순한 연산이라고 할 수 있는데요 예시로 5!는 5 * 4 * 3 * 2 * 1 = 120 입니다 반복적인 곱의 연산 형태이며 알고리즘 코드로 구현 해보겠습니다. 자바로 구현 했으며, 물론 다른 언어도 방식은 똑같습니다. 반복함수를 사용하여 팩토리얼 코드 만들기 n! = n*(n-1)*(n-2).....(n-(n-1)) 에서 마지막에 곱해진는 정수가 1이 될때까지 곱셈을 합니다. 반복문이므로 for문과 while문중 하나를 선택해서 구현하는데 정해진 조건이 있으므로 for문을 사용하여 구현을 합니다. public static long factorial(int n) { // long형으로 반환 합니다. 길이가 짧으면 int형도 상관없습니다. int i = 0; //.. 2020. 2. 24.