Esempi notevoli dell'idea della radice quadrata nell'analisi della complessità


15

max{k,n/k}k=n

  • algoritmo baby-step a passo gigante per il calcolo del logaritmo discreto in O(n) ,
  • conteggio dell'intervallo ortogonale 2D statico nella memoria O(n) e nella memoria O(n) ,
  • coda di priorità con EXTRACT-MIN in O(nk) e DECREASE-KEY in O(1) ,
  • colorare un grafico a 3 colori con colori O(n) in tempo polinomiale,

solo per citarne alcuni.

Sebbene tali algoritmi siano spesso non ottimali, sono facili da capire per gli studenti e buoni per dimostrare rapidamente che i limiti ingenui non sono ottimali. Inoltre, le strutture di dati con idee a radice quadrata sono talvolta più pratiche delle loro controparti basate su albero binario a causa della facilità di utilizzo della cache (senza considerare le tecniche ignare della cache). Ecco perché do un bel po 'di attenzione a questo argomento durante l'insegnamento.

Sono interessato ad esempi più distintivi di questo tipo. Quindi sto cercando eventuali algoritmi (preferibilmente eleganti), strutture di dati, protocolli di comunicazione ecc. La cui analisi si basa sull'idea della radice quadrata. I loro asintotici non devono essere ottimali.


Mi dispiace se la domanda è un po 'vaga; sentiti libero di migliorare.
Dmytro Korduban,

Questo dovrebbe essere CW?
Suresh Venkat,

2
@Suresh: se la regola “big-list ⇒ CW” è ancora in vigore, allora sì, dovrebbe essere CW.
Tsuyoshi Ito,


è un trucco di base in tutti i recenti algoritmi per i modelli di riduzione delle mappe
Sasho Nikolov

Risposte:


10

Il documento Sublinear Geometric Algorithms di Chazelle, Liu e Magen (STOC 2003, SICOMP 2006) ha diverse applicazioni intelligenti del seguente trucco di campionamento casuale. Variazioni dello stesso trucco erano state precedentemente utilizzate da Gärtner e Welzl [ DCG 2001 ], che citano la prima edizione di CLR (1990).

Supponiamo che ci venga fornito un elenco di numeri circolari collegati ordinati, memorizzati in un blocco contiguo di memoria. Cioè, abbiamo due matrici e , doveN e x t [ 1 .. n ]Key[1..n]Next[1..n]

  • nKey[1..n] memorizza un set di numeri in ordine arbitrario ;n
  • Se è il numero più grande nel set, è il numero più piccolo nel set; altrimenti, è il numero più piccolo nel set che è più grande di .K e y [ N e x t [ i ] ] K e y [ N e x t [ i ] ] K e y [ i ]Key[i]Key[Next[i]]Key[Next[i]]Key[i]

Quindi possiamo trovare il successore di un dato numero nel tempo previsto come segue:O ( xO(n)

  • Scegli un campione casuale di elementi dell'array . Sia il campione più grande che è più piccolo di (o il campione più grande, se tutti i campioni sono maggiori di ). KeyKey[j]xxnKeyKey[j]xx

  • Seguire i puntatori da fino a quando non vediamo un numero maggiore o uguale a (dopo aver eseguito il wrapping se tutti i campioni fossero più grandi di ).K e y [ j ] x xNextKey[j]xx

Un'applicazione relativamente semplice del lemma di Yao implica che il limite di tempo atteso di sia ottimale. Qualsiasi algoritmo deterministico per questo problema richiede tempo nel peggiore dei casi.Ω(n)O(n)Ω(n)


10

Ci sono triangoli in qualsiasi grafico -edge e che possono essere trovati nel tempo . Esistono molti modi per farlo, ma penso che uno dei primi sia Itai e Rodeh (STOC 1977) che forniscono un algoritmo che attraversa una sequenza di iterazioni a tempo lineare, ognuna delle quali rimuove una foresta di spanning dal grafico. Nelle prime iterazioni quando la foresta rimanente ha almeno componenti, l'algoritmo rimuove almeno bordi per passo e nelle ultime iterazioni quando ha al massimo componenti, il grado massimo è e si riduce di almeno uno in ciascuno passo. Quindi il numero totale di iterazioni è al massimom O ( m 3 / 2 ) n - k k n - k k m / k + k O ( O(m3/2)mO(m3/2)nkknkkm/k+k e scegliendo il giusto compromesso si ottiene il limite complessivo di sulle iterazioni e in tempo.O(m 3 / 2 )O(m)O(m3/2)

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.