가장 잘 알려진 알고리즘이 런타임


18

나는 분모에 로그가있는 알고리즘을 본 적이 없으며이 양식에 실제로 유용한 알고리즘이 있는지 궁금합니다.

정렬 또는 트리 기반 알고리즘과 같이 런타임에 로그 팩터가 곱해질 수있는 많은 것들을 알고 있지만 로그 팩터로 나눌 수있는 것은 무엇입니까?


24
Mergesort . f(n)=nlog2n
Jeffε

12
@ Jɛ ff E 으르렁 거리는 Mcsnarkster
Suresh Venkat

5
기수 정렬-실제로 입니다. 무슨 일이 벌어지고 O(nlogn/logn)
있는지는

RAM 모델에서 비슷한 공간 비용 절약 트릭을 수행 할 수 있다는 점을 감안할 때 DTIME 계층 정리가 그러한 알고리즘의 존재에 대한 논쟁으로 사용될 수 있는지 궁금합니다.
chazisop

답변:


41

"무엇을 로그로 나눌 수 있습니까?"에 대한 일반적인 대답은 무엇입니까? 두 가지의 조합입니다.

  1. 단어 크기의 정수에 대해 일정한 시간의 산술 연산이 허용되지만 단어의 길이에 대해 보수적이기를 원하는 계산 모델이므로 단어 당 비트 를 가정 합니다. 또한 모든 메모리를 처리 할 수 ​​없었으며, 단어가 더 길면 테이블 조회를 사용하는 알고리즘이 테이블을 설정하는 데 너무 많은 시간이 걸리기 때문에)O(logn)
  2. 비트를 워드로 패킹하여 데이터를 압축 한 다음 워드에서 작동하는 알고리즘.

나는 많은 예가 있다고 생각하지만 고전적인 예는 가장 긴 공통 하위 시퀀스 등을위한 Four Russians Algorithm 입니다 . 비트 패킹 아이디어를 사용하지만 실제로는 1 초를 절약하기 때문에 실제로 가됩니다. 다른 아이디어를 사용하는 로그 팩터 : 단일 테이블 조회 로 O ( log 2 n ) 비트 연산 블록 교체 .O(n2/log2n)O(log2n)


35

루빅스 큐브는 매우 자연스럽고 (나에게는 예기치 않은) 예입니다. n×n×n 큐브가 필요 Θ(n2/logn) 해결 단계를 반복합니다. (이것은 세타 표기법이므로 상한과 하한입니다.)

이것은 이 논문 에서 보여진다 [1].

그것은 가치 루빅 큐브의 특정 인스턴스를 해결 복잡도가 있음을 언급 할 수있다 (열린 설명하지만, NP-어려운 것으로 추측 여기에서 예) NP 하드 [2]. Θ(n2/logn) 알고리즘이 용액을 보장하고, 모든 솔루션이 점근 적 최적임을 보장하지만, 최적으로 특정 인스턴스를 해결할 수있다. Rubik의 큐브는 일반적으로이 알고리즘으로 해결되지 않으므로 유용한 정의는 여기에 적용되거나 적용되지 않을 수 있습니다 ( Kociemba의 알고리즘 은 일반적으로 빠르고 최적의 솔루션을 제공하므로 작은 큐브에 사용됩니다).

[1] Erik D. Demaine, Martin L. Demaine, Sarah Eisenstat, Anna Lubiw 및 Andrew Winslow. 루빅스 큐브를 해결하기위한 알고리즘. 2011 년 9 월 5 ~ 9 일, 알고리즘에 관한 제 19 차 유럽 심포지엄 (ESA 2011), 689 ~ 700 쪽

[2] Erik D. Demaine, Sarah Eisenstat 및 Mikhail Rudoy. Rubik의 큐브를 최적으로 해결하는 것은 NP- 완료입니다. 컴퓨터 과학의 이론적 측면에 관한 제 35 차 국제 심포지엄 (STACS 2018), 2018 년 2 월 28 일 – 3 월 3 일, 24 : 1-24 : 13의 절차.


16

비트 패킹 트릭없이 분모에 나타나는 의 예는 Agarwal, Ben Avraham, Kaplan 및 Sharir 의 최근 논문으로 시간 O 에서 두 개의 다각형 체인 사이의 불연속 Fréchet 거리 계산에 관한 논문 입니다 ( n 2 log log n / log n ) . 알고리즘의 세부 사항에 익숙하지는 않지만 일반적인 트릭은 입력을 상대적으로 작은 조각으로 분할 한 다음 정교하게 답변을 결합하는 것입니다 (물론 분할 및 정복과 같은 소리이지만 로그를 얻지 못합니다) 영리한 트릭으로 분모에)lognO(n2loglogn/logn)


5
이것은 David의 답변에 설명 된 "Four Russians"기술의보다 복잡한 사례입니다.
Jeffε

13

정확히 요청한 것이 아니라 분모에 로그 요소가 나타나는 "야생"상황은 Stephen Cook, Pierre McKenzie, Dustin Wehr, Mark Braverman의 " 나무 평가를위한 자갈과 가지 프로그램 "과 라훌 산타 남.

