모든 프로그래밍 문제가 알고리즘 문제입니까? [닫은]

나는 Cormen et al.의 “알고리즘 소개”를 좋아한다. 지식을 전달합니다. 한 가지 이유는 모든 것이 프로그래밍 문제와 관련이 있고 책이 특정 프로그래밍 언어로 구현되지 않기 때문입니다. 이 언어 독립성은 일반적인 아이디어에 중점을 둡니다.

제목에 나와있는 것처럼 내 질문은. 이 알고리즘 방식으로 생각하면 모든 해결 가능한 프로그래밍 문제를 해결할 수 있습니다. 어떤 언어, 분야 등? 그렇다면, 논쟁을하고 그렇지 않으면 논쟁을하십시오!

GUI, AI, 그래픽 등으로 많은 복잡한 프로그램을 구현하지 않았습니다 … 그러나 이러한 유형의 문제는 좋은 알고리즘을 생각하는 문제입니까?



답변

“프로그래밍 문제”를 정의하는 방법에 따라 다릅니다.

실제 프로젝트에서 답은 분명 NO입니다. 대부분의 문제는 기술적 인 문제가 아니라 통신 문제, 불명확 한 요구 사항 등입니다.

그런 다음 알고리즘이 필요없는 문제 클래스의 모든 주제가 있습니다. 예를 들어, GUI는 종종 “프로그램”에 대해 간단하지만 실제로 관련된 문제는 그래픽 모양뿐만 아니라 사용성 관점에서 좋은 디자인을 갖는 것입니다.

문제가 그 분야의 특성에 의해 훨씬 더 알고리즘적인 경향이있는 일부 분야가 있습니다. 예를 들어 AI는 알고리즘이 핵심 인 주요 주제입니다. 그래픽은 알고리즘을 많이 사용하지만 “그래픽 프로그래밍”의 의미에 따라 다릅니다.

일반적으로 프로그래밍 방식으로 해결중인 문제가 수학적 표현에 적합한 경우 알고리즘 영역에 들어가는 것입니다. 물론 이것은 거의 모든 것에 대한 수학적 모델을 만들 수 있기 때문에 대략적인 지표입니다. 그러나 대부분의 경우 일반적으로 그렇게 고려하지 않을 것입니다.

최종 예 : 비즈니스 오브젝트에 데이터를 입력 할 수있는 GUI를 작성하는 것이 문제인 경우 수학 공식에 대해서는 많이 생각하지 않습니다. 그러나 문제가 일부 중요도 값을 기반으로 요소를 동적으로 변경하고 재배치하는 GUI를 작성하는 것이라면 수학적 모델과 알고리즘 구현으로 끝날 가능성이 훨씬 큽니다.


답변

프로그래밍 문제는 무엇을 의미합니까?

Wikipedia에 따르면 :

컴퓨터 프로그래밍 (종종 프로그래밍 또는 코딩으로 단축 됨)은 컴퓨터 프로그램의 소스 코드를 설계, 작성, 테스트, 디버깅 및 유지 관리하는 프로세스입니다.

이는 일반적으로 프로그래밍이 코드를 통해 알고리즘을 변환하는 것보다 본질적으로 더 크다는 것을 의미합니다.

예를 들어, 지금 당장 프로그래밍 문제는 단위 테스트를 추가 한 다음 리팩토링하여 레거시 스파게티 소스 코드처리 해야한다는 입니다. 또한 올바른 위치에 주석을 추가하고 이름의 대소 문자를 정규화하는 등의 작업을 수행합니다. 알고리즘과 관련이 없습니다.

같은 방식으로 많은 개발자의 작업은 알고리즘과 관련이 없습니다. 예 : 국제화. 같은 방식으로 많은 애플리케이션 (예 : CRUD)은 소스 코드에서 너무 많은 알고리즘을 사용하지 않습니다 (프레임 워크의 기본 코드에 대해서는 언급하지 않음).

이제 “프로그래밍 문제”에서 “프로그래밍”은 코드를 통한 알고리즘 변환의 동의어입니다. 그렇다면 논리적으로 모든 문제는 알고리즘 문제입니다. A × n = B × nif A = B.


답변

나는 대답이 강조 적으로 없다고 생각한다 . 알고리즘은 훨씬 더 큰 기술 세트에서 빌딩 블록입니다.

CS를 전공하고 AI를 전공했습니다.

적어도 내가 본 것처럼 근본적인 문제 는 정보에 대한 좋은 표현 을 찾는 것이 었습니다 . 이러한 표현은 사람들의 머리 속에있는 지식 구조와 잘 어울리도록 노력해야하며 그들에 대한 조작과 변경의 종류를 촉진해야합니다.

