Kompleksitas menemukan koefisien binomial yang sama dengan angka

19

Asumsikan Anda mendapatkan angka m (menggunakan O(logm) bit dalam pengkodean biner).

Seberapa cepat Anda dapat menemukan (atau menentukan tidak ada) ?

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

Sebagai contoh, mengingat input , seseorang dapat menghasilkan .n = 27 , k = 10m=8436285n=27,k=10


Algoritma naif untuk masalah akan membahas semua nilai yang mungkin untuk , dan mencari nilai yang memenuhi properti.knk

Pengamatan sederhana adalah bahwa tidak perlu memeriksa nilai n lebih kecil dari logm atau lebih besar dari O(m) . Namun (bahkan jika kita hanya dapat memeriksa O (1) nilai k yangO(1) mungkin per nilai n ) ini berakhir dengan algoritma yang tidak efisien yang eksponensial dalam ukuran input.kn

Suatu pendekatan alternatif adalah memeriksa nilai k (cukup untuk memeriksa {2,3,,2logm} ) dan untuk setiap pemeriksaan untuk kemungkinan n nilai. Kita kemudian dapat menggunakan:

(nk)k<(nk)<nkk!

Jadi untuk tertentu, kita hanya perlu memeriksa nilai dalam rentang , Melakukan hal itu menggunakan pencarian biner (ketika diperbaiki, n \ pilih k meningkat secara monoton dalam n ), ini memberikan algoritma polinomial yang berjalan di O (\ log ^ 2 m) .n [ kknk ( n[mk!k,mkk]k nO(log2m)(nk)nO(log2m)

Ini masih tampak tidak efisien bagi saya dan saya kira ini dapat diselesaikan dalam waktu linier (dalam ukuran input).

BPR
sumber
4
Apa yang sudah Anda coba sejauh ini? Petunjuk: Asumsikan n juga diberikan. Bisakah Anda menyelesaikan ini? Berapa kisaran nilai yang mungkin untuk n ? Atau, anggap k diberikan; dapatkah Anda menyelesaikannya dalam kasus itu? Berapa kisaran nilai yang mungkin untuk k ?
DW

Jawaban:

1

Tidak benar bahwa (nk)k<(nk) . Misalnya (92)=36<49=(92)2 .

Saya belum (belum) menemukan solusi halus menggunakan properti aritmatika dari koefisien binomial, namun saya dapat menyarankan yang agak bruteforce jika itu membantu :-)

Anda dapat, untuk setiap , menyelesaikan untuk dengan mengambil tebakan awal (katakanlah ) dan menggunakan metode analitis seperti Newton-Raphson. Anda ingin menyelesaikan . Turunan dari sisi kiri sehubungan dengan adalah mana adalah fungsi digamma, yang mudah untuk dihitung .n k kn( nk!mkn(ψ(n+1)-ψ(n-k+1)) ( n(nk)m=0n ψ(ψ(n+1)ψ(nk+1))(nk)ψ

Kompleksitas pencarian Newton-Raphson hanya tergantung pada kompleksitas komputasi fungsi dan turunannya, dan jumlah digit yang diperlukan untuk solusi (dalam kasus kami, kami hanya membutuhkan bilangan bulat terdekat).

Jadi secara keseluruhan untuk setiap pencarian harus (dengan asumsi, seperti yang tampaknya telah Anda lakukan, bahwa menghitung koefisien binomial membutuhkan waktu yang konstan), maka total kompleksitas untuk algoritma menggunakan batas Anda untuk adalah .O ( 1 ) k O ( log ( m ) )kO(1)kO(log(m))

David Durrleman
sumber
2
Sementara saya setuju bahwa batasnya tidak aktif (lihat edit, terima kasih untuk itu), dapatkah Anda menjelaskan mengapa pencarian, mengingat mengambil ? O ( 1 )kO(1)
RB