알고리즘이란 무엇입니까?


12

알고리즘이 의미하는 것과 같이 알고리즘이 정확히 무엇입니까? 내가 이해하는 단어는 특정 언어 나 디자인 패턴에 국한된 것이 아니라 가장 기본적인 원칙 중 하나라는 것입니다.

내가 이해하고있는 "옵션"중 하나는 의사 코드의 목록으로 작성 될 수있는 무언가를 수행하는 방법을 의미한다는 것입니다.

더 복잡한 코드를 작성할 때 수행해야 할 작업과 수행 방법 및 프로그래밍 언어가 아닌 방법으로 코드를 작성하십시오. 그것이 좋은 방법입니까, 알고리즘과 관련이 있습니까?

(특별한 문제 / 언어에 관한 것이 아니기 때문에 여기에 질문하고 싶었습니다. 그리고 여기에 대다수의 사람들이 '왜'를 알고 있거나 적어도 여기에 대한 답변이 Stackoverflow가 아니라 더 자세하다는 느낌이 들었습니다. 다른 곳에서 물어봐야한다면 미안합니다.)



1
@ Apalala : 나는 그 제한이 적용되지 않는다고 생각합니다.
Josh K

2
@Apalala : 알려지지 않은 유한 .
Josh K

2
@Jonathan : "내가 찾아봐야 할 단어"? 어떤 단어? 구체적으로 작성 하십시오 . 이 사이트는 마술이 아닙니다. 우리는 당신을 모른다. 우리는 당신이 무엇을 읽었는지 모른다. 우리는 당신을 혼란스럽게 생각하지 않습니다. 제발 특정 .
S.Lott

1
@Apalala : "Finite"는 "바운드"를 의미합니다. 알고리즘은 언젠가는 중지되도록 보장됩니다. 종료를 예측할 수있는 방법이있을 때 유한성을 증명하는 것이 훨씬 쉽습니다. 따라서 알고리즘은 예측 가능한 경향이 있지만 예측 가능성은 일반적인 알고리즘 정의에 있지 않습니다.
David Thornley

답변:


19

알고리즘은 잘 정의 된 종료 상태에서 종료되는 함수를 계산 (또는 프로 시저 실행)하기위한 잘 정의 된 유한 명령 시퀀스입니다.


1
+1. "Finite, Well-Defined and Effective"는 Wikipedia 항목의 세 가지 기준입니다. 여기에도 세 가지가 있습니다.
S.Lott

@ Jörg가 인용 한 비디오를 보도록 설정되었지만 현재의 관점은 단계 만 유한해야한다는 것입니다. 자원 (시간 포함)이 제한되지 않은 경우 프로시 저는 알고리즘이 아닌 다른 것으로 호출하거나 레이블을 지정할 수 있습니다 .
Apalala

@Apalala-나는 교과서를 다시 살펴 보았고 그 어느 곳에서도 그 제한을 보지 못했습니다. 그것은을 위해있을 가능성이 특정 데이터 세트 또는 입력 알고리즘이 (끝없는 루프에 박히 수있는 루트를 찾기위한 뉴턴 - 랩슨 방법과 같은 알고리즘)을 종료하지 않을 수 있습니다,하지만 알고리즘이 아닌 알고리즘을하지 않습니다.
John Bode

@John Oscillations는 Newton-Raphson에서 일상적으로 감지 될 수 있습니다.
Apalala

1
@Apalala : 알고리즘보다 프로그램 의 정의와 비슷합니다 . 이산 단계에 대한 아이디어는 튜링 머신, 레지스터 머신, 랜덤 액세스 머신 및 실제 실제 컴퓨터에 물론 거의 모든 프로그래밍 언어로, 심지어 묵시적으로 묵시적으로도 존재합니다. 그러나 이는 알고리즘에 내재되어 있지 않은 임의의 제한 사항입니다 . 아날로그 알고리즘은, 예를 들면 수행 하지 합니다 (즉, 실제로 이산 단계를 정의 하는 아날로그 알고리즘), 이들은 실제로 아날로그 컴퓨터로 구현 될 수있다.
Jörg W Mittag

15

이것은 실제로 매우 흥미로운 질문이며, 실제로 여전히 공개적인 연구 질문입니다.

Algorithm Theory의 거인 중 하나 인 Yuri Gurevich는 현재 Microsoft 커뮤니티 웹 사이트 Channel9에서 비디오 강의 시리즈를 진행하고 있습니다.

