Après avoir lu Stevey Yegge's Obtenez ce travail sur Google Article, j'ai trouvé cette petite citation intéressante:
Chaque fois que quelqu'un vous donne un problème, pensez des graphiques. Ils constituent le moyen le plus fondamental et flexible de représenter tout type de relation, il s'agit donc d'une touche 50-50 que tout problème de conception intéressant ait un graphique y compris. Faites absolument sûr que vous ne pouvez pas penser à un moyen de résoudre le problème à l'aide de graphiques avant de passer à d'autres types de solution. Ce conseil est important!
Quels sont quelques exemples de problèmes les mieux représentés et/ou résolus par des structures/algorithmes de données graphiques?
Un exemple que je peux penser: des unités de navigation (ALA Garmin, TomTom), qui fournissent des instructions routières de votre position actuelle à une autre, utilisez des graphiques et des algorithmes de cheminement avancés.
Quels sont quelques autres?
Networks informatiques: Modèle de graphiques modéliser intuitivement les réseaux informatiques et Internet. Souvent, les nœuds représenteront souvent des systèmes d'extrémité ou des routeurs, tandis que les bords représentent des connexions entre ces systèmes.
Structures de données: Toute structure de données utilisant des pointeurs pour lier les données ensemble utilise un graphique d'une sorte. Cela inclut des structures arborescentes et des listes liées utilisées tout le temps.
Pathing and Maps: Essayer de trouver des chemins les plus courts ou les plus longs d'un emplacement sur une destination utilise des graphiques. Cela peut inclure la trajectoire comme vous voyez dans une application comme Google Maps ou des chemins de calcul des caractères AI à prendre dans un jeu vidéo et de nombreux autres problèmes similaires.
Satisfaction de la contrainte: Un problème commun dans l'AI est de trouver un objectif qui satisfait une liste de contraintes. Par exemple, pour une université pour définir les horaires de cours, il doit s'assurer que certains cours ne sont pas en conflit, qu'un professeur n'enseigne pas deux cours en même temps, que les conférences se produisent lors de certains délais, etc. . Des problèmes de satisfaction de contrainte comme celle-ci sont souvent modélisés et résolus à l'aide de graphiques.
Molécules: Les graphiques peuvent être utilisés pour modéliser des atomes et des molécules pour étudier leur interaction et leur structure entre autres.
Je suis très très intéressé par la théorie des graphes et je l'ai utilisé résolue tant de types de problèmes différents. Vous pouvez résoudre beaucoup de problèmes liés au chemin, problème assorti, problèmes de structure à l'aide d'un graphique.
problèmes de chemin ont beaucoup d'applications.
C'était dans la question de l'entretien de la Coupe de carrière. Dites que vous voulez trouver la plus longue somme d'un sous-réseau. Par exemple, [1, 2, 3, -1]
a la plus longue somme de 6. le modélise comme un graphique acyclique dirigé ( [~ # ~] DAG [~ # ~] ), ajoutez une source factice, destination factice. Connectez chaque nœud avec un bord qui a un poids correspondant au nombre. Utilisez maintenant le chemin le plus long algorithme dans le DAG pour résoudre ce problème.
De même, les problèmes d'arbitrage dans le monde financier ou même des problèmes de géométrie de la recherche de la plus longue structure qui se chevauchent est un problème de chemin similaire.
Certaines évidentes seraient les problèmes de résea (où votre réseau pourrait avoir des ordinateurs, des tableaux d'organisation, etc.).
[.____] Vous pouvez glaner beaucoup de informations structurelles comme
J'ai résolu beaucoup de gestion de projet Problèmes connexes à l'aide de graphiques. Une séquence d'événements peut être décrite comme un Graphique dirigé (si vous n'avez pas de cycles, c'est mieux mieux). Alors, maintenant tu peux
Beaucoup de problèmes correspondants peuvent être résolus par graphique. Par exemple, si vous devez faire correspondre des processeurs à la charge de travail ou correspondez aux travailleurs à leur travail. Dans mon dernier examen, je devais faire correspondre des gens aux tables dans les restaurants. Il suit le même principe (correspondance bipartite -> algorithmes de flux réseau). C'est simple mais puissant.
Un graphique spécial, un arbre, possède de nombreuses applications dans le monde des sciences de l'informatique. Par exemple, dans la syntaxe d'un langage de programmation ou dans une structure d'indexation de la base de données.
Plus récemment, j'ai également utilisé des graphiques dans compilateur problèmes d'optimisation. J'utilise le livre de Morgan, qui m'apprends des techniques fascinantes.
La liste va vraiment sur et encore. Les graphiques sont une belle abstraction mathématique pour Relation. Vous pouvez vraiment faire des merveilles, si vous pouvez le modeler correctement. Et depuis la théorie du graphique a trouvé autant d'applications, de nombreuses recherches actives sur le terrain sont nombreuses. Et en raison de nombreuses recherches, nous constatons encore plus d'applications qui alimentent les recherches.
Si vous voulez commencer à la théorie du graphique, obtenez un bon livre de mathématiques discret (-Rosen me vient à mon esprit) et vous pouvez acheter des livres d'auteurs comme Fould ou - Même. CLRS a aussi de bons algorithmes graphiques.
Votre code source est structuré d'arbre et un arbre est un type de graphique. Chaque fois que vous entendez des gens parler d'un AST (arborescence de syntaxe abstraite), ils parlent d'une sorte de graphique.
Les pointeurs forment des structures graphiques. Tout ce qui marche des pointeurs fait une sorte de manipulation graphique.
Le Web est un énorme graphique dirigé. La principale idée de Google, qui les a conduits à dominer à la recherche, est que la structure graphique du Web est d'une importance comparable ou plus importante que la teneur textuelle des pages.
Les machines d'état sont des graphiques. Les machines d'état sont utilisées dans les protocoles réseau, les expressions régulières, les jeux et toutes sortes d'autres domaines.
Il est plutôt difficile de penser à tout ce que vous faites qui n'implique pas une sorte de structure graphique.
Un exemple de la plupart des gens sont familiers: construire des systèmes. Faire est l'exemple typique, mais presque tous les bons systèmes de construction reposent sur un graphique acyclique dirigé. L'idée de base est que la direction modélise la dépendance entre une source et une cible, et vous devriez "marcher" le graphique dans un certain ordre pour construire correctement les choses -> C'est un exemple de tri topologique.
Un autre exemple est le système de contrôle source: à nouveau basé sur un DAG. Il est utilisé pour la fusion, par exemple, pour trouver des parents communs.
Eh bien, de nombreux algorithmes d'optimisation de programme que les compilateurs utilisent sont basés sur des graphiques (par exemple, figurent un graphique d'appel, le contrôle de flux, de nombreux analyses statiques).
De nombreux problèmes d'optimisation sont basés sur le graphique. Étant donné que de nombreux problèmes sont réductables pour les colorants graphiques et des problèmes similaires, de nombreux autres problèmes sont également basés sur de nombreux autres problèmes.
Je ne suis pas sûr que je conviens que les graphiques sont le meilleur moyen de représenter toutes les relations et j'essaie certainement d'éviter que ces "obtiennent un clou, trouvons des approches à marteau". Les graphiques ont souvent des représentations de mémoire médiocre et de nombreux algorithmes sont en réalité plus efficaces (en pratique) lorsqu'ils sont mis en œuvre avec des matrices, des bits d'affaires et d'autres choses.
OCR. Imaginez une page de texte numérisé à un angle, avec du bruit de l'image, où vous devez trouver l'espace entre les lignes de texte. Une manière est de créer un graphique de pixels et de trouver le chemin le plus court d'un côté de la page à l'autre, où la différence de luminosité est la distance entre les pixels.
Cet exemple provient du Manuel de conception d'algorithme , qui présente de nombreux autres exemples de problèmes de graphique réels.
Pour savoir si deux molécules peuvent s'adapter ensemble. Lorsque vous développez des médicaments, on s'intéresse souvent à la vue si les molécules de drogue peuvent s'intégrer en molécules plus grosses dans le corps. Le problème de déterminer si cela est possible est que les molécules ne sont pas statiques. Différentes parties de la molécule peuvent tourner autour de leurs liaisons chimiques de sorte qu'une molécule puisse se transformer en assez de formes différentes.
On peut dire que chaque forme représente un point d'un espace constitué de formes. Résoudre ce problème implique de trouver un chemin dans cet espace. Vous pouvez le faire en créant une feuille de route dans l'espace, qui est essentiellement un graphique constitué de formes juridiques et de dire qui forme une forme peut se transformer. En utilisant un algorithme de recherche de graphique A * à travers cette feuille de route, vous trouverez une solution.
Ok c'était beaucoup de babillard qui n'était peut-être pas très compréhensible ou clair. Mais mon point était que les graphiques apparaissent dans toutes sortes de problèmes.
Un exemple populaire est la collection de la poubelle.
Le collecteur commence par un ensemble de références, puis traverse tous les objets qu'ils font référence, puis tous les objets référencés là-bas et ainsi de suite. Tout ce qu'il trouve est ajouté à un graphique d'objets accessibles. Tous les autres objets sont inaccessibles et collectés.
Les éléments suivants sont basés sur la théorie des graphes:
Les graphiques sont parfaits pour la gestion des dépendances.
J'ai récemment commencé à utiliser le conteneur Castle Windsor, après avoir inspecté le noyau, j'ai trouvé une propriété graphnodes. Castle Windsor utilise un graphique pour représenter les dépendances entre les objets de sorte que l'injection fonctionne correctement. Consultez ceci article .
J'ai également utilisé une théorie de graphique simple pour développer un cadre de plug-in, chaque nœud graphique représente un plugin, une fois que les dépendances ont été définies, je peux traverser le graphique pour créer une commande de charge de plug-in.
Je prévois de modifier l'algorithme pour mettre en œuvre l'algorithme de Dijkstra afin que chaque plugin soit pondéré avec une version spécifique, un changement simple ne chargera que la dernière version du plugin.
Je m'avais découvert plus tôt. J'aime cette citation "Chaque fois que quelqu'un vous donne un problème, pensez des graphiques." Je pense vraiment que c'est vrai.
IMHO La plupart des modèles de domaine que nous utilisons dans des applications normales sont dans certains graphiques de respect. Déjà si vous regardez les diagrammes UML, vous remarqueriez qu'avec un graphique dirigé et étiqueté, vous pouvez facilement les traduire directement en un modèle de persistance. Il y a quelques exemples de cela sur Neo4j
À votre santé
/ peter
Les graphiques ne sont pas des structures de données. Ils sont une représentation mathématique des relations. Oui, vous pouvez penser et théoriquement sur des problèmes à l'aide de graphiques et il y a un grand nombre de théories à ce sujet. Mais lorsque vous devez implémenter un algorithme, vous choisissez des structures de données pour mieux représenter le problème, pas les graphiques. Il existe de nombreuses structures de données qui représentent des graphiques généraux et encore plus pour des types spéciaux de graphiques.
Dans votre question, vous mélangez ces deux choses. La même solution théorique peut être en termes de graphique, mais des solutions pratiques peuvent utiliser différentes structures de données pour représenter le graphique.
Profilage et/ou algorithmes d'analyse comparative et implémentations dans le code.
Vous pourriez jeter un coup d'oeil à certains des exemples du Wiki Neo4j,
et les projets que NeO4J est utilisé (les connus)
Sinon, les algorithmes recommandés sont une bonne utilisation pour les graphiques, voir par exemple Pagerank et d'autres choses à
Les connexions sociales entre les personnes font un exemple de graphique intéressant. J'ai essayé de modéliser ces connexions au niveau de la base de données à l'aide d'un RDM traditionnel, mais je l'ai trouvé trop fort. J'ai fini par choisir une base de données graphique et c'était un excellent choix car il est facile de suivre les connexions (bords) entre les personnes (nœuds).
Tout ce qui peut être modélisé comme un étranger Touche dans A Base de données relationnelle est essentiellement un bord et nœuds dans un graphique.
Peut-être que cela vous aidera à penser à des exemples, car la plupart des choses sont facilement modélisées dans une SGBDM.
Analyser la transaction Serialisabilité dans la théorie de la base de données.
Vous pouvez utiliser des graphiques partout où vous pouvez définir les objets de domaine problématiques dans des nœuds et la solution en tant que flux de contrôle et/ou de données entre les nœuds.
Compte tenu du fait que les arbres sont effectivement connectés-acycliques graphiques, il y a encore plus de zones que vous pouvez utiliser la théorie des graphes.