Maison interface Web js tutoriel Structures de données et algorithmes JavaScript Graphiques et algorithmes de graphiques_Connaissances de base

Structures de données et algorithmes JavaScript Graphiques et algorithmes de graphiques_Connaissances de base

May 16, 2016 pm 04:14 PM
javascript algorithme graphique 数据结构 算法

Définition du graphique

Le graphe est composé d'un ensemble fini non vide de sommets et d'un ensemble d'arêtes entre les sommets. Il est généralement exprimé comme suit : G(V,E), où G représente un graphe et V est le sommet du graphe G. . Ensemble, E est l’ensemble des arêtes du graphe G.

Graphique orienté

Arête dirigée : Si l'arête allant du sommet Vi à Vj a une direction, alors cette arête est appelée une arête dirigée, également appelée arc (Arc), représentée par une paire ordonnée , Vi est appelé est la queue de l’arc et Vj est appelé la tête de l’arc.

Graphique non ordonné

Arête non orientée : Si l'arête entre les sommets Vi et Vj n'a pas de direction, cette arête est appelée arête non orientée (Edge) et est représentée par une paire non ordonnée (Vi, Vj).

Image simple

Graphique simple : dans la structure du graphe, s'il n'y a pas d'arête allant d'un sommet à lui-même et que la même arête n'apparaît pas à plusieurs reprises, alors un tel graphe est appelé un graphe simple.

Graphiques

représente le sommet

La première étape de la création d'une classe graphique consiste à créer une classe Vertex pour enregistrer les sommets et les arêtes. La fonction de cette classe est la même que celle de la classe Node de liste chaînée et d'arbre de recherche binaire. La classe Vertex comporte deux données membres : une qui identifie le sommet et une valeur booléenne qui indique s'il a été visité. Ils sont nommés respectivement label et wasVisited.

Copier le code Le code est le suivant :

