프로그램 최소화


10

회로 최소화 는 주어진 회로의 크기를 최소화하는 문제입니다. 일반 프로그램과 비슷한 것이 있습니까?

특히 내 질문은-

주어진 프로그램에 대한 명령 수를 최소화하는 알고리즘이 있습니다. 나는 그것이 결정 불가능한 문제라는 것을 알고 있지만 최적의 것을 반환하는 솔루션을 찾고 있지 않습니다.

기존 컴파일러 변환을 적용 하여이 작업을 수행 할 수는 있지만 미리 검색하기 위해 매우 좁은 변환 및 알고리즘 세트를 정의 할 필요가없는 것을 찾고 있습니다.

편집 : 내가 가진 또 다른 질문은 의미 있고 동등한 프로그램의 전체 공간을 탐색 할 수있는 건전하고 완전한 미적분학을 가질 수 있는지 여부입니다.


2
다른 질문에 대한 답은 "미적분학"의 정의에 따라 다릅니다. HALT가 coRE에 있지 않다는 사실 은 대부분의 그러한 정의에 대해 "아니오"라고 답합니다.

fn

답변:


10

제한된 크기의 입력을 가진 프로그램에는 순진한 알고리즘이 있습니다. 길이가 증가하는 순서 (또는 실행 시간, 길이의 제한 함수)에 따라 모든 프로그램을 열거합니다. 프로그램이 원본과 동일하다는 것을 증명할 수 있다면 중지하십시오. 그렇지 않으면 계속 검색하십시오.

이 알고리즘은 소리입니다. 완료 되려면 거부 된 모든 프로그램이 원본과 동일하지 않다는 것을 증명할 수 있어야합니다. 입력 크기에 대한 제한이있는 경우, 일부 기계 모델에서 가능합니다.

프로그램 실행 시간이 입력에 따라 달라지면 최적의 솔루션이 없을 수 있습니다. 예를 들어 최악의 경우를 찾으면 가능한 모든 제한되지 않은 입력을 정량화 할 때 결정 불가능한 동등성과 입력이 제한되는 경우 다루기 어려운 문제가 발생합니다.

10 년 전, Rajeev Joshi, Greg Nelson 및 Keith Randall의“Denali : Goal-Directed Superoptimizer” 는 약 5 개의 기계 명령으로 최적의 프로그램을 찾을 수있었습니다. 더 최근의 결과를 보지 못했습니다.


5
Sussex 대학의 학생들 중 한 명이 슈퍼 최적화를 사용하여 일부 핵심 Java 루틴 (예 : 추가)의 길이를 단축했습니다. 그는이를 위해 엄청난 양의 Amazon EC2 컴퓨팅을 태 웠습니다. 그의 논문은 여기에 있습니다 . 실제로 실행 가능한 프로그램이 아니라 실제로 짧은 프로그램입니다.
Martin Berger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.