web-dev-qa-db-fra.com

Quelles sont les complexités temporelles des différentes structures de données?

J'essaie de lister la complexité temporelle des opérations des structures de données communes telles que les tableaux, l'arbre de recherche binaire, le tas, la liste chaînée, etc., et en particulier, je fais référence à Java. Ils sont très fréquents, mais je suppose que certains d’entre nous n’ont pas confiance en la réponse exacte. Toute aide, en particulier les références, est grandement appréciée.

Par exemple. Pour une liste chaînée: La modification d'un élément interne est O (1). Comment peux-tu le faire? Vous DEVEZ pour rechercher l'élément avant de le modifier. De plus, pour le vecteur, l'ajout d'un élément interne est donné par O (n). Mais pourquoi ne pouvons-nous pas le faire en temps constant amorti en utilisant l'indice? S'il vous plaît corrigez-moi si je manque quelque chose.

Je publie mes découvertes/suppositions comme première réponse.

78
Bhushan

Tableaux

  • Définir, vérifier élément à un index particulier: O (1)
  • Recherche : O (n) si le tableau n'est pas trié et O (log n) si le tableau est trié et si une recherche binaire est utilisée,
  • Comme indiqué par Aivean , il n'y a pas d'opération Delete disponible sur les tableaux. Nous pouvons supprimer symboliquement un élément en lui attribuant une valeur spécifique, par exemple. -1, 0, etc. selon nos besoins
  • De même, Insert pour les tableaux est fondamentalement Set comme mentionné au début

ArrayList:

  • Ajouter : Amortisé O (1)
  • Supprimer : O (n)
  • Contient : O (n)
  • Taille : O (1)

Liste liée:

  • Insérer : O (1) , si cela est fait en tête, O (n) si vous êtes ailleurs car nous devons atteindre cette position en parcourant linéairement la liste chaînée.
  • Suppression de : O (1) , si cela est fait en tête, O (n) si vous êtes ailleurs car nous devons atteindre cette position en parcourant linéairement la liste chaînée.
  • Recherche : O (n)

Liste doublement chaînée:

  • Insérer : O (1) , si cela est fait en tête ou à la queue , O (n) si vous êtes ailleurs car nous devons atteindre cette position en parcourant linéairement la liste chaînée.
  • Suppression de : O (1) , si cela est fait en tête ou en queue , O (n) si vous êtes ailleurs car nous devons atteindre cette position en parcourant linéairement la liste chaînée.
  • Recherche : O (n)

Empiler:

  • Appuyez sur : O (1)
  • Pop : O (1)
  • Top : O (1)
  • Rechercher (un type de recherche, en tant qu'opération spéciale): O (n) (Je suppose)

File d'attente/Deque/File circulaire:

  • Insérer : O (1)
  • Supprimer : O (1)
  • Taille : O (1)

Arbre de recherche binaire:

  • Insérer, supprimer et rechercher : cas moyen: O (log n) , Pire des cas: O (n)

Arbre rouge-noir:

  • Insérer, supprimer et rechercher : cas moyen: O (log n) , Pire des cas: O (log n)

Tas/Priorité Queue (min/max):

  • Trouver Min/Trouver Max : O (1)
  • Insérer : O (log n)
  • Supprimer Min/Supprimer Max : O (journal n)
  • Extrait Min/Extrait Max : O (log n)
  • Recherche, suppression (si fourni): O (n) , nous devrons scanner tous les éléments car ils ne sont pas ordonnés comme BST

HashMap/Hashtable/HashSet:

  • Insérer/supprimer : O (1) amorti
  • Redimension/hachage : O (n)
  • Contient : O (1)
217
Bhushan