Tính toán số bit của một số nguyên lớn


10

Cho hai số nguyên và trong biểu diễn nhị phân, độ phức tạp của việc tính toán kích thước bit của gì?n x nxnxn

Một cách để làm như vậy là tính toán bằng cách tính xấp xỉ với độ chính xác đủ. Dường như tính toán với bit của các phần tử có thể được thực hiện trong trong đó là thời gian cần thiết để tính tích của hai số nguyên có độ dài . Điều này mang lại một thuật toán (không đặc biệt đơn giản) có độ phức tạp xấp xỉ nếu bị ràng buộc trên kích thước bit của cả và (nếu tôi không có lỗi).log 2 ( x ) log 2 ( x ) k O ( M ( k ) log k ) M ( k ) k O ( s log 2 s ) s x n1+đăng nhập2(xn)= =1+nđăng nhập2(x)đăng nhập2(x)đăng nhập2(x)kÔi(M(k)đăng nhậpk)M(k)kÔi(Sđăng nhập2S)Sxn

Chúng ta có thể đánh bại trong đó là kích thước của và (trong trường hợp chúng có kích thước tương đương) không? Có một thuật toán đơn giản để có được sự phức tạp này hoặc tốt hơn?Ôi(Sđăng nhập2(S))Sxn

Lưu ý: Tôi quan tâm đến sự phức tạp trong một mô hình lý thuyết như máy Turing.


đề nghị di chuyển / "quảng bá" điều này đến Khoa học máy tính lý thuyết
vzn

@vzn: Tôi không nghĩ rằng điều này hữu ích ...
Bruno

tại sao không? câu hỏi này nhắc nhở tôi về các cuộc tấn công thuật toán vào phỏng đoán của Dysons, ví dụ như được bảo vệ bởi RJLipton trong 1 , 2
vzn

Đơn giản vì tôi đã tìm thấy một câu trả lời cho câu hỏi của mình, vì vậy tôi không cần phải hỏi nó ở nơi nào khác.
Bruno

Câu trả lời:


1

[sửa] Theo đề xuất, tôi chỉnh sửa câu trả lời của mình để biết thêm chi tiết.

Câu trả lời cho câu hỏi thứ hai của tôi là không :

Dự luật. Tính toán cho đến độ chính xác k ít nhất cũng khó như tính toán kích thước bit của x 2 k .đăng nhập(x)kx2k

Bằng chứng. Hãy để biểu thị kích thước bit của một số nguyên y . Thông báo đầu tiên cho một số nguyên không âm y , bit-kích thước của y1 + log y .|y|yyy1+đăng nhậpy

Như vậy, . Bây giờ 2 k log ( x )log ( x ) dịch chuyển vị trí k sang trái. Do đó, người ta có thể tính log ( x ) thành độ chính xác k bằng cách trừ 1 đến kích thước bit của x 2 k và dịch chuyển vị trí k kết quả sang phải.|x2k|= =1+2kđăng nhậpx2kđăng nhập(x)đăng nhập(x)kđăng nhập(x)k1x2kk


1
Tại sao số bit trong cho phép bạn tính log chính xác đến x bit k ? Liệu giảm của bạn thực sự làm việc? Điều gì xảy ra nếu trường hợp đặc biệt trong đó n = 2 k dễ / khó hơn nhiều so với tất cả các giá trị có thể khác của n (không phải là lũy thừa của hai)? Bạn có cách nào để loại trừ khả năng đó không? x2klogxkn=2kn
DW

@DW: Tôi trở lại câu hỏi này, sau bình luận của vzn. Bằng chứng của tôi là như sau: Số lượng bit của một số nguyên 1 + log y . Như vậy, số lượng các bit trong x 2 k1 + 2 k log x . Hơn nữa, 2 k log x giống như log x nhưng đã dịch chuyển vị trí k sang trái. Do đó, log 2 k log x cung cấp cho bạn (ít nhất) k bit đầu tiên củay1+logyx2k1+2klogx2klogxlogxk2klogxk . Do đó, nếu bạn có thể tính số bit của x 2 k , bằng cách trừ 1 vào kết quả, bạn sẽ có được k bitđầu tiêncủa log x . Điều này có nghĩa không? đăng nhậpxx2k1kđăng nhậpx
Bruno

Vâng, điều đó có ý nghĩa hơn với tôi! Đặc biệt vì bạn chỉ đang cố gắng thể hiện độ cứng. Tôi có thể khuyến khích bạn cập nhật câu trả lời của bạn với lời giải thích chi tiết hơn này không? Cảm ơn bạn đã quay trở lại vấn đề này và ghi lại câu trả lời cho câu hỏi của riêng bạn.
DW
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.