계산 불가능한 비즈니스 문제의 예는 무엇입니까?


17

Turing 머신 (및 Von Neuman 머신)은 자체 정지 문제를 해결할 수 없다는 사실을 받아들이기를 거부하는 동료가 있습니다.

충분한 시간과 돈으로 무엇이든 할 수 있습니다.

그는 또한 이론적 문제를 싫어한다고 주장했다.

우리 분야에서는 그러한 질문에 절대 빠지지 않을 것입니다. 우리는 이론 과학자가 아닌 응용 프로그램 개발자입니다.

그에게 이것을 확신시키는 데 사용할 수있는 계산 상 불가능한 비즈니스 문제의 좋은 예가 있습니까?


11
예를 들어 무언가 불가능하다는 것을 증명할 수는 없습니다. 동료가 "올바른 접근 방식을 찾지 못해 작동하지 않습니다"라고 말합니다. 당신이 할 수있는 최선의 방법은 그에게 증거를 제시하는 것입니다. 그가 그것을 사지 않으면, 그는 정말 바보 또는 바보 또는 둘 다입니다. 다음은 결정 불가능한 문제의 목록입니다. en.wikipedia.org/wiki/List_of_undecidable_problems
Thomas Eding

18
이론가와 엔지니어는 그들과 그녀 사이의 거리를 반으로 반복해서 이동함으로써 소녀와 키스 할 수 있다고 들었습니다. 이론가는 즉시 "불가능하다. 나는 결코 거기에 갈 수 없다"고 말했다. 엔지니어는 "실용적인 목적으로 충분히 가까워 질 것"이라고 말했습니다. 당신은 그 키스를 시도해야합니다.
gbjbaanb

2
@gbjbaanb : NP-hard 문제에 대한 많은 비 최적 솔루션의 훌륭한 설명자이며 이러한 문제가 (실제적으로) 고전적으로 해결할 수 없다는 것을 아는 것이 대체 방법을 찾는 이유 입니다. 일부 문제가 실제로 또는 문자 적으로 해결하기가 불가능하다는 것을 인정하지 않으면 결정 불가능한 기간 후에 "충분한"답변을 제공 할 수있는 불완전한 솔루션을 찾지 못할 것입니다.
Phoshi

3
@Phoshi nope, 요점은 실제 엔지니어링 솔루션에는 문제를 충분히 수용 할 수있는 솔루션 만 있으면된다는 것입니다. 그것을 완벽하게 해결하는 것은 시간과 비용이 들지 않습니다. 예. 몇 개의 노드 이상으로 인해 세일즈맨의 출장 문제는 불가능하지만, 많은 기업들이 여전히 최적의 솔루션을 요구하지 않고 제공합니다. 우리가 완벽을 생산했다면, 아무도 이것을 갖지 못할 것입니다.
gbjbaanb

10
@gbjbaanb : 사실, 그러나 그들이 그 문제를 해결 한 유일한 이유는 먼저 "충분한 시간과 돈으로 무엇이든 할 수 없다"는 것을 인정하고 최적의 솔루션을 쫓는 것을 멈추는 것입니다. 할 수없는 것에 대한 지식 은 종종 할 있는 것에 대한 지식만큼 해결책을 찾는 것만큼이나 중요합니다 .
Phoshi

답변:


11

기술적으로 불가능하지는 않지만 ...

시간 슬롯 사용을 최대화하는 이상적인 일정을 찾는 것을 목표로 자원 예약 . 나는 이전 컴퓨팅 시대 에이 요구 사항이있는 프로젝트에 한 번있었습니다. 나는 그것이 NP-hard라는 것을 깨닫기 전에 잠시 동안 일했습니다.

기술적으로 불가능하지는 않지만 기술적으로 어려운 문제의 다른 예는 여기 에서 찾을 수 있습니다 .

비즈니스 컴퓨팅에서 가장 어려운 계산 문제는 불가능하지 않고 비현실적입니다. 당신의 친구는 옳습니다. 당신이 그들에게 충분한 돈을 던지면 그들 대부분을 해결할 수 있습니다. 그러나 논쟁은 의문이다. 사업 운영의 요점은 돈을 버는 것입니다.

일상적인 연습에서 우리는 튜링 완성도에 대해 모호한 방식으로 이야기합니다. 수학적 원리를 설명하기위한 것이 아니라 기능 완성 프로그램을 제작하기위한 완전한 수단으로서 HTML과 CSS의 부적절 함을 보여줍니다.

