프로그램에는 알고리즘이 포함되어 있지만 정의를 참조하면 알고리즘은 특정 작업을 수행하고 컴퓨터 프로그램은 컴퓨터로 (일부) 작업을 수행하기위한 일련의 명령이기도합니다.

그러면 프로그램이 알고리즘과 다른 점은 무엇입니까? 그것은 알고리즘의 한 유형입니까?

사실 알고리즘과 컴퓨터 프로그램에 대한 공식적인 정의를 찾아서 서로 구분하거나 프로그램 내에서 알고리즘을 식별 할 수 있습니다.

업데이트 : 위키 백과에서 비공식적 인 정의 (최소한 구문 론적으로)에 의해 모든 프로그램이 알고리즘이라는 것을 발견했습니다.

비공식적 인 정의는 “작업 순서를 정확하게 정의하는 일련의 규칙”일 수 있으며, 모든 컴퓨터 프로그램을 포함합니다 , 숫자 계산을 수행하지 않는 프로그램을 포함합니다. 일반적으로 프로그램은 결국 중지되는 경우에만 알고리즘입니다.

답변

이 질문이 나올 때 이전에 제공 한 것과 동일한 답변을 드리겠습니다.

먼저, 작성 당시 “알고리즘”에 대한 좋은 형식적 정의가 없다는 것을 이해하십시오. 여기서 핵심 단어는 “형식적”입니다.

하지만 똑똑한 사람들이 작업하고 있습니다.

우리가 알고있는 것은 “알고리즘”이 무엇이든간에 “수학적 함수”와 “컴퓨터 프로그램”사이에 위치한다는 것입니다.

수학적 함수는 입력에서 출력으로의 매핑에 대한 공식적인 개념입니다. 예를 들어, “정렬”은 주문 가능한 항목 시퀀스와 동일한 유형의 주문 가능한 항목 시퀀스 간의 매핑이며 각 시퀀스를 주문 된 시퀀스에 매핑합니다.이 함수는 서로 다른 알고리즘 (예 : 병합 정렬, 힙 정렬)을 사용하여 구현할 수 있습니다. 서로 다른 프로그램을 사용하여 구현되었습니다 (동일한 프로그래밍 언어를 사용하더라도).

그래서 “알고리즘”이 무엇인지에 대한 가장 좋은 핸들은 프로그램에 대한 일종의 동등성 클래스라는 것입니다. 프로그램은 “본질적으로 동일한”작업을 수행하는 경우 동일합니다. 동일한 알고리즘을 구현하는 두 프로그램은 동일한 함수를 계산해야하지만 그 반대는 사실이 아닙니다.

마찬가지로, 두 알고리즘이 동일한 수학적 함수를 계산하는 경우 동일한 알고리즘간에 동등 클래스가 있습니다. .

이 모든 것에서 어려운 부분은 “본질적으로 동일한 것”이 의미하는 바를 포착하려는 것입니다.

포함해야 할 몇 가지 명백한 사항이 있습니다. 예를 들어, 변수 이름 변경에 의해서만 다른 두 프로그램은 본질적으로 동일합니다. 대부분의 프로그래밍 언어 모델에는 “동등성”이라는 기본 개념 (예 : 람다 미적분의 베타 감소 및 에타 변환)이 있으므로이를 던져야합니다.

어떤 등가 관계를 선택하든 이것은 우리에게 몇 가지 구조를 제공합니다. . 알고리즘은 프로그램의 몫 범주라는 사실로 인해 범주를 형성합니다. 흥미로운 등가 관계는 흥미로운 범주 구조를 생성하는 것으로 알려져 있습니다. 예를 들어, 기본 재귀 알고리즘의 범주는 범주 범주의 범용 객체입니다. 이와 같은 흥미로운 구조를 볼 때마다이 문의 라인이 유용 할 것입니다.