fonction Sommet(étiquette){
This.label = label;
>

Nous sauvegardons tous les sommets dans un tableau, et dans la classe graph, ils peuvent être référencés par leur position dans le tableau

représente un avantage

Les informations réelles du graphique sont stockées sur les "bords" car ils décrivent la structure du graphique. Un nœud parent d'un arbre binaire ne peut avoir que deux nœuds enfants, mais la structure du graphe est beaucoup plus flexible. Un sommet peut avoir une ou plusieurs arêtes qui lui sont connectées.

Nous appelons la méthode de représentation des bords d'un graphique une liste de contiguïté ou un tableau de listes de contiguïté. Il stockera un tableau composé d'une liste de sommets adjacents d'un sommet

Schéma de construction

Définissez une classe Graph comme suit :

Copier le code Le code est le suivant :

fonction Graphique(v){
This.vertices = v;//point le plus élevé des sommets
This.edges = 0;
This.adj = [];
pour(var je =0;Je This.adj[i] = [];
This.adj[i].push('');
>
This.addEdge = addEdge;
This.toString = toString;
>

Cette classe enregistre le nombre d'arêtes qu'un graphique représente et enregistre le nombre de sommets en utilisant une longueur et le nombre de sommets dans le graphique.
Copier le code Le code est le suivant :

fonction addEdge(){
This.adj[v].push(w);
This.adj[w].push(v);
Ceci.bords ;
>

Ici, nous utilisons une boucle for pour ajouter un sous-tableau à chaque élément du tableau afin de stocker tous les sommets adjacents et initialiser tous les éléments avec des chaînes vides.

Parcours du graphique

Traversée en profondeur d'abord

DepthFirstSearch, également connu sous le nom de recherche en profondeur d'abord, appelée DFS.

Par exemple, si vous recherchez une clé dans une chambre, vous pouvez partir de n'importe quelle pièce pour rechercher un par un les coins, les tables de chevet, les lits, les armoires, les meubles TV, etc. , pour n'en manquer aucun. Impasse, après avoir fouillé tous les tiroirs et armoires de rangement, cherchez ensuite la pièce suivante.

Première recherche en profondeur :

La recherche en profondeur consiste à visiter un sommet non visité, à le marquer comme visité, puis à accéder de manière récursive à d'autres sommets non visités dans la liste de contiguïté du sommet initial

Ajouter un tableau à la classe Graph :

Copier le code Le code est le suivant :

this.marked = [];//Enregistrer les sommets visités
pour(var i=0;i This.marked[i] = false;//Initialisé à false
>

Fonction de recherche en profondeur :

Copier le code Le code est le suivant :

fonction dfs(v){
This.marked[v] = true;
//L'instruction if n'est pas nécessaire ici
Si(this.adj[v] != non défini){
​​​​print("Sommet visité : " v );
pour chacun(var w dans this.adj[v]){
Si(!this.marked[w]){
This.dfs(w);
            }
>
>
>

Recherche en largeur d'abord

La recherche en largeur d'abord (BFS) est une méthode de recherche aveugle qui vise à développer et à examiner systématiquement tous les nœuds du graphique pour trouver des résultats. En d’autres termes, il ne prend pas en compte les emplacements possibles des résultats et effectue une recherche approfondie sur l’ensemble du graphique jusqu’à ce que les résultats soient trouvés.

La recherche en largeur commence à partir du premier sommet et tente de visiter les sommets aussi proches que possible de celui-ci, comme indiqué ci-dessous :

Son principe de fonctionnement est le suivant :

1. Recherchez d'abord les sommets non visités adjacents au sommet actuel et ajoutez-les à la liste des sommets visités et à la file d'attente
; 2. Prenez ensuite le prochain sommet v du graphique et ajoutez-le à la liste des sommets visités
3. Enfin, ajoutez tous les sommets non visités adjacents à v à la file d'attente
Voici la définition de la fonction de recherche en largeur d'abord :

Copier le code Le code est le suivant :

fonction bfs(s){
var file d'attente = [];
This.marked = true;
Queue.push(s);//Ajouter à la fin de la file d'attente
Tandis que(queue.length>0){
          var v = queue.shift();//Supprimer de la tête de la file d'attente
Si(v == non défini){
                                      print("Sommet visité : " v);
>
pour chacun(var w dans this.adj[v]){
Si(!this.marked[w]){
This.edgeTo[w] = v;
This.marked[w] = true;
queue.push(w);
            }
>
>
>

Chemin le plus court

Lors d'une recherche en largeur, le chemin le plus court d'un sommet à un autre sommet connecté est automatiquement trouvé

Déterminer le chemin

Pour trouver le chemin le plus court, vous devez modifier l'algorithme de recherche en largeur pour enregistrer le chemin d'un sommet à un autre sommet. Nous avons besoin d'un tableau pour enregistrer toutes les arêtes d'un sommet au sommet suivant. tableau edgeTo

Copier le code Le code est le suivant :

this.edgeTo = [];//Ajouter cette ligne à la classe Graph

//fonction bfs
fonction bfs(s){
var file d'attente = [];
This.marked = true;
Queue.push(s);//Ajouter à la fin de la file d'attente
Tandis que(queue.length>0){
          var v = queue.shift();//Supprimer de la tête de la file d'attente
Si(v == non défini){
                                      print("Sommet visité : " v);
>
pour chacun(var w dans this.adj[v]){
Si(!this.marked[w]){
This.edgeTo[w] = v;
This.marked[w] = true;
queue.push(w);
            }
>
>
>

Algorithme de tri topologique

Le tri topologique triera tous les sommets du graphe orienté de sorte que les arêtes dirigées pointent des sommets précédents vers les sommets ultérieurs.
L'algorithme de tri topologique est similaire à BFS. La différence est que l'algorithme de tri topologique ne génère pas immédiatement les sommets visités, mais visite tous les sommets adjacents dans la liste de contiguïté du sommet actuel. Le sommet actuel ne sera inséré que lorsque. la liste est épuisée dans la pile.

L'algorithme de tri topologique est divisé en deux fonctions. La première fonction est topSort(), qui est utilisée pour configurer le processus de tri et appeler une fonction auxiliaire topSortHelper(), puis afficher la liste de sommets triés

Le travail principal de l'algorithme de tri topologique est effectué dans la fonction récursive topSortHelper(). Cette fonction marquera le sommet actuel comme visité, puis accédera de manière récursive à chaque sommet de la liste de contiguïté des sommets actuelle pour marquer ces sommets comme visités. Enfin, le sommet actuel est poussé sur la pile.

Copier le code Le code est le suivant :

//Fonction topSort()
fonction topSort(){
var pile = [];
var visité = [];
pour(var je =0;i         visité[i] = false;
>
pour(var je = 0;i Si(visité[i] == faux){
This.topSortHelper(i,visited,stack);
>
>
pour(var i = 0;i Si(stack[i] !=undéfini && stack[i] != false){
                   print(this.vertexList[stack[i]]);
>
>
>

//fonction topSortHelper()
fonction topSortHelper(v,visité,pile){
visité[v] = vrai;
pour chacun(var w dans this.adj[v]){
Si(!visité[w]){
This.topSortHelper(visité[w],visité,pile);
>
>
​ stack.push(v);
>

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)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

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)

Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants Implémentation d'algorithmes d'apprentissage automatique en C++ : défis et solutions courants Jun 03, 2024 pm 01:25 PM

Les défis courants rencontrés par les algorithmes d'apprentissage automatique en C++ incluent la gestion de la mémoire, le multithread, l'optimisation des performances et la maintenabilité. Les solutions incluent l'utilisation de pointeurs intelligents, de bibliothèques de threads modernes, d'instructions SIMD et de bibliothèques tierces, ainsi que le respect des directives de style de codage et l'utilisation d'outils d'automatisation. Des cas pratiques montrent comment utiliser la bibliothèque Eigen pour implémenter des algorithmes de régression linéaire, gérer efficacement la mémoire et utiliser des opérations matricielles hautes performances.

Explorez les principes sous-jacents et la sélection d'algorithmes de la fonction de tri C++ Explorez les principes sous-jacents et la sélection d'algorithmes de la fonction de tri C++ Apr 02, 2024 pm 05:36 PM

La couche inférieure de la fonction de tri C++ utilise le tri par fusion, sa complexité est O(nlogn) et propose différents choix d'algorithmes de tri, notamment le tri rapide, le tri par tas et le tri stable.

Comparez des structures de données complexes à l'aide de la comparaison de fonctions Java Comparez des structures de données complexes à l'aide de la comparaison de fonctions Java Apr 19, 2024 pm 10:24 PM

Lors de l'utilisation de structures de données complexes en Java, Comparator est utilisé pour fournir un mécanisme de comparaison flexible. Les étapes spécifiques comprennent : la définition d’une classe de comparaison et la réécriture de la méthode de comparaison pour définir la logique de comparaison. Créez une instance de comparaison. Utilisez la méthode Collections.sort, en transmettant les instances de collection et de comparateur.

Algorithme de détection amélioré : pour la détection de cibles dans des images de télédétection optique haute résolution Algorithme de détection amélioré : pour la détection de cibles dans des images de télédétection optique haute résolution Jun 06, 2024 pm 12:33 PM

01Aperçu des perspectives Actuellement, il est difficile d'atteindre un équilibre approprié entre efficacité de détection et résultats de détection. Nous avons développé un algorithme YOLOv5 amélioré pour la détection de cibles dans des images de télédétection optique haute résolution, en utilisant des pyramides de caractéristiques multicouches, des stratégies de têtes de détection multiples et des modules d'attention hybrides pour améliorer l'effet du réseau de détection de cibles dans les images de télédétection optique. Selon l'ensemble de données SIMD, le mAP du nouvel algorithme est 2,2 % meilleur que YOLOv5 et 8,48 % meilleur que YOLOX, permettant ainsi d'obtenir un meilleur équilibre entre les résultats de détection et la vitesse. 02 Contexte et motivation Avec le développement rapide de la technologie de télédétection, les images de télédétection optique à haute résolution ont été utilisées pour décrire de nombreux objets à la surface de la Terre, notamment des avions, des voitures, des bâtiments, etc. Détection d'objets dans l'interprétation d'images de télédétection

Application d'algorithmes dans la construction de 58 plateformes de portraits Application d'algorithmes dans la construction de 58 plateformes de portraits May 09, 2024 am 09:01 AM

1. Contexte de la construction de la plateforme 58 Portraits Tout d'abord, je voudrais partager avec vous le contexte de la construction de la plateforme 58 Portraits. 1. La pensée traditionnelle de la plate-forme de profilage traditionnelle ne suffit plus. La création d'une plate-forme de profilage des utilisateurs s'appuie sur des capacités de modélisation d'entrepôt de données pour intégrer les données de plusieurs secteurs d'activité afin de créer des portraits d'utilisateurs précis. Elle nécessite également l'exploration de données pour comprendre le comportement et les intérêts des utilisateurs. et besoins, et fournir des capacités côté algorithmes ; enfin, il doit également disposer de capacités de plate-forme de données pour stocker, interroger et partager efficacement les données de profil utilisateur et fournir des services de profil. La principale différence entre une plate-forme de profilage d'entreprise auto-construite et une plate-forme de profilage de middle-office est que la plate-forme de profilage auto-construite dessert un seul secteur d'activité et peut être personnalisée à la demande. La plate-forme de mid-office dessert plusieurs secteurs d'activité et est complexe ; modélisation et offre des fonctionnalités plus générales. 2.58 Portraits d'utilisateurs de l'arrière-plan de la construction du portrait sur la plate-forme médiane 58

Structures de données et algorithmes Java : explication détaillée Structures de données et algorithmes Java : explication détaillée May 08, 2024 pm 10:12 PM

Les structures de données et les algorithmes sont à la base du développement Java. Cet article explore en profondeur les structures de données clés (telles que les tableaux, les listes chaînées, les arbres, etc.) et les algorithmes (tels que le tri, la recherche, les algorithmes graphiques, etc.) en Java. Ces structures sont illustrées par des exemples pratiques, notamment l'utilisation de tableaux pour stocker les scores, de listes chaînées pour gérer les listes de courses, de piles pour implémenter la récursion, de files d'attente pour synchroniser les threads, ainsi que d'arbres et de tables de hachage pour une recherche et une authentification rapides. Comprendre ces concepts vous permet d'écrire du code Java efficace et maintenable.

Structure de données PHP : l'équilibre des arborescences AVL, maintenant une structure de données efficace et ordonnée Structure de données PHP : l'équilibre des arborescences AVL, maintenant une structure de données efficace et ordonnée Jun 03, 2024 am 09:58 AM

L'arbre AVL est un arbre de recherche binaire équilibré qui garantit des opérations de données rapides et efficaces. Pour atteindre l'équilibre, il effectue des opérations de virage à gauche et à droite, en ajustant les sous-arbres qui violent l'équilibre. Les arbres AVL utilisent l'équilibrage de hauteur pour garantir que la hauteur de l'arbre est toujours petite par rapport au nombre de nœuds, réalisant ainsi des opérations de recherche de complexité temporelle logarithmique (O (logn)) et maintenant l'efficacité de la structure de données même sur de grands ensembles de données.

Algorithme de recommandation d'actualités basé sur l'amélioration globale des graphiques Algorithme de recommandation d'actualités basé sur l'amélioration globale des graphiques Apr 08, 2024 pm 09:16 PM

Auteur | Évalué par Wang Hao | L'application Chonglou News est un moyen important pour les gens d'obtenir des sources d'informations dans leur vie quotidienne. Vers 2010, les applications d'information étrangères populaires comprenaient Zite et Flipboard, tandis que les applications d'information nationales populaires étaient principalement les quatre principaux portails. Avec la popularité des produits de recommandation d'actualités d'une nouvelle ère représentés par Toutiao, les applications d'actualités sont entrées dans une nouvelle ère. Quant aux entreprises technologiques, quelle qu'elles soient, tant qu'elles maîtrisent la technologie sophistiquée des algorithmes de recommandation d'actualités, elles auront fondamentalement l'initiative et la voix au niveau technique. Aujourd'hui, jetons un coup d'œil à un article du RecSys2023 Best Long Paper Nomination Award : GoingBeyondLocal:GlobalGraph-EnhancedP.

See all articles