마찬가지로, Halting Problem은 이론가들에게 중요하지만 대부분의 비즈니스와 관련이 없습니다.


14
코드의 정적 분석에서 정지 문제가 발생합니다. 이것으로부터 당신은 "여기 코드가 있습니다, 예쁘게 보이도록" "여기 코드가 있습니다, 악성 코드입니까"와 같은 일상적인 문제를 겪을 수 있습니다. 안티 바이러스 회사 및 보안 전문가.

12
유사하게, 정지 문제는 이론가들에게는 중요하지만 대부분의 비즈니스와는 관련이 없습니다. 특정 입력 여부. 우리는 아마도 더 이상 BSOD가 없을 것입니다. 이것이 불가능하기 때문에 소프트웨어 품질 (테스트와 같은)을 보장하기 위해 다른 기술을 사용해야하며 일반 "종료 확인"프로그램을 개발하기 위해 시간과 돈을 투자하는 사람은 없습니다. 이 이론적 결과는 실질적으로 큰 관련이 있다고 생각합니다.
Giorgio

4

다른 사람들은 이것에 대해 언급했지만 내 관점을 제시하는 답변을 쓰려고 노력할 것입니다.

로버트 하비 (Robert Harvey)의 답변과 그의 답변에 대한 의견이 마음에 들었습니다.

이러한 결정 불가능한 문제 (종료와 같은)를 일상적인 방식으로 제시해야한다고 생각합니다. 예를 들어 "이 함수가 항상 값을 반환하는지 확인하는 IDE 도구"입니다.

가르 칠 때 가장 좋아하는 예는 리팩토링 ( 함수 동등성, 또 다른 결정 불가능한 문제 )이었습니다. 나는 물었다 :

멋진 리팩토링 후에 함수 / 프로그램이 동일한 지 어떻게 확인합니까? 물론, 이에 대한 단위 테스트가 있지만 모든 경우를 다루지는 않습니다. 그리고 그들은 지루하게 쓰고 있습니다 ... 그러나 우리는 프로그래머입니다! 이 두 함수가 항상 동일한 결과를 생성하는지 확인하는 프로그램을 작성해야합니다! 왜 쓰려고하지 않습니까?

또는 변형이 귀하의 사례에 더 가깝을 수도 있습니다.

우리는 스펙과 / 또는 컴파일러가 존재하지 않는 고대의 모호한 COBOL 방언으로 작성된이 레거시 코드를 가지고 있습니다. 우리는 프로그램 만 가지고 있습니다. 우리의 전체 사업은 그것에 의존하기 때문에 새로운 Java 코드가 모든 상황에서 정확히 동일하다는 것을 100 % 확신해야합니다. 경영진은 가능한 모든 사례를 확인하고 6-8 주 안에 수행 할 수있는 것으로 추정하는 프로그램을 원합니다. 왜 쓰려고하지 않습니까?

요점은 그러한 프로그램을 작성하는 것이 아닙니다. 또는 요구 사항을 충분히 근사화합니다. 요점은 그것이 직접적인 방법으로 이루어질 수 없다는 것을 깨닫는 것입니다. 우리가 그것을하는 방법을 알아 내려고 노력하는 것을 낭비하지 말고 (가능하지 않다는 것을 깨닫기 위해서만) 인식하십시오. "아! 이것은 결정 불가능하다! 직접 할 수는 없다. 충분히 좋은 근사치로 다른, 더 영리한 방법을 찾아야한다"고 말했다.

인식 할 수 있고 명백하게 간단한 방법으로 문제를 제시 할 방법을 찾아야합니다. 당신은 얼마나 많은 CS 학생들이 그런 프로그램을 곧바로 작성하려고하는지 믿지 않을 것입니다 ... 계산 수업을 받기 전에 :)


두 번째 인용문은 정지 문제를 잘못 불러 오려고 시도합니다. 그러나 COBOL 프로그램이 작동하고 테스트 환경 (필요한 경우 모든 PROD를 vm-clone)에서 실행할 수 있으면 중지 문제가 배제되어 시도 할 수 있습니다. 아마도 프로그램보다는 손으로 할 수 있지만 우리는 모두 똑같이 할 수 있습니다. 필요한 경우 가능한 모든 입력 양식을 트리-비교할 수 있습니다. 대상 프로그램이 중지되기 때문에 트리-종점도 마찬가지입니다.
Joshua

2

우리가 현재 도덕적 질문을 따로 따를 수 있다고 가정하자 :