댓글

  • 정확한 답변에 감사드립니다. 또 다른 질문입니다. 어떤 프로그램을 고려하더라도 그것이 무엇을하는지에 관계없이 여전히 입력을 받고 몇 가지 지침을 따르며 실행될 때 몇 가지 결과를 제공합니다. 심지어 ‘ 아무 문제도 해결하지 못할 수도 있지만 (우리가 부르는대로) 여전히 매핑입니다. 알고있는 알고리즘 일 수 있나요? 어떤 프로그램을 의미하나요?
  • ‘ 정확히 읽는다면 ‘ ” 알고리즘 “의 공식 정의가 유용한 “. 형식화가 불가능하기 때문에 ” 아니요 “라고 말하고 싶습니다. ‘ 개념입니다.
  • 죄송합니다! 제 영어 실력이 좋지 않다면 무엇을 ” 아니요 “라고하십니까? 프로그램의 유용성을 공식화하는 것이 ‘ 불가능하며 정의상 어떤 프로그램이 알고리즘이라는 것을 인정하십니까? 아니면 알고리즘 외에 유용성을 고려하는 것이 ‘ 필요하다고 말씀하십니까?
  • ‘ ” 알고리즘 “는 ” 유용한 “가 ‘ 할 수 있으므로 유용해야합니다. 공식적으로 정의 할 수 없습니다.
  • 귀하의 답변은이 대화 목록 +1에서 가장 유용합니다. ” 본질적으로 똑같은 “, 당신은 ” 의미 상 동등 함 “. 또한 모든 프로그램은 일부 입력을 일부 출력에 매핑하는 구현이기 때문에 모든 프로그램은 본질적으로 알고리즘이라고 생각합니다. 말씀 하셨듯이 모든 것은 관점에 따라 다릅니다.

답변

궁극적으로 차이점은 관점 중 하나입니다. . 프로그램은 프로그램입니다. 프로그래밍 언어 나 기계 수준 명령과 같은 일부 언어로 된 일련의 명령문입니다. 알고리즘은 일반적으로 기계 명령이나 프로그래밍 언어 명령문보다 높은 수준에서 설명되지만 수준이 다소 유연합니다. 예를 들어, 어떤 상황에서 “배열을 정렬 한 다음 $ k $ th 요소를보십시오”는 배열에서 $ k $ th 가장 큰 객체를 찾는 알고리즘에 대한 완벽한 설명입니다. 다른 상황에서는 정렬이 수행되는 방식에 대해 훨씬 더 자세히 지정하고 싶을 수 있습니다.

말했듯이 알고리즘은 “계산 또는 기타 문제에서 따라야 할 프로세스 또는 규칙 집합”과 같습니다. -특히 컴퓨터에 의한 작업 해결. ” 따라서 말 그대로 모든 프로그램은 하나의 알고리즘 입니다 . 하지만 일반적으로 알고리즘을 구현 하는 프로그램에 대해 이야기합니다. 일반적으로 알고리즘을 설명 할 때 유능한 프로그래머가 자신이 선택한 언어로 구현할 수 있다고 가정하여 정확히 어떻게 구현되는지에 대한 낮은 수준의 세부 사항을 피합니다.

댓글

  • 알고리즘의 정확성은 수학 개념, 람다-미적분 또는 튜링 기계와 관련이 있다고 생각합니다. ‘ 그게 뭔지 모릅니다. 추상화 언어? 모호한 문장이 많은 수학 또는 자연어
  • @Ahmad Algorithm은 비공식적 인 개념입니다. 공식적인 정의가 없습니다. 어떤 의미에서는 ‘ 수학적 증명과 같으며 형식 증명 시스템의 형식 증명과 다릅니다. 우리는 비공식 증명이 선택된 (충분히 강력한) 형식 증명 시스템에서 형식 증명으로 ” 다발로 ” 될 수 있다고 믿습니다. 알고리즘은 모든 (튜링 완료) 프로그래밍 언어로 완전히 구현 될 수 있습니다.

답변

