Complessità nella ricerca del coefficiente binomiale che equivale a un numero


19

Supponiamo di ottenere un numero m (usando i bit O(logm) nella codifica binaria).

Quanto velocemente riesci a trovare (o determinare che non esiste) ?

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

Ad esempio, dato l'ingresso , si può produrre n = 27, k = 10 .n = 27 , k = 10m=8436285n=27,k=10


Un algoritmo ingenuo per il problema dovrebbe andare oltre tutti i possibili valori per n e cercare un valore di k che soddisfi la proprietà.

Una semplice osservazione è che non è necessario controllare valori di n inferiori a logm o maggiori di O(m) . Tuttavia (anche se potessimo controllare solo O(1) possibili k valori per n valore) questo finisce in un algoritmo inefficiente che è esponenziale nella dimensione dell'input.

Un approccio alternativo sarebbe quello di esaminare i possibili valori di k (è sufficiente controllare {2,3,,2logm} ) e per ogni controllo per possibili n valori. Possiamo quindi usare:

(nk)k<(nk)<nkk!

Quindi per un dato k dobbiamo solo controllare n valori nell'intervallo [mk!k,mkk] , facendo così usando la ricerca binaria (quando k è fisso, (nk) aumenta monotonicamente in n ), questo dà un algoritmo polinomiale in esecuzione in O(log2m) .

Questo mi sembra ancora inefficiente e suppongo che questo potrebbe essere risolto in tempo lineare (nella dimensione di input).


4
Cosa hai provato fino ad ora? Suggerimento: supponiamo che anche n stato dato. Potresti risolverlo allora? Qual è l'intervallo di valori possibili per n ? Oppure, supponiamo che sia stato dato k ; potresti risolverlo in quel caso? Qual è l'intervallo di valori possibili per k ?
DW

Risposte:


1

Non è vero che (nk)k<(nk) . Ad esempio (92)=36<49=(92)2 .

Non ho (ancora) trovato una soluzione sottile usando le proprietà aritmetiche dei coefficienti binomiali, tuttavia posso suggerire una soluzione un po 'bruta se questo aiuta :-)

Puoi, per ogni , risolvere per prendendo un'ipotesi iniziale (dire ) e usando un metodo analitico come Newton-Raphson. Vuoi risolvere . La derivata del lato sinistro rispetto a è dove è la funzione digamma, che è facile da calcolare .n k kn( nk!mkn(ψ(n+1)(nk)m=0n ψ(ψ(n+1)ψ(nk+1))(nk)ψ

La complessità di una ricerca Newton-Raphson dipende solo dalla complessità del calcolo della funzione e della sua derivata e dal numero di cifre richieste per la soluzione (nel nostro caso abbiamo solo bisogno del numero intero più vicino).

Quindi nel complesso per ogni la ricerca dovrebbe essere (supponendo, come sembra che tu abbia fatto, che calcolare un coefficiente binomiale richieda un tempo costante), quindi la complessità totale per l'algoritmo che usa i tuoi limiti per sarebbe .O ( 1 ) k O ( log ( m ) )kO(1)kO(log(m))


2
Mentre sono d'accordo i limiti erano fuori (vedi modifica, grazie per quello), puoi spiegare perché la ricerca, dato prende ? O ( 1 )kO(1)
RB
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.