Qual è la definizione "giusta" dei limiti superiore e inferiore?


19

Sia f(n) il peggior tempo di esecuzione di un problema sull'input di dimensione n . Facciamo un po 'strano il problema fissando f(n)=n2 per n=2k ma f(n)=n per n=2k+1 .

  1. Quindi, qual è il limite inferiore del problema? Il modo in cui l'ho capito è solo il limite inferiore di f(n) . Ma sappiamo che f(n)=Ω(n2) implica che esiste una costante k , n0 tale che per tutti n>n0 , f(n)>kn2 , il che non è vero. Quindi sembra che possiamo solo dire f(n)=Ω(n). Ma di solito, chiameremo il problema ha un limite inferiore di Ω(n2) , giusto?

  2. Supponendo che g(n)=Ω(n2) , ciò significa che esiste una costante k , n0 tale che per tutto n>n0 , g(n)>kn2 . Supponiamo anche che un problema abbia il tempo di esecuzione g(n) . Se possiamo ridurre questo problema per tutti i numeri primi n a un altro problema (con le stesse dimensioni di input), possiamo dire che il tempo di esecuzione dell'altro problema ha un limite inferiore di Ω(n2) ?


12
Questo è il motivo per cui i matematici usano lim sup e lim inf.
Peter Shor,

1
Quindi penso di capire la differenza. Penso che le persone in post capiranno Omega come infinitamente spesso. Ma nel caso in cui volessi fare una distinzione esplicita, ci sono delle notazioni che posso usare oltre a espanderlo?
Wei Yu,

3
@Wei Yu: lim sup e lim inf. Tu dici per qualche costantekse si vuole dire cheg(n)kn2infinitamente spesso e lim infg(n)
lim supg(n)n2k
kg(n)kn2se si desidera direg(n)kn2per tutti sufficientemente grandin. Soprattutto se stai parlando con i matematici.
lim infg(n)n2k
g(n)kn2n
 
Peter Shor,

12
@Wei: per la maggior parte dei teorici della complessità (vedi Lance di seguito), la tua funzione è θ (n ^ 2); per la maggior parte degli algoritmi (vedi Knuth o CLRS), la tua funzione è Ο (n ^ 2) e Ω (n). Entrambe le notazioni sono quasi, ma non completamente, standard nelle loro sottocomunità; a peggiorare le cose, queste due sottocomunità si sovrappongono pesantemente! Quindi, se importa quale notazione usi, devi dire esplicitamente quale notazione stai usando. (Fortunatamente, raramente importa.)
Jeffε

2
@Jeffe. Credo che dovresti pubblicare il tuo commento come risposta.
Chazisop,

Risposte:


13

La giusta definizione di è che esiste qualche k > 0 tale che per infinitamente molti n , f ( n ) k n 2 . La definizione infinitamente frequente di limiti inferiori gestisce i tuoi problemi ed è il modo in cui li utilizziamo nella pratica.f(n)=Ω(n2)k>0nf(n)kn2

Ho pubblicato un post su questo nel 2005.

Alcuni libri di testo ottengono questa definizione, altri no.


14
Knuth non è d'accordo con te: portal.acm.org/citation.cfm?id=1008329
Jeffε

4
Anche CLRS e Wikipedia non sono d'accordo con te. La definizione infinitamente frequente è un'alternativa degna di nota, ma sembra essere meno utilizzata.
Anonimo

penso che tutte queste definizioni concordino quando l'insieme delle eccezioni è la misura 0.
Carter Tazio Schonwald

2
Il problema con le definizioni "infinitamente spesso" è che di solito non escludono "infinitamente spesso no". Quindi abbiamo l'orribile conseguenza che con questa definizione ma anche f ( n ) = o (f(n)=Ω(n2) , dove Ω e of(n)=o(n+1)Ωo sono intesi come ordini rigorosi in un certo senso. Non mi piace molto. Almeno il suggerimento di @ Carter sulle eccezioni della misura 0 è un po 'meno orribile, pur consentendo un ordine più fine del solito.
András Salamon,

2
@Jukka: No, sto abusando qui. Come suggerisci, devo correggere la mia tesi per usare O invece di o . Permettetemi quindi ribadire l'obiezione reale senza utilizzare o o O . Con "infinitamente spesso", si ha l'anomalia che n = Ω ( f ( n ) ) , f ( n ) = Ω ( n 2 ) , eppure n Ω ( n 2 ) . Quindi Ω non costituisce nemmeno un preordine.oOooOn=Ω(f(n))f(n)=Ω(n2)nΩ(n2)Ω
András Salamon,

4

Con la definizione di Knuth puoi affermare solo . Come notate , questo non è intuitivo e accade per le funzioni che Vitányi e Meertens definiscono "selvagge". Propongono di definiref(n)Ω(n)

Ω(f(n))={gδ>0:n0>0:n>n0:g(n)δf(n)}.

(È uguale alla definizione di Lance.) Con questa definizione .f(n)Ω(n2)


2

Non conosco il più ampiamente usato, ma credo di sapere dell'uso più antico (comunque per l'informatica).

Nel documento del 1965 di Hartmanis & Stearns "Sulla complessità computazionale degli algoritmi", Corollary 2.1 è:

Se e T sono funzioni temporali tali che inf n T ( nUTquindiSUSTinfnT(n)U(n)0SUST

dove è la classe di complessità di tutti i problemi calcolabili in O ( K ( n ) ) . T (n) deve obbedire a T ( n ) n / k per alcuni interi k e tutti n e T ( n ) T ( n +SKO(K(n))T(n)n/kknT(n)T(n+1) , ma non deve essere costruibile nel tempo.

La tua funzione obbedisce alla prima regola per k=1 ma non obbedisce alla seconda regola.

Corollary 2.2 è il destinatario di quanto sopra e utilizza limit supremum, ma ha ancora questi requisiti. Immagino che con il passare degli anni gli algoritmi siano diventati più complessi, è possibile che i requisiti siano stati ridotti.


2

Penso che dovremmo distinguere tra due cose:

  • un limite inferiore per una funzione
  • un limite inferiore per un problema (algoritmo)

Per le funzioni, quando fissiamo un ordine, ne deriva la definizione di lowerbound / upperbound . Se la relazione d'ordine è la majorization asintotica (ignorando i fattori costanti)

fg:c,nm>n. f(x)cg(x)

quindi la definizione è la solita definizione di e Ω . Entrambi sono ampiamente utilizzati in altre aree come la combinatoria.OΩ

Ma quando parliamo di un limite inferiore per un problema (un algoritmo) ciò che vogliamo davvero dire è che il problema richiede una certa quantità di risorse (per eseguire l'algoritmo per risolvere il problema). Spesso le classi di complessità sono parametrizzate da funzioni come , e diciamo semplicemente che il problema è limitato da una funzione, ma funziona solo per funzioni piacevoli (ad es. Il tempo di esecuzione dell'algoritmo è monotono, ecc.). Quello che vogliamo dire in questi casi è che abbiamo bisogno di n 2 tempo di esecuzione per risolvere il problema, cioè meno di n 2Time(t(n))n2n2o(t(n))

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.