보시다시피 귀하의 질문은 실제로 두 번째 강의의 제목입니다. 그러나 세 가지를 모두 볼 것을 강력히 제안합니다.

특히 첫 번째 것은 여기의 다른 답변들 대부분에 주어진 거의 모든 정의를 무효화하는 두 가지 알고리즘 예제를 포함합니다.


2
링크 주셔서 감사합니다. 텍스트 정의에서 첫 번째 비디오와 함께 제공되는 알고리즘 정의의 일부인 "결국 최종 종료 상태에서 종료"를 확인할 수 있습니다. 종료는 알고리즘 정의의 필수 부분입니다. 이것이 운영 체제와 비 종료 서버가 알고리즘이 아닌 이유입니다.
LIProf

4

알고리즘은 좋은 요리법과 같습니다 . 일부 입력, 잘 정의 된 중간 단계가 있으며 최종 결과를 얻습니다.

프로그래밍에 적용하면 특정 문제를 해결하는 데 필요한 단계에 대한 명확한 설명입니다. 선택한 프로그래밍 언어로 적을 수있는 것은 알고리즘으로 볼 수 있지만 일반적으로이 용어는 정렬 또는 검색과 같은 일반적인 논리적 또는 수학 작업에만 사용됩니다.


반드시 최종 결과를 제공하지는 않는 많은 알고리즘이 있습니다. 예를 들어, 운영 체제 또는 웹 서버는 최종 결과를 제공하는 것이 일반적으로 버그로 간주되는 알고리즘입니다.
Jörg W Mittag

@ JörgWMittag 그러나 OS 또는 웹 서버는 "알고리즘"입니까? 나는 그들이 알고리즘을 사용하지 않고 도메인의 하위 문제를 해결할 수 있다고 생각합니다. 어쨌든 그들은 반드시 최종 결과가 필요합니다. 그러나 알고리즘이 아닌 부분과 전체적으로는 그렇지 않습니다. t 알고리즘. (다른 의견에서 말했듯이 OS와 웹 서버는 프로그램 이지만 반드시 알고리즘 은 아닙니다 ).
Andres F.

2

알고리즘은 문제 해결에 사용되는 일련의 규칙 또는 프로세스입니다 (계산 중). 기본적으로 문제가 있으며 솔루션을 원하며이 솔루션의 프로세스는 알고리즘입니다. 알고리즘에는 솔루션에 도달하기위한 유한 한 규칙 / 프로세스 세트가 있습니다.

Edsger W. Dijkstra 와 같은 경우 종이에 알고리즘을 작성하고 알고리즘에 만족할 때까지 종이에 알고리즘을 연습 / 정의합니다. 그렇지 않으면 (특히 문서를 작성할 때) 흐름도 는 알고리즘 / 프로세스의 흐름을 다이어그램으로 표현하는 데 사용됩니다. 이를 통해 다른 사람들이 순서도를 비판하고 필요한 프로그래밍 언어가 무엇인지 걱정할 필요없이 개선 할 수 있습니다.

그 질문에 답이되는지 모르겠습니다.


"정렬되지 않음"을 의미하기 때문에 단어 세트가 마음에 들지 않습니다. 나는 수학 영역에 머물 "순서"또는 이벤트 튜플을 선호하는 것
BenjaminB

@ Ubiquité, Set가 반드시 "주문되지 않음"을 의미하는 것은 아닙니다. 원하는 순서대로 세트를 분류 할 수 있습니다 (예 : 임의 순서). 그럼에도 불구하고 "set"이라는 단어에 대한 사람들의 해석으로 인해 공감대가 필요하지 않습니다. 또한 세트의 그룹화 인 복합 세트를 가질 수 있으며 이는 알고리즘의 일부이기도합니다. 따라서 문제에 대한 알고리즘 솔루션으로 적절하게 사용되는 한 "세트"는 무엇이든 될 수 있습니다.
Buhake Sindi

나는 공감하지 않았다!
BenjaminB

미안, 난 당신을 downvote에 비난하지 않았습니다. downvoter는 downvote의 이유를 명시 적으로 제공해야합니다.
Buhake Sindi

1

알고리즘 : 1) 모호하지 않고 2) 효과적으로 계산할 수있는 잘 정돈 된 작업 집합으로, 처음부터 시작하여 작업을 실행하면 한정된 수의 작업 후에 결과가 생성됩니다.


