알고리즘의 자동 런타임 분석 방법이 있습니까?


10

궁금합니다. 적어도 관련 알고리즘 하위 집합 (분석 할 수있는 알고리즘)에서 작동하는 자동 런타임 분석 방법이 있습니까?

나는 나에게 준 "자동 알고리즘 분석"인터넷 검색 하지만 너무 mathy된다. 내가 이해할 수있는 psuedocode의 간단한 예를 원합니다. 너무 구체적일지도 모르지만, 나는 그만한 가치가 있다고 생각했습니다.


나는 "any"와 "an"사이의 스트레스가 당신이 실제로 무엇을하고 있는지 명확히하는 데 실패합니다. 일부 결정 절차가 특정 알고리즘 B에 바인딩 된 경우 실제 입력이 없으며 응답은 항상 동일합니다. 나는 당신이 묻고 싶은 것은 클래스가 바인딩 / 알려진 '일부 알고리즘 클래스 내의 알고리즘'인지 여부입니다. (편집 : 이것은 내 흠의 의견도 지적되었습니다).
Nicholas Mancuso

2
"an"과 "any"를 사용할 때의 애매 모호함은 정확히 정량 자가 발명 된 이유 입니다.
Nate Eldredge 5

2
관련 부품에 초점을 맞추기 위해 질문을 편집했습니다. 정확히 제로 수학을 사용하여 문제를 정확하게 (지금까지 질문을 지정한 한) 간결하게 표현하는 방법에 주목하십시오. 이제 문제는 여전히 틀린 것입니다. 물론 그러한 알고리즘이 있습니다. 예를 들어, 시간 에서 실행되는 (매우 관련성이있는) 클래스의 알고리즘에서 모든 알고리즘을 분석하는 간단한 알고리즘이 있습니다. 따라서 입력 세트에 약간의 제한 을 두어야 합니다. ( "내가 이해할 수있는 유사 코드에는 간단한 예"가 없을 수도있다.)Θ(nlogn)
Raphael

답변:


12

COSTA 당신이 상상할 수있는대로 인해, 많은 경우에 실패하지만 도구는 바로이 작업을 수행 계산 가능성 문제 . 이것에 관한 많은 논문 이 있습니다. E. Albert, P. Arenas, S. Genaim, G. Puebla, D. Zanardini 의 Java 바이트 코드 비용 분석은 좋은 출발점입니다.

접근 방식은 Javabyte 코드에서 런타임 반복을 유추하여이를 닫힌 형식으로 변환하는 것입니다. 이 도구는 공간 사용 범위도 계산합니다.


8
@Nathvi 나는 당신이 몇 가지 의견에 의해 자극을 받았다는 것을 이해할 수있다. 나는 이것이 실제로 필요하지는 않다는 것에 동의한다. 당신은 수학을 좋아하지 않을 권리가 있지만, 그것 없이는 멀리 갈 수 없을 것입니다.
babou

12

어떤 알고리즘도 주어진 알고리즘의 정지 여부를 결정할 수 없으므로, 특히 어떤 알고리즘도 주어진 알고리즘의 복잡성을 엄격하게 분석 할 수 없습니다.


2
내 질문은 임의의 입력 알고리즘에 관한 것이 아닙니다. 그렇다면 중지 문제로 인해 귀하의 답변이 정확합니다. 내 질문에 "당신은 알고리즘 B를 취한 다음 알고리즘 B의 시간 복잡성을 출력하는 알고리즘 A가 있습니까?"
Nathvi

6
알고리즘 B가 고정 된 경우 알고리즘 A가 있는지 확인하십시오. "O (n)"을 인쇄하거나 B에 해당하는 복잡성 측정을 수행하는 알고리즘 만 있으면 충분합니다. 알고리즘 A에 가능한 입력이 하나만있는 경우, 우리는 하나의 출력 만 필요합니다.
mhum

5
@Nathvi 그것은 또한 나에게 분명하지 않았다-나는 또한 질문을 "다른 알고리즘의 복잡성을 찾는 알고리즘이 있습니까?"라는 것을 이해했지만 여전히 당신의 실제 질문을 이해하지 못합니다 . 공감대를 세는 경우 분명히> 2 명이 그렇게 해석했습니다. 혼란 스러울 경우에는 질문을 편집하는 것이 좋습니다. 그렇지 않으면 질문을 읽는 사람이 아닌이 대화를 읽는 사람 만 귀하의 질문을 이해하고 좋은 답변을 줄 것입니다. DW의 반응이 적대적이라고 생각하는 것
같습니다-FWIW,

6
@ignis 답이 불완전 할 수 있지만 Yuval이 작성한 문장은 완전히 정확합니다. 정지 문제는 이례적인 측면이 아니라 계산의 본질입니다.
David Richerby

