Avantages de listes liées au cours des arbres binaires?
Le titre est principalement auto-explicatif: quels sont les avantages de listes liées au cours des arbres binaires? Le seul cas que je peux penser de ce qui dans une liste chaînée est plus il est efficace pour itérer sur chaque élément, dans ce cas, c'est encore assez proche. On dirait des arbres binaires sont plus rapides à la fois l'accès aux données et l'insertion de nouveaux éléments. Alors pourquoi utiliser une liste chaînée?
Quels sont les avantages d'un arbre binaire sur un 17-ary arbre? Si 2 est meilleure que 1, 17 est beaucoup mieux que 2, à droite? 🙂
Seulement si vous pouvez faire 17 comparaisons en une seule opération.
Sur le dessus de tout ce qui est mentionné déjà, les listes chaînées sont utiles pour la mise en œuvre d'autres données-structures, comme les piles et les files d'attente.
Quels sont les avantages de pommes sur les oranges?
starblue: le manque de tranches individuelles rend infix consommation O(1) au lieu de O(n), et les comestibles peel tend à abaisser le facteur constant, trop.
Seulement si vous pouvez faire 17 comparaisons en une seule opération.
Sur le dessus de tout ce qui est mentionné déjà, les listes chaînées sont utiles pour la mise en œuvre d'autres données-structures, comme les piles et les files d'attente.
Quels sont les avantages de pommes sur les oranges?
starblue: le manque de tranches individuelles rend infix consommation O(1) au lieu de O(n), et les comestibles peel tend à abaisser le facteur constant, trop.
OriginalL'auteur Michael Dickens | 2010-01-10
Vous devez vous connecter pour publier un commentaire.
Si la queue d'une liste chaînée est stocké, puis l'insertion dans une liste chaînée est décidément plus vite que l'insertion dans un arbre binaire. L'Insertion dans un arbre binaire est O(N) au pire des cas en O(log N) au mieux) si elle est déséquilibrée. Si c'est équilibré, les insertions sont O(log N), mais il y a du ménage impliqués dans le maintien de l'équilibre. L'Insertion dans une liste chaînée est O(1) si la queue est conservé.
Aussi, comme BillyONeal mentionné, un arbre binaire est généralement une structure associative, alors que les listes chaînées sont pas.
Un arbre est inutile si concept de genre n'est pas appliquée. Cela peut ne pas être un ordre lexical, peut-être, mais certains index. Dans tous les cas, un chemin d'accès doit être suivie afin de trouver le nœud correct pour ajouter une nouvelle valeur, ce qui signifie encore O(log N) et O(N) au pire. Un O(1) insertion ne peut s'appliquer si le nœud vers lequel un élément est ajouté est sans importance, mais dans ce cas, les recherches sont en O(N), et il n'y a pas d'organisation de données, de sorte que les frais généraux d'un arbre qui ne procure aucun avantage.
Papa, l'Insertion est un terme ambigu, quand on parle de listes chaînées. Ajouter est en O(1) opération d'insertion est O(n).
P Papa: Mon compilateur ici construit un AST. C'est un arbre qui n'est pas triée par n'importe quelle touche, mais encore très utile. 🙂
Depuis la définition de "trier" est "mettre en ordre", je dirais que oui, c'est bien, mais c'est un sens sémantique de l'argument. Le point est que, étant donné un état, un arbre doit être traversée pour trouver l'endroit approprié pour ajouter un nouvel élément. Il doit avoir une certaine notion de "suivre ce chemin pour arriver à ce nœud. C'est le seul bénéfice d'arbres et de toute leur raison d'être. Un arbre avec pas de concept de commande est vide de sens.
OriginalL'auteur P Daddy
Il est plus facile/rapide pour supprimer des éléments d'une liste par rapport à un arbre binaire qui pourrait nécessiter quelques opérations de fixer l'arbre.
OriginalL'auteur tomzx
Une liste chaînée n'est généralement pas utilisé comme un conteneur associatif (LIRE: ne Pas être utilisé comme un dictionnaire) -- seulement comme un littéral liste d'éléments, comme un tableau. Arbres binaires de la performance telle une simple structure de données est souhaitée est pauvre.
OriginalL'auteur Billy ONeal
Dans la liste, les objets sont commandés par le conteneur lui-même, de sorte que vous n'avez pas besoin d'avoir une fonction de comparaison pour les objets.
OriginalL'auteur Antti Huima
Une question juste. J'aime utiliser le conteneur que la plupart des "étroitement" correspond à mes besoins. Par exemple, vous pouvez utiliser une liste quand vous avez besoin d'une file d'attente sans réelle conséquence soit... mais... les files d'attente sont hautement optimisé pour cette tâche spécifique de sauter hors de l'avant, et de l'insérer à l'arrière, sans aucun supplément de pointeurs, ou quoi que ce soit. En utilisant le plus approprié de la classe, vous pouvez être sûr que vous êtes de ne pas obtenir des extra peluches, même si elle a le même Grand-O. Parfois ces constantes cachées ne question.
OriginalL'auteur mpen
Il dépend essentiellement de scénario. Si la queue de la liste chaînée est maintenu puis de l'insertion est rapide dans la liste chaînée. La suppression est assez rapide dans la liste, mais dans le cas de la recherche, il est préférable dans les arbres( o(log(n) pour la hauteur de l'équilibre de l'arbre ), tandis que o(n) dans la liste liée.
OriginalL'auteur GG.
Je suppose que vous parlez d'une réelle binaires de recherche arbres où les nœuds sont ajoutés à l'aide d'algorithmes pour maximiser la performance de récupération. Par opposition à un simple arbre où chaque nœud a un maximum de 2 nœuds enfants.
Une liste chaînée est souvent non triés et donc l'ajout de nouveaux nœuds est tout simplement un O(1) fonctionnement normalement en ajoutant à la queue de la liste.
D'autre part un arbre binaire devez stocker des nœuds dans un mécanisme de traitement des commandes (et, éventuellement, de faire respecter l'équilibrage) pour fournir un moyen plus efficace de la recherche et de l'extraction de l'opération.
Si votre algorithme n'a PAS besoin de récupérer des éléments de façon très efficace tout aussi, efficace tri des articles, une liste chaînée est probablement tout ce que vous devez.
Files d'attente et les Piles sont des exemples de structures de données qui peuvent être joyeusement mis en œuvre à l'aide d'une liste liée.
Remarque: l'Insertion d'une liste chaînée est une autre (plus lent) fonctionnement de base plus/ajouter. Insertion nécessite souvent traversée le long de la liste jusqu'à ce que la position est trouvée, O(n) où n est la longueur de la liste. Un ajout est tout simplement l'ajout de la queue de la liste (donc O(1))
OriginalL'auteur Ash