비즈니스 A는 A1 및 A2의 권한이있는 사람 외에는 통신을 이해할 수있는 사람이없이 위성 사무소 A1과 A2간에 통신 할 수있는 방법을 계약했습니다.

비즈니스 B는 A1과 A2 사이의 모든 통신을 지능적으로 도청하는 방법을 귀하와 계약했습니다.

분명히 둘 다 할 수는 없습니다.

수학이 수행되는 방식 (정확한 수학은 100 년 동안 지속적으로 연구되어 왔음)으로 인해 다음 요구 사항 중 하나를 충족 할 수 없습니다.

(1) : 공격자가 임의의 금액으로 돈을 깰 수없는 암호화 알고리즘을 제공하십시오.

(2) : 적절한 시간에 실행되는 임의의 암호화 알고리즘을위한 암호화 차단 알고리즘을 제공합니다.


1
(3) : 시장에서 당신이 둘 다 시도한 후에도 다른 일자리를 얻지
못함

1

최근 BPMN (Business Process Model and Notation)에 대한 강의를 수강했습니다 . 쉽게 많은과 워크 플로우가 너무 분할 있음이 볼 수있는, 조인 및 루프 (하지만 반드시 신속하게 허무하게 불가능 (대신 XOR-분할의 너무 많은 OR-분할을 사용하는 경우), 이해하고 제어하기 위해, AFAIK).

소프트웨어 산업의 경우 코드 커버리지 분석 에서 "다중 조건 커버리지"의 유사한 문제에 대해서도 마찬가지 입니다.

비즈니스의 경우 갈 길은 문제 공간을 줄이고 복잡한 문제에 더 많은 리소스를 버리지 않는 것입니다. 내 예에서는 N이 상상할 수 없을 정도로 큰 N 개의 가능한 추적 및 결과를 찾기 위해 열심히 노력하는 대신 워크 플로우에 제약 조건을 추가하거나 코드 적용 범위 분석에서 코드를 단순화하십시오.

그 외에도 네트워크 / 그래프 분석에는 해결할 수없는 많은 문제가 있다고 생각합니다 (모든 경로를 반복적으로 걸어 네트워크 토폴로지를 결정하려고 시도하는 등).


0

고전적인 예는 정규식으로 HTML구문 분석하는 것 입니다. 이것은 제한된 HTML 세트에서만 작동 할 수 있지만 다른 Chomsky 문법이 있기 때문에 일반적인 해결책은 불가능합니다 (링크가 명확하기 때문에).

더 일반적으로 어떤 사람들은 (동료와 같은) 철학적으로 생각하기를 좋아하지 않으며, 당신이 마음가짐에서 벗어나는 것을 확신 할 수 없습니다. 그의 첫 번째 요점은 확실히 틀렸지 만 그의 두 번째 요점은 물건을 받기 위해 웹 양식을 코딩하기 위해 이것에 대해 걱정할 필요가 없다고 말하는 것일 수 있습니다. 나는 이것에 대해 동정심을 가지고 있지만 때로는 이론을 알면 직장에서 성배를 찾는 데 헌신하지 않는다는 것을 의미합니다.


-6

아마도 대답은 동료가 정확하다는 것입니다. 튜링을 잘못 이해했거나 여기에 어떻게 적용됩니까?

모든 기계는 유한하기 때문에 '진짜'튜링 기계와 절대 멈추지 않는 프로그램이 없습니다. 간단한 무한 루프를 실행하는 사소한 프로그램은 5 분 또는 50 년 동안 실행될 수 있지만 유한 기계에서는 중지됩니다. '정확히 pi 계산'과 같은 사소한 비 정지 문제도 중단됩니다. 결국 계산은 더 많은 숫자를 저장할 수있는 용량을 초과하기 때문입니다.

튜링 결과는 유한 기계에서 특히 유용한 것을 보장하지 않으므로 퀘스트는 결실이 없습니다. 얼마나 많은 시간과 돈에 집중하고 수학자에게 무한대를 남겨 두는 것이 좋습니다.

당신은 같은 프로그램 { while true: print "running"; print "halted"; }이 반례 라고 생각할 수도 있지만 그렇지 않습니다. 이 프로그램에는 부작용이있어 중단 될 수 있습니다. 부작용을 무시하고이 프로그램이 중단되지 않는다는 공식적인 증거를 고안 할 수 있습니다. 이 질문에서 우리는 중지에 대한 질문을 결정할 수없는 비 정지에 대한 공식적인 증거를 회피하는 프로그램에만 관심이 있습니다. 이것은 그런 프로그램이 아닙니다.

