Độ phức tạp của việc tìm hệ số nhị thức bằng một số


19

Giả sử bạn đang nhận được một số (sử dụng bit O ( log m ) trong mã hóa nhị phân).mO(logm)

Làm thế nào nhanh chóng, bạn có thể tìm thấy (hoặc xác định như vậy không tồn tại) ?

n,kN,1<kn2:(nk)= =m

Ví dụ: với đầu vào , người ta có thể xuất .n = 27 , k = 10m= =8436285n= =27,k= =10


Một thuật toán ngây thơ cho vấn đề sẽ đi qua tất cả các giá trị có thể có cho và tìm kiếm giá trị thỏa mãn tính chất.nk

Một quan sát đơn giản là không có cần phải kiểm tra giá trị của nhỏ hơn log m hoặc lớn hơn O ( nđăng nhậpm. Tuy nhiên (ngay cả khi chúng ta chỉ có thể kiểm traO(1)giá trịkcó thể cótrên mỗi giá trịn) thì điều này kết thúc bằng một thuật toán không hiệu quả theo cấp số nhân trong kích thước đầu vào.Ôi(m)Ôi(1)kn

Một cách tiếp cận thay thế sẽ được đi qua các giá trị có thể có của (đó là đủ để kiểm tra { 2 , 3 , ... , 2 log m } ) và cho mỗi lần kiểm tra cho tốt n giá trị. Sau đó chúng ta có thể sử dụng: ( nk{2,3,,2logm}n

(nk)k<(nk)<nkk!

Vì vậy, đối với một trao chúng ta chỉ cần kiểm tra n giá trị trong khoảng [ kkn, Làm như vậy bằng cách sử dụng tìm kiếm nhị phân (khikcố định, ( n[mk!k,mkk]k đang tăng đơn điệu trongn), điều này mang lại một thuật toán đa thức chạy trongO(log2m).(nk)nÔi(đăng nhập2m)

Điều này vẫn có vẻ không hiệu quả đối với tôi và tôi đoán rằng điều này có thể được giải quyết trong thời gian tuyến tính (ở kích thước đầu vào).


4
Bạn đã thử những gì cho đến nay? Gợi ý: Giả sử cũng được đưa ra. Bạn có thể giải quyết điều này sau đó? Phạm vi của các giá trị có thể cho n là gì? Hoặc, giả sử k đã được đưa ra; bạn có thể giải quyết nó trong trường hợp đó? Phạm vi của các giá trị có thể cho k là gì? nnkk
DW

Câu trả lời:


1

Không đúng . Ví dụ ( 9(nk)k<(nk).(92)=36<49=(92)2

Tôi chưa (chưa) tìm thấy một giải pháp tinh tế bằng cách sử dụng các thuộc tính số học của các hệ số nhị thức, tuy nhiên tôi có thể đề xuất một giải pháp hơi tàn bạo nếu điều đó giúp :-)

Bạn có thể, đối với mỗi , giải quyết cho n bằng cách lấy một đoán ban đầu (nói k kn ) và sử dụng phương pháp phân tích như Newton-Raphson. Bạn muốn giải quyết ( nk!mk. Đạo hàm của vế trái đối vớin(ψ(n+1)-ψ(n-k+1)) ( n(nk)m=0n trong đóψlà hàm digamma, dễ tính toán.(ψ(n+1)ψ(nk+1))(nk)ψ

Độ phức tạp của tìm kiếm Newton-Raphson chỉ phụ thuộc vào độ phức tạp của tính toán hàm và đạo hàm của nó, và số chữ số cần thiết cho giải pháp (trong trường hợp của chúng tôi, chúng tôi chỉ cần số nguyên gần nhất).

Vì vậy, tổng thể cho mỗi tìm kiếm phải là O ( 1 ) (giả sử, như bạn đã làm, việc tính toán một hệ số nhị phân mất thời gian không đổi), do đó tổng độ phức tạp của thuật toán sử dụng giới hạn của bạn cho k sẽ là O ( log ( m ) ) .kO(1)kO(log(m))


2
Trong khi tôi đồng ý giới hạn đã tắt (xem chỉnh sửa, cảm ơn vì điều đó), bạn có thể giải thích lý do tại sao tìm kiếm, đưa ra mất O ( 1 ) không? kO(1)
RB
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.