역 Ackermann보다 느린 성장 기능이 런타임 범위에 나타 납니까?


20

일부 복잡한 알고리즘 ( union-find )은 점근 적 시간 복잡성에 나타나는 거의 일정한 역 Ackermann 함수를 가지며, 거의 일정한 역 Ackermann 항이 무시되는 경우 최악의 시간 최적입니다.

역 행성 Ackermann보다 근본적으로 느리게 성장하는 함수 (예 : 다항식 또는 지수 등의 변환에서 Ackermann과 동등하지 않은 함수의 역수)를 포함하여 알려진 가장 최악의 경우를 제공하는 알려진 알고리즘의 예가 있습니까? 근본적인 문제를 해결하기위한 복잡성?


2
시간 알고리즘? 가장 잘 알려진 알고리즘이 ω ( 1 ) o ( α ( n ) ) 인 알려진 문제에 대해 질문하고있습니까? 먼저TREE ( n ) 와 같이 A ( n ) 보다 "기본적으로"더 빠르게 증가하는 함수를 찾은다음 그 역을 취하여 그에 맞는 문제를 찾아야합니다! 영형(1)ω(1)o(α(n))A(n)(n)
Pål GD


2
@vzn : 는 시간 구성이 불가능합니다 ( α ( n ) 포함 ). 따라서 시간 계층 정리는 여기서 사용할 수 없습니다. f(n)=o(n)α(n)
mdxn

@mdx는 누군가 당신이 윙크를 테스트한다고 지적했습니다. 그래 최근에왔다 생각 하위 시간 계층 THM의 일반화가있을 수 있습니다 기능을합니다. 그러나 어쨌든 o ( n ) 한계는 시간 구성 가능 TM이 모든 입력을 읽어야하기 때문입니다. 그러나 우리는 이러한 다른 알고리즘을 말하는 것입니다. 이것을 시각화하는 데 문제가 있습니다! 질문이 더 하위의 존재를 느낄 O ( N ) .... .... 언어 조사 또는 설명 어딘가의 어떤 종류가있을 수 있습니다영형()영형()영형()
vzn

1
@vzn : OP는 실제로 어떤 계산 모델을 염두에 두어야합니다. LH 는 랜덤 액세스 TM (또는 이와 동등한 것)에 정의되어야합니다. 역학을 지정할 때 우연히 너무 많은 힘을 추가 할 수 있습니다. 계산 복잡성의 개념이 유익하지 않은 정도까지도 가능합니다. 가장 기본적인 용어로, 우리는 시간 정의 개념을 변경해야 할 것입니다. DLOGTIMELH
mdxn

답변:


8

세스 Pettie 해낸 컴퓨팅하기위한 알고리즘 민감도 스패닝 트리를 최소한의 시간으로 에 개선 Tarjan의 알고리즘 시간에 동일한 연산 O ( m α ( m , n은 ) ) . (이를 Chazelle 's O ( m α ( m , n )과 비교 )영형(미디엄로그α(미디엄,))영형(미디엄α(미디엄,))영형(미디엄α(미디엄,)) 최소 스패닝 트리를 계산하기 위해 알고리즘과 민감도 문제는 최소 스패닝 트리를 변경하지 않고 각 간선 가중치가 얼마나 많이 변할 수 있는지에 따라 주어진 그래프와 주어진 최소 스패닝 트리에 대해 계산하도록 요청합니다.

(이 참조에 대해 Tsvi Kopelowitz에게 감사합니다.)


1
로그 역 Ackermann이 역 Ackermann보다 "기본적으로 느리게"인지는 모르겠지만, 이런 종류의 러닝 타임은 놀랍습니다.
Yuval Filmus


-1

Alan Turing이 컴퓨터를 발견했을 때 컴퓨터에 제안 된 여러 모델이있었습니다. 튜링은 이러한 모델 중 일부 (3)가 서로를 시뮬레이션하고 Ackermann 함수를 계산할 수있는 반면 다른 모델은 서로를 시뮬레이션 할 수 있지만 Ackermann 함수는 시뮬레이션 할 수 없으므로 3을 시뮬레이션 할 수 없음을 증명했습니다. 따라서이 3 가지 모델 (Turing Machine, von Neumann 및 내가 모르는 모델)이 컴퓨터의 아키텍처로 선택되었습니다. 이것은 Ackermann 기능이 컴퓨터의 한계라는 것을 의미하지는 않지만 어려운 과학이라고 생각합니다. Ackermann 함수보다 빠르게 증가하는 계산 가능한 함수를 알지 못합니다.

이제는 귀하의 질문과 일치하는 실제적인 문제가 있다고 생각하지 않지만 아마도 우리는 하나를 구성 할 수 있습니다. 입력에 제약을 두어야합니다. O (n)을 사용할 수 없으므로 전체 입력을 확인할 수 없습니다. 실제로 입력 길이는 O (log n)이므로 확인할 수 없습니다. 따라서, 우리는 Ackermann (c)가 입력의 길이가되도록 c와 같이 나머지 입력 길이의 표현을 첫 번째 매개 변수로 필요로합니다. 이것 또한 적합하지 않기 때문에, bb (c)가 입력의 길이와 같고, 여기서 bb는 사용중 비버 함수가되도록, 입력 c의 첫 번째 값으로 매개 변수 c를 요구합니다. 이 함수는 계산할 수 없지만 bb (c)는 확실히 존재합니다. 그런 다음 알고리즘은 다음과 같습니다.

for (int i=0; i<c; i++) {
    if (input[i] == null) {
        return false;
    }
}
return true;

알고리즘의 목적은 c가 bb의 역수이면 입력 길이가 bb (c)보다 큰지 확인하는 것입니다.

Ackermann 함수보다 더 빠르게 계산할 수있는 계산 가능한 함수가 있다면, 입력에 대한 질문에 답하는 알고리즘을 역으로 사용할 수 있다고 생각합니다.


주석에서 지적한 바와 같이 Ackermann 함수보다 빠르게 성장하는 함수가 분명히 있습니다 (TREE (n)). 문제의 까다로운 부분은 해당 함수의 역으로 ​​런타임 경계가있는 알고리즘을 구성하는 것입니다. 이러한 기계는 처음에는 함수의 역수를 계산할 시간이 충분하지 않으므로이를 달성하는 TM의 구성은 간단하지 않습니다.
mdxn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.