하나의 정수가 고정 된 경우 정수 곱셈


35

를 크기 n 비트 의 고정 된 양의 정수라고 하자 .An

이 정수를 적절하게 사전 처리 할 수 ​​있습니다.

다른 양의 정수 주어 크기의 m의 비트 승산의 복잡도 무엇 B는 ?BmAB

(max(n,m))1+ϵϵ=0


6
주어지면 항목 으로 조회 테이블을 구성하십시오 . (분명히 이것은 당신이 원하는 것이 아니지만 요구 사항을 더 구체적으로 만들어야한다고 생각합니다 ...)A2n
Jukka Suomela

9
나는 표준 부울 회로 모델에서 문제가 완벽하다고 생각합니다.
Noam

4
명백한 상한 및 하한과 알고있는 최상의 결과를 요약 할 수 있습니까? 그것은 당신이 문제에 대해 관심을 가지고 있고 당신이 그것에 대해 생각했다는 것을 보여주고, 다른 사람들에게 당신의 문제에 대해 더 많은 동기를 부여합니다.
Robin Kothari

4
나는 asker가 전처리 된 부분이 공간 만 차지한다는 것을 암시 적으로 의미한다고 생각합니다 . (매트릭스 - 벡터 멀티 포트는 그 속성이 있습니다.)nO(1)
라이언 윌리엄스

나는 당신이 원하는 것을 알고 싶습니다. 나는 이것에 대해 끝없는 사건을 겪을 수 있다고 생각합니다. 이것이 나의 첫 번째 대답이므로, 가능한 한 많은 정보를 제공하게되어 기쁩니다. 원하는 경우 mgroff100@hotmail.com으로 이메일을 보내 주시면 더 많은 도움을 드리겠습니다.
Matt Groff

답변:


20

항상 가장 효율적인 알고리즘은 아니지만이 질문은 추가 체인과 매우 밀접한 관계가 있습니다. 덧셈 체인에 의해 빠르게 계산하기위한 임의의 알고리즘 반복 덧셈 (각각의 덧셈은 물론 연산 임)에 의해 를 계산하기위한 알고리즘으로 변환된다 . 이에 반하여, 계산 빠른 알고리즘 임의 대한 산출 알고리즘에 짧은 리드 하지만, 물론이 알고리즘은 반드시 첨가 체인의 형태를 가질 필요는 없다; 여전히, 그것은 시작하기에 좋은 곳인 것 같습니다. 한 번 봐 가지고 http://en.wikipedia.org/wiki/Addition_chain을 하거나 권을 확인하십시오. 중 2f ( B ) = A B O ( n ) A B B AAf(B)=ABO(n)ABBA자세한 내용 은 컴퓨터 프로그래밍 기술 .


17

Steven Stadnicki의 아이디어를 확장하기 위해 Discrete Fourier Transform을 사용하여 행렬 곱셈보다 나은 순진 알고리즘을 신속하게 구성 할 수 있습니다.

우리는 의 수를 센다 . 비트의 절반 미만이 1이면 위치의 링크 된 목록을 구성합니다. 곱하기 위해 간단히 목록의 각 위치에서 왼쪽으로 이동 하고 (표시된 비트를 곱한 결과) 결과를 추가합니다.BAB

비트의 절반 이상이 1이면 위와 동일하지만 위치 목록을 채우는 대신 0을 사용합니다. 아이디어는 모든 합계를 곱하여 얻은 합계에서이 합계를 빼는 것입니다. 모든 것의 합을 얻기 위해 의 비트 수 만큼 를 이동 시키고 여기서 를 뺍니다 . 그런 다음 연결된 목록에서 얻은 합계를 뺍니다.A BBAB