트리 평가 문제 (TEP)는 다음 과 같습니다. 리프 에 { 1 , , k } 값으로 주석이 달린 ary 트리가 있고 내부 노드에 { 1 , , k } d{ 1 , , k } 나무를 평가하십시오. 여기서 각 내부 노드는 자식 값에 대한 주석이 달린 함수의 값을 얻습니다. 이것은 쉬운 문제이며 요점은 로그 공간에서 해결할 수 없다는 것을 보여주는 것입니다 (나무의 높이가 입력의 일부인 경우). 이를 위해 TEP를 해결하는 분기 프로그램의 규모에 관심이 있습니다.d{1,,k}{1,,k}d{1,,k}

섹션 5에서, TEP 및 관련 문제 BEP 모두에 대해 높이 3의 트리에 대해 엄격한 경계가 표시되며, 여기서 출력은 임의의 방식으로 로 축소됩니다 . TEP를 들어 바운드는 Θ ( K 2 D - 1 ) BEP에 대한 바인딩 인 반면, Θ ( K 2 D - 1 / 로그 K에게 ) , 즉 당신의 구원 얻을 로그 케이 .{0,1}Θ(k2d1)Θ(k2d1/logk)logk


12

: 그것은 런타임에 대해 아니더라도, 나는 그것이 가치가 Hopcroft, 폴, 그리고 용감한의 고전적인 결과를 언급 할 생각 는 여전히 이후, [1] " 로그 요소 를 저장하게 하는 원인"의 정신 .TIME[t]SPACE[t/logt]

이것은 공간 복잡성에 대해 가장 잘 알려진 상한값이 분모에있는 문제의 많은 예를 제공합니다. (여러분의 관점에 따라이 예제를 매우 흥미롭게 만들거나 놀라운 이론으로 만들거나 매우 흥미롭지 않게 생각할 수 있습니다. 실제로는 실제로 유용하지 않을 것입니다.)

[1] Hopcroft, Paul 및 Valiant. 시간 대 공간 . J. ACM 24 (2) : 332-337, 1977.



8

길이 두 문자열 사이의 거리 (Levenshtein 일명) 수정을 계산하는 가장 잘 알려진 알고리즘 얻어 O를 ( ( N / 로그 N ) 2 ) 시간 :nO((n/logn)2)

William J. Masek, Mike Paterson : 더 빠른 알고리즘 컴퓨팅 문자열 편집 거리. J. 컴퓨팅 시스. 공상 과학 20 (1) : 18-31 (1980).


4
다시 말하지만, 이것은 Four Russians 알고리즘의 변형입니다.
David Eppstein

7

Θ(n/logn) 은 Greg와 Paul Valiant가 고려한 문제에 대한 올바른 경계로 나타납니다 (비트 트릭에 연결되지 않음).

그레고리 발리 언 (Gregory Valiant)과 폴 발리 언 (Paul Valiant), 선형 추정기의 힘, 2011 년


7

다음은 로그 팩터가있는 타이트 바운드의 또 다른 예입니다. (이것은 부울 함수 복잡성 : Stasys Jukna의 고급과 프론티어의 정리 6.17입니다.)

Θ(n2/logn)n

mpoly(m)n:=O(mlogm)O(logm)mΘ(m2logm)Θ(n2/logn)n is the number of bits in the input.


2

Finding the prime factors of n by trial division when the list of primes is already given. There are θ(nlog(n)) primes less than n so if these primes are given to you, then trial division of n by each of them takes θ(nlog(n)) time (assuming division is a constant-time operation)


3
사실, 대략적으로 보면 충분합니다 2/로그 아래 소수 . But there are far better algorithms out there.
Yuval Filmus

-2

somewhat similar to JG's answer & "thinking outside the box", this seems like a related/relevant/apropos/fundamental negative result. based on diagonalization with a universal TM, there exists a O(f(n)) DTIME language that cannot run in O(f(n)logf(n)) DTIME, due to the time hierarchy theorem. so this applies to a linear DTIME algorithm that exists, f(n)=n, that runs impossibly in O(nlogn) DTIME.


2
on a TM, DTIME(n/logn) is trivial as it doesn't allow the machine to read the whole input. also, the DTIME notation makes the big-oh notation unnecessary.
Sasho Nikolov

?? there is still theory for sublinear time algorithms...
vzn

3
sublinear algorithms make sense in oracle & random access models. DTIME is standardly defined w.r.t. multitape TM, and that's the definition used in the hierarchy theorem for DTIME.
Sasho Nikolov

1
No, @SashoNikolov, DTIME(n/logn) is not trivial. Compare "Are the first n/lgn bits of the input all zeros?" with "Do the first n/lgn bits of the input encode a satisfiable boolean formula?"
Jeffε

5
@JɛffE: You cannot test “Are the first n/lgn bits of the input all zeros?” in O(n/logn) time on a TM, since you do not know what n is without first reading the whole input, which takes time n. It is a standard fact that if f(n)<n, then DTIME(f(n)) contains only languages the membership in which can be determined from the first k bits of input for a constant k (and therefore are computable in constant time).
Emil Jeřábek supports Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.