알고리즘
알고리즘 algorithm 의 정의
-어떠한 문제를 해결하기 위한 여러 동작들의 유한한 모임.
-컴퓨터가 작업을 수행하기 위해 따라야 하는 추상화된 절차나 규칙의 집합 또는 명령어의 연속된 덩어리
-어떠한 문제를 해결하기 위한 일련의 절차나 방법
한 문장으로 정의해보기
문제 해결을 위한 작업 수행의 추상화된 단계적이고 명확한 절차나 방법, 혹은 세부적인 동작들의 집합.
알고리즘의 예시
(1) 계란 프라이 만들기
-ㄱ. 팬을 예열한다.
-ㄴ. 기름을 팬에 두른다.
-ㄷ. 달걀을 깨서 안의 흰자와 노른자를 팬 위에 올린다.
-ㄹ. 뜨거운 팬에 익힌다.
-ㅁ. 소금 후추 등을 뿌려 맛을 낸다.
-ㅂ. 접시에 옮겨 담는다.
(2) 유클리드 최대공약수 알고리즘(유클리드 호제법)
-ㄱ. 두 숫자 a, b에서 b가 0이 아니라면, a를 b로 나눈 나머지를 r이라 한다.
-ㄴ. a=b, b=r로 설정한다.
-ㄷ. b=0이 될 때까지 위 과정을 반복한다.
-ㄹ. 최종 단계에서 남은 a가 최대 공약수이다.
알고리즘의 조건
조건 | 설명 |
---|---|
출력 | - 알고리즘 수행 후 적어도 한 가지 결과를 생성해야 한다.(존재의 의미) |
유효성 | - 알고리즘은 반드시 실행 가능해야 한다. |
입력 | - 알고리즘에 입력되는 값은 반드시 형태가 정의될 수 있어야 하고, 그 수가 유한해야 한다. |
명확성 | - 명령들은 애매모호 하지 않고 명확해야 한다. - 실행 주체가 누구더라도 같은 의미로 해석되고, 동일 결과를 생성할 수 있어야 한다. |
유한성 | - 반드시 종료가 명확하게 정의되어 있어야 한다. |
알고리즘의 표현 방법
구분 | 자연어 설명 | 순서도 | 의사코드 | 프로그래밍 언어 |
---|---|---|---|---|
설명 | 알고리즘을 일상적인 언어로 설명한 것 | 알고리즘의 흐름을 도식으로 표현 | 자연어 + 프로그래밍 언어의 구조 | 실제로 실행 가능한 코드로 작성 |
장점 | 이해하기 쉽고, 비전문가도 이해 가능 | 복잡한 알고리즘을 직관적으로 이해할 수 있음 | 코드에 가까운 표현 방식으로 논리 이해가 용이함 | 구현 가능하며, 실행 가능하므로 검증 쉬움 |
단점 | 명확성이 떨어지거나 모호한 표현 발생 가능 | 알고리즘이 복잡해지면 수서도가 과하게 커짐 | 없나..? | 특정 언어에 종속되어 표현이 제한적임 |
자연어 설명
설명 : 알고리즘을 일상적인 언어로 설명하는 방식.
장점: 이해하기 쉽고, 비전문가도 접근 가능.
단점: 명확성이 떨어질 수 있으며, 모호한 표현이 생길 가능성 있음.
예시
1
2
3
4
5
리스트에 있는 모든 숫자의 합을 구하는 알고리즘은 다음과 같다.
(1) 합계를 저장할 변수를 0으로 초기화한다.
(2) 리스트의 각 숫자를 순차적으로 읽어들인다.
(3) 읽은 숫자를 합계 변수에 더한다.
(4) 리스트의 마지막 숫자까지 모두 더한 후, 최종 합계를 반환한다.
순서도
설명 : 알고리즘의 흐름을 도식으로 표현하는 방법. 조건, 반복, 처리 등을 시각적으로 나타낸다.
장점: 복잡한 알고리즘을 직관적으로 이해 가능.
단점: 알고리즘이 매우 복잡하면 순서도가 과도하게 커질 수 있음.
의사코드
설명 : 모호한 부분은 프로그래밍 언어의 구조(문법)을 채용해 명확히 기술하고, 구체적으로 표현이 필요가 없는 부분은 자연어를 통해 설명식으로 기술하여 알고리즘의 작동방식을 설명하는 용도로 사용되는 표현법.
장점: 코드에 가까운 표현 방식으로 논리 이해가 용이.
단점: 정확한 실행 결과를 보장하지는 않음.
1
2
3
4
5
6
함수 계산합(리스트)
합계 ← 0
리스트의 각 숫자에 대해 반복 수행:
합계 ← 합계 + 숫자
합계를 반환
끝
컴퓨터 프로그래밍 언어
알고리즘을 실제로 실행 가능한 코드로 작성하는 방식입니다. 가장 구체적이고 실행 결과를 직접 확인할 수 있습니다.
장점: 구현 가능하며 결과 검증이 쉬움. 단점: 특정 언어에 종속되어 표현이 제한될 수 있음.
1
2
3
4
5
6
7
8
9
10
def calculate_sum(numbers):
total_sum = 0
for number in numbers:
total_sum += number
return total_sum
# 테스트
numbers = [1, 2, 3, 4, 5]
result = calculate_sum(numbers)
print("합계:", result) # 출력: 합계: 15
더 깊게 살펴보기
어원
algorithm
1690년대 “아랍 계산법”을 뜻하는 프랑스어 algorithme 에서 유래했다.
서구에 고급 수학을 소개한 아랍 수학자 al-Khwarizmi 의 이름에서 비롯된 단어.
20세기 중반 이후에는 컴퓨팅과 관련하여 특히 많이 사용되고 있다.
알고리즘의 목표와 장점
알고리즘의 목표와 장점은 추상화의 그것과 유사하다.
(1) 알고리즘의 목표
목표 | 설명 |
---|---|
문제 해결 | - 주어진 문제를 체계적으로 논리적으로 해결하는 방법 제공 - 복잡한 문제도 작은 단계로 나누어 접근할 수 있음 |
효율성 | - 시간과 자원의 효율성을 극대화 하는 것을 목표로 함 - 효율적인 알고리즘은 동일 문제를 다른 알고리즘보다 더욱 빠르고 적은 자원으로 해결 |
재사용 가능성 | - 알고리즘으로 제공된 일반적인 해결 방식은 다른 유사 문제에도 적용 가능 |
정확성 | - 명확하고 단계적인 절차를 통해 문제를 정확히 해결하는 것이 목표 |
자동화 | - 반복적으고 복잡한 작업을 자동화 - 이로써 인간의 개입 없이도 문제를 해결할 수 있도록 함 |
(2) 알고리즘의 장점
장점 | 설명 |
---|---|
체계적인 문제 해결 | 문제를 해결하기 위한 명확하고 체계적인 방법을 제시한다. |
효율성 개선 | 시간이나 메모리 등의 자원을 효과적으로 활용하여 문제를 해결한다. |
확장성 | 다양한 입력 데이터, 다양한 환경에서도 유사한 구조의 문제를 해결할 수 있다. |
자동화 | 컴퓨터가 자동으로 반복적으로 동일 작업을 수행할 수 있게 한다. |
협업 및 재사용 | 알고리즘은 다른 개발자나 팀원이 이해하고 재사용하기 쉬운 구조를 가진다. |