3
@nikie이 질문이 진행되는 한 도움이되지 않습니다. 항상 종료하는 모든 알고리즘 세트에서도 런타임 한계를 결정할없습니다 .
Raphael

9

나는 (반) 자동 평균 사례 분석, 즉 MaLiJAn ¹에 대한 한 가지 접근법을 알고 있습니다. Knuth가 TAoCP에서 사용하는 분석 종류와 매우 유사합니다. 핵심 아이디어는

  • 프로그램 (흐름)을 Markov Chain으로 모델링
  • 일련의 프로그램 실행을 계산하여 일부 고정 입력 크기 에 대한 전이 확률 훈련 ( 최대 가능성 추정기 산출 )n
  • probility 기능에 대한 외삽 n
  • 컴퓨터 대수를 사용하여 평균 비용을 도출하십시오 (이러한 기능을 수행).

추가 비용 측정 (예 : 비교, "시간") 만 작동하고 예상 값만 정확하고 (완벽한 확률 함수 가정) 더 높은 모멘트를 도출 할 수 없습니다.

외삽을 제외한 모든 단계는 엄격하며 [2]이 방법은 물론 적절한 랜덤 샘플 입력이 주어지면 잘 알려진 결과를 높은 정밀도로 재현하는 것으로 입증되었습니다. 결과에 대한 증거 또는 근사 보장은 없지만 (외삽 단계는 지금까지 순전히 추론적임)이 도구를 사용하여 얻은 결과는 알고리즘을 분석하고 가설을 공식화하기 어려운 실험을 수행하는 데 도움이됩니다 [3,4].


  1. 전체 공개 : 저는이 연구 그룹의 일원이었으며 도구 개발에 참여했습니다.
  2. U. Laube와 M. Nebel 의 알고리즘 및 데이터 구조의 최대 가능성 분석 (2010) [ preprint ]
  3. S. Wild 등의 MaLiJAn사용한 Java 7의 듀얼 피벗 퀵 정렬 엔지니어링 (2012) [ preprint ]
  4. U. Laube und M. Nebel의 특수 그래프에서 Ford-Fulkerson 방법의 최대 가능성 분석 (2015) [ preprint ]

이 기법들은 평균 사례 분석의 정확성에 대한 추정과 함께 제공됩니까?
Martin Berger

@MartinBerger 불행히도, 아닙니다. 우리는 그것에 대한 몇 가지 아이디어를 가지고 있지만 아직 구현하지는 않았습니다. 입력 크기를 아주 많이 검사하는 방법을 쉽게 속이기 때문에 일반적으로 희망이 거의 없습니다. 런타임 함수 및 / 또는 데이터 세트에 대한 가정이 있으면 무언가 가능할 수 있습니다. 이 도구는 최소한 "더 많은 데이터가 필요합니다"라고 말할 수 있어야합니다.
Raphael

그 흥미 롭군요. 이 추가 작업을 수행하기를 바랍니다.
Martin Berger

8

물론 Yuval Filmus가 지적했듯이 그러한 문제에 대한 일반적인 해결책을 기 대해서는 안됩니다. 그러나 일반적인 경우와 마찬가지로 일반적인 사례의 흥미로운 부분 집합에 대한 솔루션을 찾을 수 있습니다.

나는 어떤 종류의 일을 알게 됨으로써 결코이 분야에 대해 전문가 나 지식이 없다. 그것은 자동 평균 복잡성 분석과 관련이 있으며 그 작업은 Philippe Flajolet과 그의 동료들에 의해 수행되었습니다.

필자가 설명했을 때 내가 이해 한 바에 따르면, 저자는 작은 언어 (Turing이 완벽하지는 않지만 충분히 중요 함)를 설계하여 해당 언어의 제약 조건 내에서 작성된 알고리즘이 평균 복잡성을 자동으로 분석 할 수 있도록했다. Lambda-Upsilon-Omega, 즉 (바인딩 해제) 당시 시스템이 호출되었습니다 .λυ´ω

필자가 웹에서 찾은 한 논문은 1990 년 논문입니다. Philippe Flajolet, Paul Zimmermann 및 Bruno Salvy 의 알고리즘대한 자동 평균 사례 분석 .

나중의 논문이이 작업을 확장했을 것으로 예상되지만 실제로는 모른다. 작품은 상당히 많이 인용되었으며, 웹을 검색하면 같은 주제에 대한 최신 작품을 얻을 수 있습니다.

나는 Flajolet과 그의 동료들의 연구가 매우 수학적 일 까봐 두렵습니다. 나는 읽기가 쉽지 않을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.