2 개의 배열 a, b에 2 개의 부호없는 정수 n 개의 숫자가 있다고 가정하고, 각각 두 자리를 더할 수 있고 carry가있는 경우 p 개의 프로세서가 있다고 가정합니다. O + (p + n/p) 시간에 a + b를 계산할 수 있습니까? 나는 (n/p) p 인터벌로 입력을 나눠 봤지만 캐리를 처리하는 방법을 모른다.2 개의 정수를 병렬로 추가
답변
나는 그것이 가능하다고 믿습니다. 나는 n >= p
이라고 가정하고 p 프로세서는 메시지 전달을 통해 프로세서가 통신하는 비공유 아키텍처에 배치됩니다.
자릿수가 p 프로세서간에 아직 분배되지 않았지만 계산에 참여하지 않는 하나의 마스터 프로세서에서 수집 된 경우 a와 b를 분리하여 p 개의 인접한 연속 된 블록 블록을 작성한 다음 보내십시오. 각 프로세서. 메시지의 복잡성은 O(p)
입니다.
그런 다음 각 프로세서는 숫자의 블록에 대해 두 개의 합계를 계산합니다. 즉, 이전 프로세서에서 캐리 1을 수신한다는 가정하에 하나의 합계를 계산합니다. 즉, 다음 유효 숫자 자릿수 블록을 가진 프로세서와 캐리 0이 될 것입니다. 또한 두 시나리오 각각에 대해 송신 캐리를 계산합니다. 각 프로세서는 정수의 정수를 보유해야하므로 연산은 시간 복잡성 O(ceil(n/p))
입니다.
물론 최하위 숫자 블록이있는 프로세서는 합계를 하나만 계산하면됩니다. 계산이 완료 되 자마자 결과 자리수의 몫을 마스터로 보내고 다음 자리의 더 큰 자릿수를 보유한 프로세서로 전송을 보냅니다. 다음 프로세서는 두 결과 시나리오 중 어느 것이 참이되었는지를 결정하고, 적절한 결과 디지트를 마스터로 보내고, 그 결과를 다음 프로세서로 전송합니다. 등등.
결과에 대한 추가 p 메시지와 반송에 대한 p-1 메시지가 필요합니다. 따라서 메시지의 복잡도는 여전히 O(p)
입니다. 시간 복잡도는 O(p + ceil(n/p))
이 될 것이며, 마지막 프로세서는 전임자 중 p-2
이 두 결과 중 어느 것을 전달할지 결정할 때까지 기다려야하기 때문입니다. n 자리가 p 프로세서에 균등하게 분배 될 수 있다고 가정하면 (n은 p의 배수 임) 제안 된 시간 복잡도 인 O(p + n/p)
을 사용해도됩니다.
이 두 가지 가능한 결과를 추론하는 방법은 Carry-select adder의 작동 방식과 매우 유사합니다.
- 1. 2 개의 정수를 비교하는 jquery
- 2. 병렬로 2 개의 버전을 개발하기위한 분기 전략
- 3. bash 스크립팅에서 병렬로 2 개의 루프 실행
- 4. 2 개의 Task.Run을 사용하여 병렬로 실행합니까?
- 5. 2 개의 그림 상자를 병렬로 업데이트하십시오.
- 6. 정적 정수를 늘리는 2 개의 스레드
- 7. Java에서 2 개의 큰 정수를 나눕니다.
- 8. 2 개의 정수를 나눌 수 없습니다.
- 9. PyOpenCL을 사용하여 100 개의 정수를 GPU에 병렬로 100 개의 정수와 곱하는 방법은 무엇입니까?
- 10. 이 C 코드의 문제점은 무엇입니까? 먼저 2 개의 정수를 요구하지만, 단지 1을 묻고 2 개의 정수를 넣은 후에는 충돌이 발생합니다.
- 11. 2 개의 MySQL 행 추가
- 12. 텍스트보기에 2 개의 버튼 추가
- 13. 문자열에서 2 정수를 추출하십시오.
- 14. Reactive Extensions를 사용하여 2 개의 httpwebrequests를 병렬로 호출
- 15. Java에서 병렬로 2 개의 작업을 실행하는 방법은 무엇입니까?
- 16. 2 개의 프로세스를 안드로이드에서 병렬로 실행할 수 있습니까?
- 17. 병렬로 두 개의 루프 실행
- 18. 여러 개의 AsyncTask를 병렬로 실행
- 19. 두 개의 AsyncTask를 병렬로 실행
- 20. 두 개의 AsyncTaskLoaders를 병렬로 실행
- 21. java 병렬로 두 개의 배열을 추가하십시오.
- 22. 1 함수에서 2 개의 정수를 반환하고 출력하는 경우
- 23. AS3 : 2 개의 양의 정수를 추가하면 음의 정수가됩니다.
- 24. C에서 파일의 2 정수를 읽는 것
- 25. Appium - 병렬로 여러 개의 안드로이드 장치
- 26. 2 개의 32 비트 정수를 곱하여 64 비트 정수를 생성하려면 어떻게합니까?
- 27. 모델에서 2 개의 IntegerField를 반환하십시오.
- 28. 두 개의 null 입력 가능 정수를 추가 할 수 없습니다.
- 29. 자바 스크립트에 두 개의 정수를 추가 할 수 없습니까?
- 30. 여러 개의 빠른 애니메이션이 병렬로 작동하지 않습니다.
굉장합니다, 감사합니다! – Shmoopy
대단히 환영합니다! 담당자 주셔서 감사합니다 :) – Marcellus