Comment pouvez-vous modifier l'algorithme de prim dans le cas où vous connaissez déjà la valeur minimale d'un poids donné? Par exemple, si un graphe est constitué de poids de bord 0 et 1, comment pouvez-vous accélérer l'algorithme de prim?Algorithme Prim optimisé pour les poids de bord connus?
Répondre
La première stratégie semble améliorer la file d'attente prioritaire pour tirer parti de vos données. Si vous savez que les poids sont des valeurs discrètes inférieures à C, vous pouvez remplacer le tas binaire généralement utilisé par un tas de base. De cette façon, vous pouvez facilement obtenir la même complexité algorithmique qu'avec le tas de Fibonacci beaucoup plus difficile à implémenter, ou peut-être même mieux. L'algorithme de Dijkstra utilise exactement les mêmes structures de données et est ici une explication détaillée de la façon de mettre en œuvre un tas de radix pour elle:
http://www.cosc.canterbury.ac.nz/tad.takaoka/alg/spalgs/radixheap.txt
Exemple de code radixheap.cpp se trouve ici:
http://www.cosc.canterbury.ac.nz/tad.takaoka/alg/spalgs/spalgs.html
Vous pouvez simplement appliquer la même structure de données à l'algorithme de Prim que ce texte explique pour l'algorithme de Dijkstra, pour obtenir la complexité O (m + n log C) où m est arêtes, n est sommets et C est le poids maximum. Si vos poids de bord ne sont que de petits entiers, c'est très bien. Pour résumer l'idée du segment de base, les éléments sont placés dans des compartiments en fonction de leur priorité (qui doit être un nombre entier). La plage de valeurs couverte par le godet N est approximativement de taille 2^N, donc trouver le godet adéquat est proportionnel au log du plus grand nombre possible. Lors de l'extraction de l'élément avec la plus petite priorité, les éléments sont parfois redistribués dans des compartiments inférieurs, ce qui entraîne une complexité logarithmique.
Si vous vouliez dire que les poids de bord sont des nombres à virgule flottante arbitraires compris entre 0 et 1, cela n'autorise aucune optimisation. Évidemment, n'importe quel graphique peut être transformé en divisant tous les poids de bord par le poids maximum de bord, les rendant tous entre 0 et 1. Cette transformation ne peut pas faire fonctionner l'algorithme de Prim plus rapidement. Vous pouvez transformer toutes les arêtes en ajoutant le même nombre à toutes les arêtes, ou en les multipliant avec le même nombre positif, sans modifier le résultat du tout.
- 1. Algorithme de Prim
- 2. Algorithme de Prim et Kruskal
- 3. networkx: poids de bord comme valeur calculée
- 4. Algorithme MST de Prim dans O (| V |^2)
- 5. Algorithme de Prim pour les arbres couvrant minimum - confusion dans l'algorithme
- 6. Graphiques acycliques dirigés pondérés: algorithme pour trouver des poids de bord tels qu'ils définissent une fonction de distance?
- 7. Un algorithme optimisé pour faire un tableau distinct
- 8. Algorithme pour donner plus de poids au premier mot
- 9. Algorithme PathFinding: comment gérer efficacement les changements de poids
- 10. Erreur de poids de bord négatif inattendue dans boost :: prim_minimum_spanning_tree
- 11. si les poids de bord sont uniformément distribués entre 0 et 1 prims ou kruskals
- 12. Stockage de poids de bord quadrillé carré dans MATLAB
- 13. Mise en œuvre un algorithme génétique pour l'optimisation du poids
- 14. trier un graphique par son poids de bord. python
- 15. DiagramGraph() en graphe() avec des poids de bord non additionnés, comment additionner des poids?
- 16. Prim MST avec matrice d'adjacence comme paramètre
- 17. poids minimum T de sous-ensemble relié des bords algorithme
- 18. jQuery optimisé pour iPad?
- 19. HTML5 optimisé pour l'iPhone
- 20. Numériser l'image pour les composants connus
- 21. Stockage optimisé pour les grandes séries entières
- 22. Algorithme de courbe parallèle pour les graphiques
- 23. Algorithme pour remplir les slots
- 24. Knapsack Algorithme: Pourquoi nous utilisons poids [i-1] au lieu de [i] en poids
- 25. Récupère les coordonnées de bord après détection de bord (Canny)
- 26. NetworkX: Utiliser la fonction commune pour le calcul de poids de bord
- 27. algorithme pour regrouper tous les cycles Ensemble
- 28. Meilleur algorithme pour trouver toutes les substitutions ultérieures sous un certain poids
- 29. Poids pour les étiquettes de modèle
- 30. Problèmes connus pour VS2010 RTM
-> http://cstheory.stackexchange.com/? – Vlad