è ricerca in ampiezza o ampiezza primo attraversamento possibile senza l'utilizzo di una coda?

StackOverflow https://stackoverflow.com/questions/855899

Domanda

Per quanto mi ricordo e controllato, il solito modo per attraversare un albero o strisciare l'ampiezza web prima (BFS) è quello di utilizzare una coda. C'è in realtà un modo per la sua attuazione non si usa una coda?

È stato utile?

Soluzione

Si dovrebbe utilizzare una coda, come la sua più facile da implementare. Inoltre, una coda consente più macchine di lavorare insieme (un sito code, mentre un altro POP siti al largo della coda di attraversare).

L'unico altro modo di vedere per fare questo è quello di utilizzare la ricorsione (molto più difficile, e utilizza solo marginalmente più o meno memoria).

Altri suggerimenti

So che questa domanda è vecchia ormai, ma volevo solo rispondere. Si può fare questo con gli array, liste concatenate (o qualsiasi altro contenitore lineare) e senza ricorsione. Tenere due contenitori, old e new, e di swap <=> con <=> quando si attraversano tutti gli elementi in <=>. Molto simile alla realizzazione di coda.

In Python sarebbe simile:

def breadth_first(root):
    if not root:
        return
    old = []
    new = []
    old.append(root)
    while old:
        for n in old:
            process(n)  # Do something
            if n.left:
                new.append(n.left)
            if n.right:
                new.append(n.right)
        old = new
        new = []

complessità runtime sarebbe lo stesso come l'implementazione di coda, O (n).

Con la ricorsione. Ma la coda è nella pila ...

se avete a cuore l'ordinazione, coda di utilizzo. coda mantiene l'ordinamento inserimento. oppure si può usare l'esecuzione di lista, per esempio, due liste di array, per alternare. Ma fondamentalmente, elenco conserva ordinare troppo.

se non si cura di ordinazione, è possibile utilizzare qualsiasi implementazioni set. set non conservi questo ordinamento.

Per esempio, in attuazione BFS, se non vi interessa l'ordinamento dei nodi, è possibile utilizzare due set, vecchi e nuovi di alternare, piuttosto che una coda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top