알고리즘의 개념에 대해서 이해하는 시간을 가져보려 합니다. 알고리즘의 비공식적인 정의는 '연산 순서를 정의하는 규칙 세트' 일 수 있으며, 수치 계산을 수행하지 않는 프로그램을 포함하여 모든 컴퓨터 프로그램과 일정한 규칙에 의해 연산되는 절차를 포괄적으로 포함하고 있습니다. 일반적으로 소프트웨어의 충돌은 대다수가 알고리즘에 의한 트러블일 가능성이 높습니다. 

 

알고리즘의 프로토 타입에 대한 예제는 다음과 같습니다. 두 개 정수의 최대 공약수를 결정하는데 사용되는 유클리드 알고리즘을 예로 들어 보겠습니다. '유클리드 알고리즘 (Euclidean Algorithm)' 이는 컴퓨팅을 하기 위한 최적의 연산 방법이라고 표현할 수 있겠습니다. 최대 공약수, 혹은 최대 수는 두 정수 (숫자)의 합에 분한 둘과 그의 나머지를 의미 합니다. 유클리드 알고리즘은 고대 그리스의 수학자인 유클리드 (Euclid)의 이름을 따서 명명된 것으로 전해지고 있으며, 유클리드는 기원전 300여년 경에 이미 최대 공통 제수를 찾는 방법에 대한 해결책을 제시하게 되었습니다.

 

유클리드 알고리즘은 큰 숫자를 작은 숫자와의 차이로 대체하면 두 숫자의 최대 공약수가 변하지 않는다는 원리를 기반으로 작동하게 됩니다. 예를 들어, 21은 252와 105의 GCD (정수) (252 = 21 x 12와 105 = 21 x 5)이며 같은 숫자 21도 GCD와 105, 그리고 252 - 105 = 147 이라는 결과를 도출할 수 있습니다. 이 과정을 반복하게 되면 두 숫자가 같아 질 때까지 작은 숫자의 쌍이 연속적으로 나타나는 것을 확인할 수 있습니다.

 

이는 두 양의 정수, 그리고 두 다항식의 최대공약수를 구할수 있는 획기적 방법으로서 인류 최초의 알고리즘으로서 그 의미가 남다르다고 할 수 있습니다. 이를 활용하면 나머지가 0이 될 때 까지 연속해서 사용할 수 있다는 것을 알수 있을 것입니다. 다만, 유클리드 알고리즘이 최적의 알고리즘이라고 단정 지을 수 는 없으며, 보다 더 큰 정수의 경우에는 다른 형태의 준 선형적 알고리즘들을 사용해야만 합니다. 다행인 것은, 숫자가 2만자리 정도 이상으로 넘어가는 정말 큰 수가 아닌 이상에는 유클리드 알고리즘 정도로도 충분히 알고리즘을 수행할 수 있다는 사실입니다.

 

알고리즘의 개념은 결정성에 대한 개념과 일련의 작은 공식과 규칙에서 연산을 시작하는 방법을 설명하는 중심적 개념을 정의하는 것에 사용되어진다고 볼 수 있겠습니다. 수식적 논리가 분명한 관습 물리적 크기와 정 반대되는 알고리즘을 완료하는데 필요한 시간은 측정할 수 없다는 모순 또한 존재합니다. 진행중인 작업을 특정 짓는 규정되어진 불확실성으로부터, 구체적으로 용어의 추상적인 사용법에 적합한 알고리즘의 정의는 그 가용 범위에 대한 적정선을 찾기가 어려울 정도입니다.

 

그럼에도 불구하고 알고리즘은 컴퓨터의 데이터 연산 처리에 있어 단연 필수적인 항목이라고 할 수 있습니다. 예를 들어, 반복적인 작업을 대량으로 수행해야 하는 경우, 컴퓨터에 입력된 순서에 의해서 특정 작업을 입력된 명령에 따라 자세히 설명하는 알고리즘이 포함되어지게 됩니다. 즉, 알고리즘은 터닝 컴플리트 (Turing Complete) 시스템에 의해 시뮬레이션 될 수 있는 임의의 동작 시퀸스 인 것으로 간주될 수 있는 것입니다. 

 

전형적으로, 알고리즘이 정보 처리와 관련 될 때, 데이터는 입력 소스로부터 판독 될 수 있고, 출력 장치에 기록되며 추가 처리를 위해 카트리지에 별도로 저장되어 질 수 있습니다. 저장된 데이터는 알고리즘을 수행하는 NTT 내부 상태의 일부로 간주되어 지게 됩니다. 이는 실제로 하나 이상의 데이터 구조에 의해 저장되어지고 있습니다.

 

지금까지의 알고리즘에 대한 공식적인 논의는 명령형 프로그래밍 (imperative programming)의 전제에 의한 가정이었다고 볼 수 있습니다. 이것은 지극히 일반적인 개념으로서, 연산 작업을 별개의 기계적 수단의 일부로서 묘사하기 위한 시도라고 할 수 있겠습니다. 공식화된 알고리즘의 이러한 개념에 고유한 변수의 값을 설정하는 것은 대입 연산으로 정의할 수 있습니다.

 

지금까지 알고리즘을 구성하는 것에 대한 기초 개념에 대해서 알아보았습니다.

 

 

+ Recent posts