복잡한 알고리즘의 숨겨진 상수


9

많은 문제들에 대해, 가장 점증적인 복잡성을 갖는 알고리즘은 큰 O 표기법에 의해 숨겨지는 매우 큰 상수 인자를 갖는다. 이것은 행렬 곱셈, 정수 곱셈 (특히, Harvey와 van der Hoeven의 최근 O (n log n) 정수 곱셈 알고리즘), 낮은 정렬 네트워크 및 그래프 마이너 찾기에서 발생합니다. 이러한 알고리즘을 때때로 은하계 알고리즘이라고합니다.

일반 정렬 및 정수 추가와 같은 다른 알고리즘의 경우 알고리즘은 최적의 점근 적 복잡성과 작은 상수 요소로 알려져 있습니다.

전자 알고리즘을 후자의 알고리즘과 이론적 인 관점에서 분리하기 위해 어떤 연구가 수행 되었습니까?

숨겨진 상수는 종종 다른 계산 모델 간의 구별을 숨기기 위해 생략된다는 것을 알고 있습니다. 그러나 다양한 모델에서 이러한 은하계 알고리즘은 예를 들어 10 억 크기의 입력에 대해 무의식적으로 나쁜 알고리즘보다 느릴 것이라고 확신합니다. 어떤 경우에는 구별이 미묘하지 않습니다. 엄격하게 만들어 졌습니까?

예를 들어, 매우 간단한 ISA를 가진 von Neumann 시스템과 같은 매우 간단한 계산 모델을 발명 한 다음 알고리즘을 구현하고 실행 시간을 명시 적 상수로 제한 할 수 있습니다. 이것은 다양한 알고리즘에서 수행 되었습니까?


1
빠른 정수 곱셈 알고리즘은 은하가 아닙니다. 실제로 실제로 일반적으로 사용됩니다.
Emil Jeřábek

2
@ EmilJeřábek OP가 David Harvey와 Joris van der Hoeven의 최근 돌파구 인 " 시간의 정수 곱셈 "에 대해 이야기하고 있을지도 모른다. .wordpress.com / 2019 / 03 / 29 /… )영형(로그)
라 미네

1
저자가 직접 작성하고 Lipton의 블로그에 언급 된 것처럼 단순성에 대한 논문은 상수를 최적화하려고 시도하지는 않지만 실용적으로 만들 수 있습니다.
Emil Jeřábek

@ EmilJeřábek 그 종이는 내가 말한 것 중 하나였습니다. 이 백서에서는 개선 될 수있는 내용을 설명하지만, 로그 로그가 얼마나 작은 지에 따라 실제로 사용되는 현재 O (n log n log log n) 알고리즘보다 알고리즘이 실제로 개선 될 것이라는 것은 매우 의문입니다. 실제 입력을위한 것입니다.
isaacg

4
@ EmilJeřábek 특히, 논문에 제시된 알고리즘은 숫자가 비트 보다 적을 때마다 현재 기본 사례에 대한 간단한 알고리즘을 나타냅니다 . 그들이 설명하는 최적화는 대신 사용할 수 있지만, 비트는 여전히 우주의 입자 수를 초과하므로 실용성은 여전히 ​​의문의 여지가 없습니다. 논문의 5.4 절을 참조하십시오. 212=1729=92912
isaacg

답변:


2

특정 알고리즘 클래스 및 조합 문제에 대해 흥미로운 방식으로 접근하는 한 곳은 분석 조합 입니다. 설명 된 주요 접근법은 제안하는 것과 비슷합니다. 알고리즘의 구체적인 구현으로 시작하고 주어진 입력의 실행을 위해 명시 적으로 계산 가능한 복잡성을 연관시키는 데 사용할 반복되는 작업 (일반적으로 가장 무거운 작업)을 식별합니다. 선택된 연산이 수행 되는 숫자 형태의 크기 .

이 방법론은 특정 계산 모델을 고칠 필요는 없지만 물론 유용 할 수 있습니다. 또한 최악의 동작 또는 예상 동작을 계산하거나 다른 것을 시도 할 수 있습니다.

이 방법론에서 가장 중요한 요소는 이러한 값의 생성 함수 분석입니다. 복잡한 분석 방법을 사용하여 매우 정확한 점근 적 근사를 얻을 수도 있습니다.

이 책에서 다루는 간단한 예는 퀵 정렬입니다. 여기에는 최악의 2 차 실행 시간이 있지만 실제로 대부분의 알고리즘 보다 성능이 뛰어납니다 . 퀵 정렬의 예상 비용을 정확하게 분석하고 머지 정렬과 비교할 때, 내가 올바르게 기억한다면 약 10 크기에서 후자를 능가 할 것으로 예상됩니다. 이런 종류의 것들을 계산하기 위해 숨겨진 상수를 무시할 수는 없습니다.영형(로그)

실제로, 빠른 정렬에서는 하위 목록을 재귀 적으로 정렬하여 목록을 정렬하므로 크기가 10보다 작은 목록에서 mergesort를 사용하면 모든 크기를 개선 할 수 있습니다. 일반 정렬 알고리즘은 크기가 10이 될 때까지 빠른 정렬로 구현 된 후 병합 정렬이 사용됩니다. 코드 주석에서 성능 테스트에서이 값이 최적 인 것으로 나타났습니다.

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