


Structures de données et algorithmes JavaScript Graphiques et algorithmes de graphiques_Connaissances de base
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
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.
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 :
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].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.
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 :
this.marked = [];//Enregistrer les sommets visités
pour(var i=0;i
>
Fonction de recherche en profondeur :
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 :
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
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.
//Fonction topSort()
fonction topSort(){
var pile = [];
var visité = [];
pour(var je =0;i
>
pour(var je = 0;i
This.topSortHelper(i,visited,stack);
>
>
pour(var i = 0;i
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);
>

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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.

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.

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.

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

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

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.

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.

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.
