Beh, non ne sono sicuro, ma ci provo. Il fattoriale è, in sostanza, un gamma function. E la funzione gamma è definita non solo per i numeri naturali, ma anche per i numeri reali. Quindi, c'è, in teoria, una funzione gamma inversa, che è definita per casi, dove factorial è indefinito (ad esempio, non conosciamo il fattoriale inverso di 5
, ma sappiamo che la funzione gamma inversa di 5
sarà essere qualcosa intorno a due punti, qualcosa). Secondo MathOverflow, non esiste una formula precisa per la funzione gamma inversa, ma esistono soluzioni approssimative.
Supponiamo che esista la funzione gamma inversa, e scriviamola come InvGamma(N)
. Si tratta di un numero reale (potrebbe essere R +, ma non sono sicuro, non è importante ora, dal momento che il nostro N è sempre positivo, al di là di N == 0 caso, che mi ignorano per ora).
Quindi possiamo usarlo allo stesso modo in cui usiamo altre funzioni che restituiscono un numero reale, quando ci occupiamo di complessità: possiamo floor
(arrotondarlo per difetto). Proprio come facciamo con la complessità log
. Scrivevo usando parentesi quadre (ad esempio log(15) = 1.18
, [log(15)] = 1
).
Poi la complessità del frammento dovrebbe essere O([InvGamma(N)])
, credo.
UPDATE: (ispirato @ risposta 6502): notare che se N
è un numero intero (non è menzionato nel frammento di codice), allora ci sarà un arrotondamento ad ogni passo, che altera complessità in un modo complicato . La soluzione di cui sopra funziona per veri N
s.
Qual è il fattoriale inverso di 5? @FreeNickname – shauryachats
Mi dispiace, mio male. Ti ho capito male. Per qualche ragione, ho pensato a 1/n! essendo un fattoriale inverso. Toglierò il mio commento ora. – FreeNickname
si potrebbe anche provare a chiedere questo su [matematica] (http://math.stackexchange.com/). Dite loro che vieni da uno sfondo cs. Li ho trovati molto utili. (Tanto per essere chiari: io ** non ** dicendo che questo è fuori tema qui) – bolov