튜링의 알고리즘 -완전한 사고 방식은 일반적으로 입력과 출력에 의해 지정됩니다. 실제 프로그램은 더 많은 일을합니다.

  • 사용자와 통신하고
  • 다른 시스템과 통신하고
  • 환경에 반응하며
  • 종료하지 않습니다. 여전히 유용합니다.

등. 이러한 것들은 일반적으로 알고리즘이나 계산 이론에서 고려되지 않지만 대부분의 프로그램에서 필수적입니다.

댓글

  • 이것은 매우 좋은 점입니다. 하지만 ” 일반적으로 입력을 출력에 매핑하는 수단으로 지정되는 “와 같은 것을 의미합니까? 입력 및 출력을 지정하는 것만으로는 ‘ 충분하지 않습니다. 예를 들어 mergesort와 quicksort는 모든 입력에서 동일한 출력을 생성하지만 고려하지 않습니다. ‘ 동일한 알고리즘이어야합니다.
  • @DavidRicherby PL 의미에서 사양을 생각하고있었습니다. ‘ 다른 것을 지정하지 않으므로 알고리즘이 다른 작업을 수행하지 않을 수 있습니다. 물론 구체적인 알고리즘을 설명하기 위해서는 사양 이상의 것을 제공해야합니다.
  • 좋은 점이지만 결국 어떤 프로그램이 알고리즘이라는 것을 인정한다면 저는 ‘ 당신이 언급 한 문제가 알고리즘에 대해 어떻게 측정되는지 모릅니다. AI 주제일까요?!
  • 누가 인정하고 그 이유는 무엇입니까? 여기서 측정이란 무엇을 의미합니까? (그리고 저는 확실히 ‘ 여기에서 AI 각도를 보지 못합니다.)
  • @Raphael 인정할 수 있습니다 (구문을 보면 모든 프로그램이 비슷해 보입니다. 그것들은 명령의 시퀀스이거나 입력과 출력의 매핑입니다), 저는 ‘ 프로그램의 다른 기능 (당신이 언급 한 것)이 그 정의에서 어떻게 추출 될 수 있는지 모릅니다. 예를 들어 빠른 정렬과 MATLAB 또는 Windows Media Player의 차이점 !!

Answer

  • 알고리즘은 특정 문제를 해결하기위한 체계적인 접근 방식입니다.

  • 프로그램은 컴퓨터가 따라야 할 일련의 지침입니다.

따라서 프로그램은 문제를 해결할 필요조차 없습니다.저는 우리 모두가 해결 한 것보다 더 많은 문제를 일으킨 여러 프로그램을 생각할 수 있다고 확신합니다. 프로그램은 여러 알고리즘의 구현이 될 수도 있고 여러 프로그램을 함께 패치하여 알고리즘을 구현할 수도 있습니다. 프로그램에는 알고리즘이 없을 수도 있습니다. 예를 들어 단순히 종료되는 빈 프로그램 또는 Hello World는 알고리즘이없는 프로그램으로 간주 될 수 있습니다.

알고리즘은 특정 문제를 해결하므로 특정 전체 개념에 초점을 맞 춥니 다. 따라서 알고리즘은 한 세트의 관련 정보를 다른 파생 정보 세트로 처리하는 추상적 인 단계를 제공합니다. 프로그램은 구성 요소가 개념적으로 전혀 관련 될 필요가 없습니다. 예를 들어, 프로그램은 이스터 에그를 가질 수 있지만 알고리즘이라고 적절하게 불리는 것은 그렇지 않아야합니다. 프로그램에는 바이러스 나 트로이 목마가 숨어있을 수 있지만 알고리즘에는 없습니다. 알고리즘이 여기에 도달 할 수있는 가장 가까운 방법은 암호화 알고리즘의 백도어와 같은 것입니다. 여기서 계획된 결함은 알고리즘에 의해 설정된 정보 관계의 일부입니다.

