Attualmente sto leggendo this paper e nella pagina cinque, discute le proprietà degli heap binari che considera essere di dominio pubblico. Tuttavia, uno dei punti che fanno è qualcosa che non ho visto prima e non può dare un senso. Gli autori sostengono che se viene fornito un heap binario bilanciato, è possibile elencare gli elementi di quell'heap in ordine ordinato in tempo O (log n) per elemento utilizzando una ricerca standard in larghezza. Ecco la loro dicitura originale:Elenco dei valori in un heap binario nell'ordine ordinato utilizzando la ricerca in ampiezza?
In un heap bilanciato, qualsiasi nuovo elemento può essere inserito in tempo logaritmico. Possiamo elencare gli elementi di un heap in ordine di peso, prendendo il tempo logaritmico per generare ciascun elemento, semplicemente utilizzando la ricerca per ampiezza prima.
Non sono sicuro del significato degli autori. La prima cosa che viene in mente quando si dice "ricerca in ampiezza" sarebbe una ricerca in ampiezza degli elementi dell'albero a partire dalla radice, ma non è garantito elencare gli elementi in ordine, né richiede tempo logaritmico per elemento Ad esempio, l'esecuzione di un BFS su questo min-heap produce gli elementi su ordine non importa quanto si rompere i legami:
1
/\
10 100
/\
11 12
elencati nel presente sempre il 100 prima di 11 o 12, che è chiaramente sbagliata.
Mi manca qualcosa? Esiste una semplice ricerca in ampiezza che è possibile eseguire su un heap per ottenere gli elementi in ordine ordinato utilizzando il tempo logaritmico ciascuno? Chiaramente puoi farlo modificando distruttivamente l'heap rimuovendo ogni volta l'elemento minimo, ma l'intento degli autori sembra essere che questo può essere fatto in modo non distruttivo.
Questo è strano, semplice BFS dovrebbe prendere O (1) per elemento (e non funzionerebbe, come hai detto tu). – svick