Domanda

L'ho imparato in un albero statistico dell'ordine (albero rosso-nero aumentato, in cui ogni nodo $ x $ contiene un campo aggiuntivo che denota il numero di nodi in L'alto albero radicato a $ x $ ) Trovare la $ i $ Le statistiche dell'ordine possono essere eseguite $ O (LG (N)) $ Tempo nel caso peggiore. Ora in caso di un array che rappresenta la serie dinamica degli elementi che trova la $ i $ la statistica dell'ordine può essere raggiunta nella $ O (n) $ Tempo nel caso peggiore. [Dove $ N $ è il numero di elementi].

Ora mi sentivo come trovare un limite superiore stretto per formare una classe $ N $ elemento rosso-albero nero in modo da poter commentare quale alternativa è migliore: "Mantenere Gli elementi impostati in un array e esegui la query in $ o (n) $ tempo "o" mantenimento degli elementi in un albero rosso-nero (formazione di cui richiede $ O (f (n)) $ Time Dice) e quindi eseguire query in $ o (LG (N)) $ TIME ".


.

Quindi un'analisi molto approssimativa è la seguente, inserendo un elemento in una classe $ N $ elemento rosso-nero albero prende $ O (LG (N)) $ Tempo e ci sono $ N $ elementi da inserire, quindi richiede $ O (NLG (N)) $ tempo. Ora questa analisi è piuttosto allentata come quando ci sono solo pochi elementi nell'albero rosso-nero l'altezza è abbastanza inferiore e quindi è il momento di inserire nell'albero.

Ho provato a provare un'analisi dettagliata come segue (ma non è riuscito comunque):

Sia durante il tentativo di inserire la $ j= I + 1 $ Elemento L'altezza dell'albero è più atmosferico $ 2 .lg (I + 1) +1 $ . Per un'appropriata $ c $ , il tempo di funzionamento totale,

$$ t (n) \ leq \ sum_ {j= 1} ^ {n} c. (2.LG (I + 1) +1) $$

$$= c. \ sum_ {i= 0} ^ {i= 0}} {n-1} (2.LG (I + 1) +1) $$ < / P >.

$$= c. \ sinistra [\ sum_ {i= 0} ^ {n-1} 2.LG (I + 1) + \ Sum_ {I= 0} ^ {n-1} 1 \ destra] $$

$$= 2c \ sum_ {i= 0} ^ {i= 0} LG (I + 1) + cn \ tag1 $$

ora

$$ \ sum_ {i= 0} ^ {n-1} LG (I + 1)= LG (1) + LG (2) + LG (3) + ... + LG (N)= LG (1.2.3 ... n) \ tag2 $$

ora $$ \ Prod_ {k= 1} ^ {n} k \ leq n ^ n, \ testo {che è un limite superiore molto allentato} \ tag 3 $$

Utilizzo di $ (3) $ in $ (2) $ e sostituire il risultato in $ (1) $ Abbiamo $ t (n)= o (nlg (n)) $ che è il come l'analisi ruvida ...

Posso fare qualcosa di meglio di $ (3) $ ?


.

Tutti i nodi riferiti sono i nodi interni nell'albero rosso-nero.

È stato utile?

Soluzione

per costruire un albero rosso-nero su $ N $ elementi necessari per trascorrere del tempo $ \ \ omega (n \ Log n) $ , se è consentito confrontare le chiavi degli elementi. Per vedere questo avviso che una visita in ordine di qualsiasi BST visita i nodi in ordine crescente delle loro chiavi.

Se sei stato in grado di costruire un albero rosso-nero in tempo $ t (n)= o (n \ log n) $ allora anche tu in grado di ordinare $ N $ elementi in tempo $ o (t (n) + n)= o (n \ log n)= o (n \ log n)= o (n \ log n)= o (n \ log n)= o (n \ log n)= o (n \ log n)= o (n \ log n)= o (n \ log n)= o (n \ log n)= o (n \ log n)= o ) $ , contraddicando il limite inferiore sull'ordinamento per algoritmi basati sul confronto.

D'altra parte, se gli elementi sono già ordinati, è possibile creare un albero rosso-nero in tempo $ o (n) $ : solo costruire ricorsivamente BST equilibrato, se l'ultimo livello è di colore incompleto i suoi nodi come rosso e colore ogni altro nodo nero. Ciò richiede tempo lineare poiché la complessità del tempo dell'algoritmo ricorsivo può essere descritta dall'equazione di ricorrenza $ t (n)= 2t (n / 2) + o (1) $ .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top