카운터 예 : 운영 체제. 그것은 결과를 생성하지 않습니다 모두에서 일반적으로 버그로 간주되는 사실.
Jörg W Mittag

@ Jörg, OS는 많은 결과를 종합하여 전체적으로 애플리케이션에 시스템 서비스를 제공 한 결과를 산출합니다.
ThomasMcLeod

@ JörgWMittag 내가 당신에게 다른 의견에서 말했듯이, 관찰에 대한 결론은 운영 체제가 실제로 알고리즘이 아니라는 것입니다.)
Andres F.

1

알고리즘 매우 간단하고 효율적인 방식으로 문제를 해결하기 위해 순차적 단계 (이 단계는 계산, 데이터 처리 및 추론 작업 일 수 있음)의 조합입니다.

유한 한 공간과 시간 내에 표현할 수 있도록 가장 효율적으로 설계되었습니다. 모든 프로그래밍 언어로 구현할 수 있습니다.

알고리즘의 속성 : 다음은 알고리즘의 주요 속성입니다.

알고리즘은 고유 한 이름을 가져야합니다. 명시 적으로 정의 된 입력 및 출력 세트를 가져야합니다. 모호하지 않은 연산으로 알고리즘이 순차적으로 정렬되어야합니다. 엔드 포인트가 있어야합니다. 즉, 한정된 시간 안에 정지됩니다. 알고리즘 설계 및 분석에 대해 알아 보려면 여기를 클릭하십시오


0

용어를 사용하여 특정 문제를 해결하기 위해 수식을 설명합니다. 수식은 반드시 수학으로 작성하거나 방법과 1 : 1 관계를 가질 필요는 없습니다. 학교 알고리즘과 데이터 구조는 밀접한 관련이 있으며 수학 공식으로 작성되거나 증명을 사용하여 입증 될 수 있습니다.


0

알고리즘은 컴퓨터 프로그램의 추상화이며, 제한된 수의 단계로 잘 정의 된 작업을 수행하기위한 일련의 명령어로 구성됩니다. 유한) 작업 자체. 전체적으로 알려진 비 알고리즘 인 (올바른) 프로그램이 있지만 모두 알고리즘 패턴을 일부 패턴으로 반복하여 작동합니다. (종료 상태가 알려지지 않은 프로그램이 더 흥미롭지 만 대부분의 프로그래머는 실제로 이러한 것을 의도적으로 다루지 않습니다.


0

IMO 아무도 확실히 알지 못한다 :) 나는 용어가, 수학 계산 기능에만 적용 본 적이 어떤 입력을 받아 출력을 생성하고, 기능면 무엇이든 그것을 조작의 입력 및 수행 어떤 종류의 걸립니다.

다음 중 일부 또는 전부가 알고리즘이라고 생각하십니까?

  1. 20 년 동안의 대출 금리를 계산하는 기능
  2. 모든 정보가 대출 신청에 입력되었는지 확인하는 비즈니스 로직
  3. finder고객 객체 데이터베이스에 쿼리 기능
  4. 데이터 입력을 정리하고 형식을 지정하는 "도우미"기능
  5. XML 파일을 구문 분석하고 데이터를 비즈니스 오브젝트에 맵핑하는 기능
  6. 입력을 받아서 텍스트 파일에 쓰는 클래스

0

알고리즘은 본질적으로 추상적 인 작업의 계산 또는 실행을위한 아이디어, 방법, 기술, "스마트"이지만 실제 컴퓨터에서는 실행 되므로 가능한 한 적은 리소스 를 사용하도록 열망 합니다. 이것은 컴퓨터 세계에서 시간과 메모리입니다.


0

알고리즘은 유한 시간 내에 결과를 생성하는 잘 정의 된 일련의 단계입니다.

잘 정의 된 단계 : 정확하게 정의 된 것을 수행하거나 계산할 수있는 것입니다. 단계를 읽으면해야 할 일과 수행 방법을 알 수 있습니다. 특히, 알고있는 프로그래밍 언어로 작성하고 프로그램 조각이 단계와 정확히 일치하는지 확인할 수 있습니다.

