Table des matières
Introduction à l'algorithme Prim
1 La touche finale
2. Introduction à l'algorithme
3. Étapes de l'algorithme
4. Diagramme
Implémentation de l'algorithme Prime
1 Le graphique construit
Tutoriel vidéo Java
Maison Java javaDidacticiel Le principe et l'implémentation de l'algorithme Prime en Java (partage de résumé)

Le principe et l'implémentation de l'algorithme Prime en Java (partage de résumé)

Aug 15, 2022 pm 06:32 PM
java

Cet article vous apporte des connaissances pertinentes sur java L'algorithme Prime est un algorithme de recherche exhaustif pour construire un arbre couvrant minimum à partir d'un graphe connecté. Cet article présente principalement le principe et l'implémentation de l'algorithme Prime en Java. Si vous êtes intéressé, vous pouvez en apprendre davantage.

Le principe et l'implémentation de l'algorithme Prime en Java (partage de résumé)

Apprentissage recommandé : "Tutoriel vidéo Java"

Introduction à l'algorithme Prim

1 La touche finale

Dans le processus de spanning tree, traitez les nœuds déjà dans le spanning tree comme un ensemble, et mettre le reste Les nœuds sont considérés comme un autre ensemble et l'arête avec le plus petit poids peut être sélectionnée parmi les arêtes reliant les deux ensembles.

2. Introduction à l'algorithme

Sélectionnez d'abord un nœud, tel que le nœud 1, et placez-le dans l'ensemble U, U={1}, puis les nœuds restants sont V-U={2,3,4, 5. ,6,7}, l'ensemble V est l'ensemble de tous les nœuds du graphe.

Il ne vous reste plus qu'à voir quelle arête a le plus petit poids parmi les arêtes reliant les deux ensembles (U et V-U), et ajouter le nœud associé à l'arête avec le plus petit poids à l'ensemble U. Comme le montre la figure ci-dessus, parmi les 3 arêtes reliant les deux ensembles, l'arête 1-2 a le plus petit poids. Sélectionnez-le et ajoutez le nœud 2 à l'ensemble U, U={1,2}, V - U=. { 3,4,5,6}, comme le montre la figure ci-dessous.

Sélectionnez ensuite la bordure ayant le plus petit poids parmi les bordures reliant les deux ensembles (U et V-U). Comme le montre la figure ci-dessus, parmi les quatre arêtes reliant les deux ensembles, le poids de l'arête du nœud 2 au nœud 7 est le plus petit. Sélectionnez cette arête et ajoutez le nœud 7 à l'ensemble U={1,2,7}. , V-U ={3,4,5,6}.

Continuez ainsi jusqu'à ce que U=V se termine et que le graphique composé de l'arête sélectionnée et de tous les nœuds soit l'arbre couvrant minimum. C'est l'algorithme de Prim.

En regardant intuitivement l'image, il est facile de savoir quelle arête de l'ensemble U à l'ensemble U-V a le plus petit poids. Cependant, la complexité temporelle est trop élevée pour énumérer de manière exhaustive ces arêtes dans le programme et ensuite trouver le minimum. valeur. Ce problème peut être résolu intelligemment en définissant un tableau Closet[j] qui représente le point voisin le plus proche du nœud j dans l'ensemble V-U à l'ensemble U. Lowcost[j] représente la valeur de bord du nœud j dans l'ensemble V-U au point voisin le plus proche dans. définir U. C'est-à-dire le poids du bord (j, le plus proche[j]).

Par exemple, dans la figure ci-dessus, le point voisin le plus proche du nœud 7 à l'ensemble U est 2, cloeest[7]=2. La valeur du bord du nœud 7 au point voisin le plus proche 2 est 1, qui est le poids du bord (2,7), enregistré comme lowcost[7]=1, comme le montre la figure ci-dessous.

Il suffit donc de trouver le nœud lowcost[] le plus bas dans l'ensemble V - U.

3. Étapes de l'algorithme

1. Initialiser

Laissez l'ensemble U={u0}, u0 appartenir à V, et initialisez les tableaux les plus proches[], lowcost[] et s[].

2. Trouvez le nœud t avec la plus petite valeur lowcost dans l'ensemble V-U, c'est-à-dire lowcost[t]=min{lowcost[j]}, j appartient à V-U. Le nœud t qui satisfait cette formule est le point le plus proche. reliant U dans l'ensemble V-U .

3. Ajoutez le nœud t à l'ensemble U.

4. Si l'ensemble V - U est vide, l'algorithme se termine, sinon passez à l'étape 5.

5. Mettez à jour son lowcost[] et le plus proche[] pour tous les nœuds j de l'ensemble V-U. if(C[t][j]

Suivez les étapes ci-dessus et vous pourrez enfin obtenir un arbre couvrant avec la plus petite somme de poids.

4. Diagramme

Le graphe G=(V,E) est un graphe pondéré connecté non orienté, comme le montre la figure ci-dessous.

