덧셈의 ​​시간 복잡성


11

Wikipedia는 덧셈의 시간 복잡성을 으로 나열합니다 . 여기서 은 비트 수입니다.nnn

이것은 이론적 인 하한값입니까? 아니면 이것은 현재 가장 빠른 알려진 알고리즘의 복잡성 일뿐입니다. 추가의 복잡성으로 인해 다른 모든 산술 연산과이를 사용하는 모든 알고리즘을 강조하기 때문에 알고 싶습니다.

에서 실행되는 추가 알고리즘을 얻는 것이 이론적으로 불가능 합니까? 또는 우리는 추가를 위해 선형 복잡성에 묶여 있습니까?o(n)

답변:


17

알고리즘이 무조건 시간 미만을 사용하는 경우 추가하는 숫자의 모든 숫자를 읽을 수있는 시간이 충분하지 않습니다. 매우 많은 수 (예 : 8MB 텍스트 파일에 저장)를 처리한다고 가정해야합니다. 물론 숫자 의 에 비해 매우 빠르게 추가 할 수 있습니다 . 그것에서 실행 경우 시간이 합계 값이다.O ( 로그 ( N ) ) NnO(log(N))N

그렇다고해서 속도를 조금 높일 수는 없습니다. 프로세서가 각 작업에서 32 비트를 처리하는 경우 시간을 사용하지만 여전히 아닌 입니다. O(n)o(n)n32O(n)o(n)


이론적으로 필요한 모든 데이터를 읽고 있습니다. 두 개의 숫자 와 를 더하기 . 계산 는 시프트를 통해 연산 에서 수행 될 수 있습니다 . 추가합니다 . 생각 해봐 합계에 대해 더 빠른 추정치를 찾지 못할 수도 있으므로 정확한 것으로 추정값을 수정하십시오. 개 미만의 작업에서? b , a : a b , a + b 2 a 2 a O ( 1 ) 0 nab,a:ab,a+b2a2aO(1)0n
Tobi Alafin

3
그렇습니다. 이론적으로 필요한 이유는 다음과 같습니다. 입력의 각 비트가 출력에서 ​​사소하게 사용됩니다. 사소한 것이 아니라면 ID 함수가 아닙니다. 귀하에 예 여부 계산 될 수 시간이 계산 모델에 의존하십시오 부가 경우 다음 예, 일정 시간의 동작이다. RAM에 액세스 할 수있는 경우 비트 길이를 이미 알고 있으면 비트 주소를 기록하는 데 시간 이 필요 , 모든 를 읽어야하는 경우 시간이 필요합니다 . 이 예에서, 많은 출력 비트는 입력 비트의 간단한 기능입니다. 2 a O ( 1 ) 0 O ( log ( n ) ) a O ( n ) a 2 a2a2aO(1)0O(log(n))aO(n)a2a
Lieuwe Vinkhuijzen

나는의 길이를 발견하는 알고리즘이 에서 . 이진 검색을 사용합니다. O ( log n )aO(logn)
Tobi Alafin

3
@TobiAlafin 모델이 RAM 주소 지정을 지원하는 경우 이진 검색은 단계로 실행됩니다 . Turing Machine 및 주 메모리에로드되지 않은 텍스트 파일에서는 시간 이 걸립니다 . 두 경우 모두 RAM 주소 지정 여부에 관계없이 조회 속도를 높이기 위해 질문에 대답하려면 알고리즘에서 입력의 모든 비트를 확인하여 를 계산해야 . 그렇지 않은 경우와 비트 의 입력 에서 번째 비트를 검사하지 않는다고 가정하십시오 . 그런 다음 그 비트를 뒤집을 수 있으며 잘못된 대답을 줄 것입니다. O ( n ) a + b 42 6O(logn)O(n)a+b426
Lieuwe Vinkhuijzen에서

1
기본적으로 모든 작업은 입니다. 어떤 식 으로든 순서가 지정된 데이터 구조를 처리하는 경우는 예외입니다. 예를 들어 특정 값이 포함되어 있는지 확인하기 위해 전체 BST를 방문 할 필요는 없지만 BST와 함께 제공되는 불변성 때문에 사실입니다. Ω(n)
Bakuriu

7

복잡성 분석이 공식적으로 의미를 갖기 위해서는 객체의 알고리즘이 실행되는 공식 계산 모델 또는 기본 연산이 무엇인지 지정 하는 비용 모델 을 지정해야합니다. 그들의 비용.

대부분의 상황에서 산술 연산은 시간이 것으로 가정합니다 . 우리는 관련된 숫자에 관계없이 알고리즘 복잡성에 관심이 있기 때문에 일반적으로 합리적입니다. 이를 균일 비용 모델 이라고합니다 .Θ(1)

숫자가 무한대로 커지거나 연산 자체를 분석하는 데 관심이있는 경우 산술 연산은 입력 크기에 비례하는 비용 를 갖습니다 .Θ(|x|)

이제 운영 비용이 그보다 적은 비용을 가질 수 있습니까? 그러나 계산 가능한 계산 모델을 공식적으로 정의해야 할 수도 있습니다.


1
부가적인 예로서, 캐리 룩 carry look-ahead adder)는 적절한 단순화 가정 하에서 2 개의 비트 수 의 합을 계산하기 위해 시간을 취한다 . nΘ(logn)n
Fabio Somenzi

3

더하기 입력은 두 개의 임의의 숫자입니다. 이들은 임의적이므로 각 비트를 읽어야하므로 알고리즘은 입니다.Ω(n)

알고리즘이 각 비트를 읽지 않고 1010100110 및 0010010110을 성공적으로 추가한다고 상상해보십시오. 알고리즘이 임의의 입력 을 추가 할 수 있도록이 비트 중 하나를 임의로 뒤집을 수 있어야하며 알고리즘은 여전히 ​​올바른 (그러나 다른) 덧셈을 출력합니다. 그러나 알고리즘이 모든 비트를 읽지 못하면 뒤집힌 입력이 원래 입력과 다른지 어떻게 알 수 있습니까?


내가 생각한 것은 미만의 연산 에서 합계를 근사하는 수단이었습니다 . n
Tobi Alafin

물론. 알고리즘에서 "대략적인"의미를 정의하기 만하면됩니다. 그 정의에 따라, 가장 중요한 2 개의 비트를 추가하는 것은 대략적인 합일 수 있으며 o (n) 시간 내에 수행 될 수 있습니다 . "추가"알고리즘을 언급 할 때, 우리는 그 대답이 정확해야 함을 의미한다고 생각합니다.
murrdpirate
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.