2009-11-18 13 views
1

J'ai lu dans les spécifications des graphiques implémentés avec la liste d'adjacence que l'ajout d'arêtes est fait en temps constant. MAIS cela nécessiterait une recherche de nœud avec O (1). Je voudrais la meilleure performance possible. La question ici est quel type de données me donnerait cela. Hashmap a été considéré, le pire des cas avec hashmap est toujours O (n). Puis-je utiliser un tableau pour cela?Liste d'adjacence de graphes Comment implémenter O (1) recherche de nœuds/vertex. Array?

Les nœuds peuvent être de n'importe quel type de données, génériques. Cela pourrait-il être fait avec une fonction de hachage générant des valeurs d'index basées sur le nœud seul? Cela me donnerait O (1). Bien sûr, je peux juste capitaliser et utiliser LinkedList avec indexOf. Le temps constant est le meilleur.

+0

En supposant que vous ayez un bon hachage, on suppose généralement que HashMap a O (1) runtime, en particulier pour les devoirs. – notnoop

+0

J'ai demandé à mon chef de groupe, un diplômé en phd. Et O (1) est prévu temps de fonctionnement, et ce que j'ai besoin d'analyser est le pire des cas. – Algific

Répondre

1

Quelque chose avec une étape de hachage vous courez le risque de collision, donc le pire des cas (mais peu probable) est Omega (N).

La meilleure performance asymptotique garantie pour l'insertion et la récupération simultanées lorsque vous travaillez avec des listes est O (log N). Vous obtiendrez cela si vous stockez vos noeuds dans quelque chose comme un tas ou un arbre équilibré. Vous ne pouvez pas faire mieux sur les deux opérations car cela vous permettrait de violer le O (N log N) prouvable lié au tri.

+0

En général, oui, absolument. Le hachage parfait évite cependant complètement les collisions, à condition que le jeu d'entrée soit limité et connu. –