그리고 마지막으로 프로그램은 그대로입니다. 컴퓨터 프로그램의 줄임말로, tautologically 컴퓨터가 필요합니다. 알고리즘은 그렇지 않습니다. 셔츠, 바지, 양말을 세탁물에서 분리하기 전에 체계적으로 분리하면 이것이 알고리즘입니다. 관련 입력 및 출력을 처리하고 순서도에 설명 할 수 있으며 효율성 측면에서 계산 가능한 결과를 가져옵니다 (예 : 일치하는 양말을 찾기 위해 비교해야하는 의류 수).

답변

알고리즘은 개념 또는 아이디어입니다. 문제를 해결하기위한 공식적인 접근 방식입니다. 알고리즘은 다양한 프로그래밍 언어로 표현하거나 구현할 수 있습니다 (일반적으로 거의 모든 언어가 모든 알고리즘을 구현할 수 있음). 몇 가지 예를 보려면 Wikipedia의 정렬 알고리즘 을 읽어야합니다.

컴퓨터 프로그램은 특정 프로그래밍 언어로 된 특정 명령 시퀀스입니다. . 프로그램에는 여러 알고리즘의 구현이 포함될 수 있습니다. Excel은 프로그램이지만 정렬 기능은 알고리즘의 표현입니다.

답변

알고리즘은 특정 문제 또는 문제 클래스를 해결하기 위해 수행되는 자체 포함 된 단계별 작업 집합입니다.

컴퓨터 프로그램은 일련의 특정 프로그래밍 언어의 규칙을 준수하고 컴퓨터로 지정된 작업을 수행하도록 작성된 명령입니다.

알고리즘은 일반적이며 다음으로 번역되어야합니다. 특정 프로그래밍 언어 (구현 됨).

코멘트

  • 그러나 문제의 요점은 프로그램 (소스 코드 또는 컴파일 된 바이너리 ) ” 특정 문제 또는 문제 클래스를 해결하기 위해 수행 할 자체 포함 된 단계별 작업 집합입니다. ”
  • 하지만 ‘ 아닙니다. 프로그램은 ose 작업, 그러나 그것들의 구현 : 특정 상황에서 작업을 실행 하는 것. 예 : Unix sort 유틸리티는 정렬 알고리즘이 아니라 정렬 알고리즘을 사용 합니다.

답변

알고리즘은 단계별 접근 방식으로 특정 문제에 대한 아이디어 또는 솔루션을 표현합니다. 컴퓨터 시스템이 아닌 문제 해결 및 사람이 이해할 수있는 접근 방식입니다.

프로그램은 컴퓨터 시스템으로 문제를 해결하기 위해 구현 된 단계별 지침입니다. 프로그래머뿐만 아니라 컴퓨터도 이해할 수 있어야합니다.

댓글

답변

여기에있는 다른 답변은 중요한 점을 놓친 것 같습니다. 내가 배운 “알고리즘”의 정의에는 절차가 모든 입력에서 중지 되어야한다는 요구 사항이 포함되었습니다. 당연히 “프로그램”은 “알고리즘”보다 광범위한 프로 시저 클래스가됩니다. 일부 프로그램은 모든 입력에서 중지되고 다른 프로그램은 중지하지 않기 때문입니다.

댓글

  • 이것은 보편적이지 않습니다. 제가 배운 정의에는 ‘ 그 요구 사항이 포함되어 있지 않습니다.

답변

다음은 알고리즘과 프로그램 사이에 선을 그리는 몇 가지 방법입니다.

의미있는 목적

프로그램은 목적을 가지고 작성되며 목표를 달성하려는 시도를 나타냅니다. 골. 알고리즘은 목표를 달성하기위한 도구로 볼 수 있습니다.

예 : 스크루 드라이버는 스크루의 상태를 수정하는 알고리즘이지만 스크루 드라이버 자체는이를 수행 할 목적이 없습니다.목적은 선반을 세우는 것과 같이 프로그램을 관리하는 드라이버 운영자의 머리에 있습니다.