'강한'튜링과 '약한'튜링을 구별하는 데 도움이 될 수 있습니다. 강력한 튜링 기계는 실제로 무한하며 정지하지 않으면 무한한 시간 동안 작동합니다. 우리는 그것들을 만들 수 없습니다.

약한 튜링 기계는 시간과 공간에 제한이 있으며 우리가 만들 수있는 유일한 종류입니다. 우리는 그 한도 내에서 중단되는 것으로 입증 될 수없는 프로그램에 관심이 있습니다. 튜링은 그러한 프로그램이 있지만이를 식별 할 수는 없다고 말합니다. 한계가 충분히 낮 으면 프로그램을 작성하고 한계까지 실행하여 식별 할 수 있습니다.

튜링의 본질은 지름길이 없다는 것입니다. 문제가 계산적으로 실현 가능한지 확신 할 수있는 유일한 방법은 프로그램을 작성하고 실행하여 알아내는 것입니다. 시간과 돈이 충분하면 모든 프로그램을 작성하고 시간이 지남에 따라 프로그램을 실행하고 결과를 산출하는 프로그램 (홀더)을 찾을 수 있습니다. 다른 사람들은 여전히 ​​실행 중입니다. 동료에게 충분한 시간과 돈이 있습니까?

그러나이 논쟁은 한계에 관한 것입니다. Turing과 NP complete는 예산의 규모 나 일정에 관계없이 특정 예산 내에서 또는 일정에 따라 특정 종류의 문제를 해결할 수 없음을 알려줍니다. 이런 종류의 문제의 예는 풍부합니다. 수백 개의 주소로 배달하기위한 경로 최적화 트럭의 포장 상자; 큰 프로그램에서 버그 찾기!

따라서 동료에게 예산과 일정을 요청하고 해당 예산이나 일정 내에서 해결할 수없는 문제를 일으킬 수 있다고 약속하십시오. 그 약속은 지키기 매우 쉬울 것입니다.


2
중지 문제의 본질은 무한한 시간과 돈으로도 계산할 수없는 문제의 클래스가 있다는 것입니다. 그것이 내 동료가 받아들이기를 거부하는 것입니다.
Jesan Fafon

그런 다음 우리는 동의하지 않습니다. 내 답변을 편집했지만 본질적으로 메시지는 동일합니다. 제기 된 귀하의 질문에는 대답이 없지만 (또는 당신이 좋아하지 않는) 질문의 근본은 실제 문제이며 실제적인 요점입니다. 이 논쟁에서 이기고 싶다면 다소 변화를 겪어야 할 것입니다. 그리고 저는 그 일을하는 데 도움을 주려고 노력했습니다. [이와 같은 질문에 다시 답하지 말라고 상기시켜주십시오. – 부정적인 표는
반갑습니다

2
@simon : 반복 할 위험이 있지만 Turing 컴플리트 컴퓨터가 없기 때문에 무한한 시간이 걸리는 프로그램은 없으며 단지 근사치입니다. 실제로 프로그램을 실행하는 것보다 빠른 방법으로 임의의 시간에 임의의 프로그램이 완료된다는 것을 증명할 수는 없습니다. 실제로 '무한'이라는 단어가 포함 된 문장은 말이되지 않을 위험이 있습니다.
david.pfx

3
while True: print "doing stuff"; print "Finished"; 그것은 마치기까지 무한한 시간이 걸리는 프로그램의 예입니다. 완료하는데 많은 시간이 걸리는 무한한 다른 프로그램이 있습니다. 우리는 정기적으로 목적을 달성하는 데 무한한 시간이 걸리는 프로그램을 만듭니다. 이를 '장기 실행 프로세스'라고합니다. 대부분의 동적 웹 사이트가 그 중 하나입니다.
Singletoned

2
요점은 분명히 무한대의 컴퓨터 프로그램이 있다는 것입니다 .Touring machine에 프로그래밍하면 자체 스팀으로 멈추지 않을 것입니다 (우리는 중단을 누르고 전원을 끌 것입니다). 멈추지 않고 실행하십시오. 정지 문제의 본질은 실질적으로 또는 이론적으로 정지하지 않는 프로그램을 알고리즘 적으로 결정하는 방법이 없다는 것입니다.
Alistair Mackenzie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.