순서 : 단계는 지정된 순서대로 실행됩니다. 단계는 데이터 (루프)에 따라 두 번 이상 실행되거나 데이터 (if 문)에 따라 전혀 실행되지 않을 수 있습니다. 병렬 알고리즘은 단계에서 부분적인 순서만을 부과하므로 여기서는 지나치게 단순화하고 있습니다. 시퀀스보다 부분적으로 정렬 된 세트로 묘사하는 것이 더 정확하지만 단어를 조금 더 단순하게 유지하고 싶었습니다. 또한, 부분적으로 주문한 세트를 전체 순서로 쉽게 임베드 할 수 있습니다.

결과 : 종료 상태 또는 값. 미리 예측할 필요는 없지만 어떤 조건을 만족시키는 명확한 끝이어야합니다. 이것은 운영 체제가 알고리즘을 많이 사용하지는 않지만 알고리즘이 아니라는 것을 의미합니다.

유한 : 알고리즘은 적어도 충분히 오래 실행될 수있는 머신에서 언젠가는 중지되도록 보장됩니다. 반드시 예측 가능한 시간에 중지한다고 보장 할 필요는 없으며, 기존 시스템에서 태양이 확장되어 빨간색으로 바뀌기 전에 중지 될 것이라는 보장은 없습니다. 이는 운영 체제가 알고리즘이 아니라는 것을 의미합니다. 이상적으로는 영원히 실행될 것입니다. "프로 시저"라는 단어가 언젠가 멈출 것이라고 확신한다면 알고리즘이 될 무언가를 설명하는 데 사용되었습니다. (알 수없는 시간 안에 멈추는 알고리즘을 가질 수있다. Goldbach의 추측이 수학적으로 거짓이고, 비 구조적인 증거로 입증되었으므로 두 소수의 합이 아닌 짝수> 2가 있다고 가정하자. 짝수를 단순히 테스트 한 알고리즘은 결국 종료됩니다.

알고리즘은 의도적으로 추상적 인 것이므로 "우주의 열사병 이전에 이것을 실제로 실행할 수 있습니까?"와 같은 질문은 고려하지 않습니다. 그들은 대답하기가 너무 어려울 것입니다. 컴퓨터 작동과 관련이 있으면 프로그래밍 언어로 쉽게 구현할 수 있습니다.


-1

일반적인 정의를 제공해야한다면 알고리즘은 명백한 / 브 루트 포스 솔루션보다 더 복잡하고 더 효율적인 컴퓨팅 문제를 해결하기위한 공식이라고 할 수 있습니다.

또한 알고리즘은 특정 소스 코드가 아니라는 점에 유의해야합니다. 계산 자체입니다. 무엇보다도 이는 모든 Turing-complete 언어가 다른 Turing-complete 언어가 구현할 수있는 알고리즘을 구현할 수 있음을 의미합니다.


나는이 답변을 많이 좋아했으며 조금 더 나아가서 (원래 질문과 관련이 없지만) 말할 수 있다고 생각합니다. 모든 알고리즘은 무차별 대입 / 트리 검색 솔루션의 최적화입니다. 그것이 공식적으로 증명 될 수 있는지 궁금했다.
mojuba

-1 "알고리즘"은 잘 정의 된 수학 용어입니다.
Apalala

1
@Apalala 그래서 명확성을 위해 다시 정의하지 못하거나 그 본질을 더 잘 이해하는 데 방해가되는 것은 무엇입니까? "명령 집합"으로서의 알고리즘은 나에게 거의 아무것도 말하지 않습니다.
mojuba

1
@mojuba 나는 용어가 재정의 될지 정말로 신경 쓰지 않지만, 전통적인 정의는 적어도 문제에 접근하는 방법들과 차별화되기 때문에 유용하다고 생각합니다. 알고리즘은 유한 자원을 사용하여 문제를 해결하기위한 레시피입니다 . 그 정의를 바꾸면 예측 가능한 결과는 같은 의미의 다른 단어를 생각해 내야한다는 것입니다. 꿰매다! 계산과 복잡성에 대해 지난 세기에 얻은 모든 지식은 알고리즘 의 사운드 정의없이 사라집니다 !
Apalala

1
무차별 대입 검색은 알고리즘입니다. 일반적으로 예쁜 알고리즘은 아니며 일반적으로 쓸만한 가치가 없습니다. 나는 무차별 대입을 배제하는 데 실제로 유용한 점을 보지 못했으며, 많은 경우에 "무차별 대입보다 더 나은 것"이 실제로 무엇을 의미하는지 명확하지 않습니다.
David Thornley
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.