비즈니스 로직

이 점은 프로그램의 목적과 밀접한 관련이 있습니다. 프로그램은 목적을 가지고 있기 때문에 필연적으로 특정 날짜, 측정, 기술, 이름 등과 같은 실제 세계의 일부를 포함합니다.

반면 알고리즘은 비즈니스 논리 나 실제 세계의 일부를 포함하지 않고 특정 값은 변수에서 작동합니다.

예 : 이러한 의미에서 추상적이고 변수에 대해 작동하는 f(x) = x^2와 같은 수학 함수를 정확한 값 (참조 용으로 적어도 하나)을 포함하는 요리 레시피와 비교할 수 있습니다.

결과

이 점은 프로그램의 비즈니스 로직과 밀접한 관련이 있습니다. 웹 브라우저 사용자와 같은 에이전트는 알고리즘의 결과가 아닌 프로그램의 결과를 소비합니다.

예 : 요리 레시피의 소비자는 휘핑 크림이나 오븐 가열의 결과가 아닌 케이크를 소비합니다.

댓글

  • 아마도 다음과 같이 말하는 것이 좋습니다. 드라이버가 ‘ 나사를 돌릴 의도가 없습니까? 일상적인 영어에서는 스크루 드라이버가 나사를 돌리는 목적이 있다 라고 말할 것입니다. 나사를 돌리는 것이 설계된 것과 똑같습니다.
  • 또한 I ‘ ” 비즈니스 로직 “의 의미를 잘 모르겠습니다 (많은 프로그램에서 할 일이 없습니다. 비즈니스와 함께) 또는 알고리즘 “에 비즈니스 로직이나 실제 세계의 일부가 포함되어 있지 않다고 말함으로써 “. 예를 들어 정점과 가장자리가 아닌 마을과 도로 측면에서 최단 경로 알고리즘을 완벽하게 표현할 수 있습니다. ‘ 알고리즘이 ” 실제 세계의 일부를 포함하지 않습니다. ” ?
  • @DavidRicherby, 당신 말이 맞습니다. 제 표현이 모호합니다. 내가 의미하는 것은 의미있는 목적입니다. 나사를 돌려 나사를 돌리는 것은 사용되지 않는 배열을 분류하는 것만큼이나 의미가 없습니다. 비즈니스 로직이란 유틸리티 로직과 기술 스택 보일러 플레이트를 제외한 모든 프로그램 로직을 의미합니다. 즉, 프로그램의 목적을 실제로 구현하는 모든 로직, 즉 케이크를 굽는 비즈니스 로직은 재료를 혼합하고 베이킹하며 혼합 또는 베이킹 학습을 포함하지 않습니다. 이 경우 재사용되는 유틸리티 로직입니다. 물리적 세계. 반면 알고리즘은 순전히 수학적 개념 일 수 있습니다.

답변

I 다른 답변이 선두를 차지하기에 충분하다고 확신하지만 여기에 “알고리즘과 프로그램의 차이점을 보는 방법이 있습니다.

  • 알고리즘은 문제를 해결하기 위해 따라야하는 단계 (기계 독립적)로 구성됩니다.

  • 프로그램은 알고리즘을 실행하기위한 특정 유형의 기계에 대한 명령어 세트입니다 .

예 :

다음 단계가있는 알고리즘이 있다고 가정 해 보겠습니다. 다른 단계를 수행하기 전에 특정 장소에 도달합니다. 이제 도달 단계가 수행되는 방법은 정확히 정의되어 있지 않습니다. 걷거나 뛰거나 버스를 타도록 선택할 수 있지만 구현 방법에 따라 다릅니다. (당신의 음식물입니다 램).

알고리즘이 프로그램의 추상화라고 말할 수 있습니다. 즉, 정확한 세부 정보가 누락되었지만 작업을 수행 할 계획을 제시합니다. .

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다