일상적인 프로그래밍의 관점에서 볼 때 이는 기본적인 문제가 현재 상황에 적합한 DSL (Domain-Specific-Language)을 식별하는 것임을 의미합니다. DSL을 작성하는 방법에는 여러 가지가 있습니다. 클래스, 변수 및 메소드가 정의 된 일반 프로그래밍은 실제로 DSL을 작성하는 것입니다. DSL을 사용하면 말할 수없는 것을 말할 수 있습니다 (정신 구조를 코드에 맵핑).

알고리즘도 중요하지만 이야기의 일부일뿐입니다.


답변

원하는 결과를 얻기 위해 일련의 명령을 처방하기 때문에 모든 컴퓨터 프로그램이 알고리즘이라고 말할 수 있다고 가정합니다. 그러나 가장 어려운 문제 중 일부는 프로그램을 컴퓨터에 전달하는 것이 아니라 소프트웨어를 테스트하고 수정하는 사람에게 프로그램을 전달하는 것입니다.

다시 말해, 컴퓨터는 코드가 사람에게 완전히 이해되지 않는지 신경 쓰지 않습니다. 그들은 어느 쪽이든 잘 실행할 것입니다. 문제는 모든 버그가 아픈 엄지 손가락처럼 눈에 띄도록 코드를 명확하게하는 것입니다.

흥미롭게도, 대학에서 알고리즘에 관해 배운 기술적 인 것들은 그 이후로 스스로 배운 것들에 의해 오랫동안 극복되었습니다. 이 시점에서 제 직업에 도움을주기 위해 제 3의 대학 학위를 받으려면 영어 작문으로되어 있습니다.


답변

대부분의 프로그래밍 문제는 실제로 시스템 관리 문제입니다.

그것은 일종의 플립 팬트 답변이지만, 이것이 예상보다 더 자주 사실이라는 것을 알았습니다. 테스트 시스템에서 DNS가 잘못 구성되어 CPU / 메모리 / 포트를 비난하는 오래된 프로세스가 여전히 실행 중이고 프로그램이 잘못된 사용자 ID로 실행되어 오류가 발생하여 실패한 횟수를 알 수 없습니다. 사용 권한, 디스크가 잘못 분할되어 공간이 부족하거나 잘못된 버전의 구성 파일이 설치되었습니다.

알고리즘을 올바르게 얻는 것은 일반적으로 문제의 작은 부분 일뿐입니다. 문제의 나머지 부분은 실제 세계에서 실제 문제를 해결하기 위해 프로그램을 작동시키는 것입니다.


답변

예, 알고리즘 방식으로 생각하면 모든 프로그래밍 문제를 해결할 수 있다고 생각합니다. 결국 알고리즘은 컴퓨터에게 수행 할 작업을 알려주는 일련의 명령 일뿐입니다.

위의 예제 중 일부를 복용

예를 들어, GUI는 종종 “프로그램”에 대해 간단하지만 실제로 관련된 문제는 그래픽 모양뿐만 아니라 사용성 관점에서 좋은 디자인을 갖는 것입니다.

프로그래밍 및 디자인 측면에서 사용자 친화적이고 효율적인 효과적인 GUI 디자인으로 이어지는 패턴 / 규칙을 알 수 있습니다. 이 규칙은 알고리즘이 적용되면 사용자 친화적 GUI를 만드는 데 도움이됩니다. 실제로 GUI에 컨트롤을 배치하는 실제 단계도 알고리즘으로 줄일 수 있습니다

예를 들어, 지금 당장 프로그래밍 문제는 단위 테스트를 추가 한 다음 리팩토링하여 레거시 스파게티 소스 코드를 처리해야한다는 것입니다. 또한 올바른 위치에 주석을 추가하고 이름의 대소 문자를 정규화하는 등의 작업을 수행합니다. 알고리즘과 관련이 없습니다.

그러나 단위 테스트를 추가하는 방식은 다음과 같은 알고리즘으로 설명 할 수 있습니다.

  1. 새로운 단위 테스트 식별
  2. 쓰기 단위 테스트
  3. 대문자 정규화 알고리즘 적용
  4. 댓글 알고리즘 적용

예 : 국제화 이것은 알고리즘 솔루션의 완벽한 예입니다. 가장 간단한 방법으로 사전에서 알려진 단어를 찾고 다른 언어 형식으로 대체합니다. (물론 실제 생활에는 문장과 문맥이 포함되며 알고리즘에는 원어민을 확인하는 단계가 포함될 수 있지만 기본 사항은 적용됩니다)

대부분의 예 답변의 문제점은 사람들이 문제에 대한 자세한 모호한 설명을 명확하게 정의 된 논리 / 규칙 세트로 줄이는 명령 세트 대신 QuickSort, Bubble 정렬 측면에서 알고리즘을 생각하고 있다는 것입니다.