알고리즘

알고리즘 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) 알고리즘의 장점

장점 설명
체계적인 문제 해결 문제를 해결하기 위한 명확하고 체계적인 방법을 제시한다.
효율성 개선 시간이나 메모리 등의 자원을 효과적으로 활용하여 문제를 해결한다.
확장성 다양한 입력 데이터, 다양한 환경에서도 유사한 구조의 문제를 해결할 수 있다.
자동화 컴퓨터가 자동으로 반복적으로 동일 작업을 수행할 수 있게 한다.
협업 및 재사용 알고리즘은 다른 개발자나 팀원이 이해하고 재사용하기 쉬운 구조를 가진다.

Reference

etymonline - algorithm
이산수학 - 손진곤 저
자료구조 (강태원, 정광식 공저)