Which is most efficient?
Vago e difficile da rispondere. Le complessità computazionali sono tutte ben definite. Se questo è ciò che intendi per efficienza, non c'è un vero dibattito. In effetti, tutti i buoni algoritmi vengono forniti con prove e fattori di complessità.
Se intendi "tempo di esecuzione" o "uso della memoria", dovrai confrontare le implementazioni effettive. Quindi entrano in gioco la lingua, il tempo di esecuzione, il sistema operativo e altri fattori, rendendo difficile rispondere alla domanda.
Which is easiest to implement?
Vago e difficile da rispondere. Alcuni algoritmi possono sembrare complessi per te, ma per me banali.
Which is most often used?
Vago e difficile da rispondere. Prima c'è il "da chi?" parte di questo? Haskell solo? Che dire di C o C ++? In secondo luogo, c'è il problema del software proprietario in cui non abbiamo accesso alla fonte per fare un sondaggio.
But crucially, which do you recommend?
I assume this belongs here because it's open to debate.
Una corretta. Dato che i tuoi altri criteri non sono molto utili, questo è tutto ciò che otterrai.
È possibile ottenere l'origine di un gran numero di algoritmi ad albero. Se vuoi imparare qualcosa, potresti semplicemente implementare tutti quelli che riesci a trovare. Piuttosto che chiedere una "raccomandazione", basta raccogliere tutti gli algoritmi che riesci a trovare.
Ecco l'elenco:
link
Ci sono sei quelli popolari definiti. Inizia con quelli.