1 Initialisation. Supposons que u0=1, soit l'ensemble U={1}, l'ensemble V-U={2,3,4,5,6,7}, s[1]=true, initialise le tableau le plus proche[] : sauf le nœud 1, tous les autres nœuds sont égaux à 1, ce qui signifie que les points voisins les plus proches des nœuds de l'ensemble V-U à l'ensemble U sont tous 1.lowcost[] : la valeur du bord du nœud 1 au nœud de l'ensemble V-U. close[] et lowcost[] sont illustrés dans la figure ci-dessous.

L'image après initialisation est :

2 Trouvez le nœud avec le plus petit faible coût, correspondant à t=2. Les arêtes et nœuds sélectionnés sont comme indiqué ci-dessous.

3 est ajouté à l'ensemble U. Ajoutez le nœud t à l'ensemble U, U={1,2} et mettez à jour V-U={3,4,5,6,7}

4 en même temps. Pour chaque point adjacent j de t dans l'ensemble V-U, il peut être mis à jour à l'aide de t. Les points adjacents du nœud 2 sont le nœud 3 et le nœud 7.

C[2][3]=20

C[2][7]= 1< lowcost[7]=36, mettez à jour la distance du voisin le plus proche lowcost[7]=1, le voisin le plus proche le plus proche[7]=2;

Les valeurs les plus proches[] et lowcost[] mises à jour sont comme indiqué dans la figure ci-dessous.

L'ensemble mis à jour est le suivant :

5 Trouvez le nœud avec le plus petit faible coût, correspondant à t=7, et les arêtes et nœuds sélectionnés sont comme indiqué ci-dessous.

6 Ajouter au set U. Ajoutez le nœud t à l'ensemble U, U={1,2,7} et mettez à jour V-U={3,4,5,6}

7 en même temps. Pour chaque point adjacent j de t dans l'ensemble V-U, il peut être mis à jour à l'aide de t. Les points adjacents du nœud 7 sont les nœuds 3, 4, 5 et 6.

  • C[7][3]=4
  • C[7][4] =4< ;lowcost[4]=infini, mettre à jour la distance du voisin le plus proche lowcost[3]=9, voisin le plus proche le plus proche[4]=7;
  • C[7][5]=4
  • C[7][6]=4

Les points les plus proches[] et lowcost[] mis à jour sont indiqués dans la figure ci-dessous.

L'ensemble mis à jour est le suivant :

8 Trouvez le nœud avec le plus petit faible coût, correspondant à t=3, et les arêtes et nœuds sélectionnés sont comme indiqué ci-dessous.

9 est ajouté à l'ensemble U. Ajoutez le nœud t à l'ensemble U, U={1,2,3,7} et mettez à jour V-U={4,5,6}

10 en même temps. Pour chaque point adjacent j de t dans l'ensemble V-U, il peut être mis à jour à l'aide de t. Le voisin du nœud 3 est le nœud 4.

C[3][4]=15>lowcost[4]=9, les tableaux

closest[] et lowcost[] ne changent pas.

L'ensemble mis à jour est le suivant :

11 Trouvez le nœud avec le plus petit faible coût, correspondant à t=4, et les arêtes et nœuds sélectionnés sont comme indiqué ci-dessous.

12 ajoutés à l'ensemble U. Ajoutez le nœud t à l'ensemble U, U={1,2,3,4,7} et mettez à jour V-U={5,6}

13 en même temps. Pour chaque point adjacent j de t dans l'ensemble V-U, il peut être mis à jour à l'aide de t. Le voisin du nœud 4 est le nœud 5.

C[4][5]=3

mis à jour le plus proche[] et lowcost [] Comme montré ci-dessous.

L'ensemble mis à jour est le suivant :

14 Trouvez le nœud avec le plus petit faible coût, correspondant à t=5, et les arêtes et nœuds sélectionnés sont comme indiqué ci-dessous.

15 ​​​​ajoutés à l'ensemble U. Ajoutez le nœud t à l'ensemble U, U={1,2,3,4,5,7} et mettez à jour V-U={6}

16 en même temps. Pour chaque point adjacent j de t dans l'ensemble V-U, il peut être mis à jour à l'aide de t. Le voisin du nœud 5 est le nœud 6.

C[5][6]=17

L'ensemble mis à jour est le suivant :

17 Trouvez le nœud avec le plus petit faible coût, correspondant à t=6. Les arêtes et nœuds sélectionnés sont comme indiqué ci-dessous.

18 ajoutés à l'ensemble U. Ajoutez le nœud t à l'ensemble U, U={1,2,3,4,5,6,7} et mettez à jour V-U={}

19 en même temps. Pour chaque point adjacent j de t dans l'ensemble V-U, il peut être mis à jour à l'aide de t. Le nœud 6 n'a pas de points adjacents dans l'ensemble V-U. Pas besoin de mettre à jour close[] et lowcost[].

20 L'arbre couvrant minimum obtenu est le suivant. La somme des poids de l'arbre couvrant minimum est de 57.

Implémentation de l'algorithme Prime

1 Le graphique construit


2.

Étude recommandée : "

Tutoriel vidéo Java

"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro Armstrong en Java Numéro Armstrong en Java Aug 30, 2024 pm 04:26 PM

Guide du numéro Armstrong en Java. Nous discutons ici d'une introduction au numéro d'Armstrong en Java ainsi que d'une partie du code.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

See all articles