이를 순진한 연결 목록 알고리즘이라고 부를 수 있습니다. 실행 시간은 최악의 경우 이지만 평균 경우의 는 작은 경우 DFT보다 빠릅니다..O ( | B | O(n2)| A|O(|B||A|2π)|A|

리스트의 아이디어를 최적으로 사용하기 위해 나누기와 정복을 사용합니다. 를 반으로 나누고 순진 알고리즘을 사용하여 관련 목록의 크기를 찾습니다. 그것들이 5보다 크면, 우리는 모든 반쪽을 5 개 이하로자를 때까지 5보다 큰 반쪽에서 순진 알고리즘을 다시 호출합니다. (이것은 이것을 4 개의 뺄셈으로 줄일 수 있기 때문입니다)A

더 좋은 점은 분할 및 정복 알고리즘을 개선하는 것입니다. 우리는 가능한 모든 분기의 조합을 반복하여 탐욕스럽게 최고의 것을 선택합니다. 이 전처리는 실제 곱셈과 거의 같은 시간이 걸립니다.

전처리로 무한한 자유가 허용된다면 모든 분기에 대해 최적화 된 분할 및 정복 알고리즘을 최적으로 해결합니다. 최악의 경우에는 시간이 걸리지 만 더하기 체인 방법에 따라 최적이어야합니다.O(2|A|)

위의 알고리즘에 대해보다 정확한 값을 계산하려고합니다.


안녕 매트 : 무엇입니까그리고? | B ||A||B|
T ....

A A n | A | n | B | n A B|A|의 크기 에서 기본적 요소 수 . 이것은 과 같습니다 . 즉 . 와 동일 . 그러나 와 이 다른 경우 공식이 유지됩니다 . AAn|A|n|B|nAB
매트 그 로프

17

상수에 의한 곱셈 이라는 문서 는 하위 선형 ( PDF )으로 이동 / 추가 연산에 대한 알고리즘을 제공합니다 . 여기서 은 상수의 크기입니다. .nO(nlogn)n

본질적으로, 이는 원하는 의해 작동 이들에만 곱하는 상수에 -bits 시프트 및 번호를 추가 진 긴 승산처럼 (일정한 비트 하단 수가 비트 승산 수단 될 상단은 이동 및 추가되지 않지만 비트는 상단이 이동 및 추가되었음을 의미합니다. 그러나 상수 에는 비트가 있을 수 있으므로 여전히 입니다.1 0 1 O ( 없음 ) O ( N ) 11101O(n)O(n) 1

그런 다음이 논문은 상수의 숫자 표현을 이중 기수 시스템으로 변경하는 것에 대해 이야기합니다. 분명히 변환이 올바르게 수행되면 이 아닌 비트는 희소합니다 (매우 중복되는 수 시스템). 그들은 얼마나 희소한지를 계산합니다. 0이 아닌 비트의 수는 미만으로 제한 되므로 하위 선형 수의 덧셈이 필요합니다. 그러나 각 추가 의 비용 으로 인해 여전히 실제 작업입니다 (여기서 은 크기 상수이며 은 다른 숫자의 크기입니다.O ( 없음 ) O ( N m0O(n)O(m)nmO(nmlogn)O(m)nm

그래서 귀하의 질문에 대답하기 위해, 예 당신이 얻을한다는 점에서, 행렬 - 벡터 곱셈과 유사한 결과가 이 일정하면 속도 향상; 물론이 속도 향상은 순진한 긴 곱셈에 지나지 않으며, 얻을 수있는 보다 훨씬 나은 곱셈 알고리즘이 있습니다. 이 알고리즘.O ( n 2lognO(n2logn)


@JAS 그것은 나의 특기이다 : D.
Realz Slaw

3
이는 ARITH 2007에서 dx.doi.org/10.1109/ARITH.2007.24 (완전성)로 표시되었습니다.
András Salamon

10

Matt Groff가 제안한 것처럼, 영감을 얻기 위해 연습 커뮤니티를 살펴 보는 것이 좋습니다 (또는 상황에서 이 현재 CPU의 비트 폭 내에있는 경우). 실제로, 정수에 의한 정수 곱셈의 문제는 많은 컴파일러 작성기 및 회로 설계자들에 의해 고려되어 왔지만, 일반적으로 "멀티플렉서없는 멀티플렉서 (shift, add 및 빼기 사용)"에 관심이 있습니다. 내가 알고있는 초기 참고 문헌 중 하나는 (Hacker 's Delight 섹션 8.4에서 이것을 배웠습니다).n

Bernstein, R. (1986), 정수 상수의 곱셈. 소프트웨어 : 실습 및 경험, 16 : 641-652. 도 : 10.1002 / spe. 4380160704

Vincent Lefèvre의 최신 작품은 여기 에서 찾을 수 있으며 (그의 후속 작업을 확인하십시오) 효율적인 회로 합성 에 대한 CMU 프로젝트도 언급합니다 (참고 문헌 참조). 후자의 프로젝트는 상수 세트에 의한 동시 곱셈도 고려합니다.

추신 : 귀하의 사용자 이름을 인식 가능한 것으로 변경하는 것이 좋습니다.


8

이것이 질문과 직접 ​​관련이 있는지 확실하지 않지만 다음과 같은 기본 결과가 흥미로울 수 있습니다. 고정 된 자연수 주어지면, 이 역 이진 표기법 (즉, 최하위 비트 우선)으로 기록 되는 경우, 연산 은 순차적 오토 마톤에 의해 실현 될 수있다 . 오토 마톤의 상태 수는 이며 여기서 은 나누는 의 최대 거듭 제곱입니다 . 예를 들어, 동작 은 다음의 자동 장치에 의해 실현된다. knknnk/2r2r2kn6n여기에 이미지 설명을 입력하십시오

예를 들어, 및 입니다. 따라서 역 이진에서 는 및 (나쁜 선택, 알고 있습니다 ...)으로 됩니다. 이 오토 마톤에서 항목을 처리하면 경로가 나타납니다. 185=1+8+16+32+1286×185=1110=2+4+16+64+10241851001110111100110101000110011101 01101010001

0011101000011110211200110201
올바른 출력 합니다. 여기서 사용하고있는 순차 오토 마톤의 유형은 Schützenberger에 의해 연속적 으로 불려 졌습니다. 초기 접두사 (녹색)와 터미널 출력 기능이 있습니다.01101010001(녹색). 이 순차 머신을 체계적으로 계산하는 방법에 대한 자세한 내용은이 링크를 참조하십시오 .

당신의 의견에 대해 자세히 설명해 주시겠습니까?
J.-E.

> 2k 는 소수 입니다. >2
T ....

동작 실현 순차 오토 마톤의 구성 임의의 대해 수행 될 수있다 . 그러나이 오토 마톤을 계산하는 것이 프라임에 더 쉬울 수 있습니다 . k knknkk
J.-E.

k2r 은 지수입니다.
T ....

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