12
votes

Algorithmes de graphique d'apprentissage

Dans les algorithmes, j'ai principalement été autodidacte et cela fait très bien été bien. Cependant, j'ai du mal à saisir des algorithns graphiques. Je cherche une sorte de référence qui a des concepts et du code réel pour que je puisse non seulement apprendre la théorie (ce que je fais d'accord avec), mais aussi avoir une idée de la manière dont les graphiques sont représentés et manipulés dans la pratique (ce que j'ai habituellement un temps plus difficile à saisir). Peut alors livrer? Tout de livres, aux liens, aux projets existants serait formidable tant qu'ils ont à la fois le concept et la mise en œuvre.

C'est une langue agnostique, mais je suis le plus familier avec Python et n'avez pas beaucoup d'expérience avec la FP.


0 commentaires

5 Réponses :


1
votes

steve yegge dit Ce est un domaine formidable Réservez sur des algorithmes qui utilisent de manière approfondie des graphiques.


0 commentaires

1
votes

J'ai beaucoup appris sur les graphiques du livre lié ci-dessous ... c'est l'un de mes livres préférés:

Un cours de Combinatorics
par J. H. Van Lint, R. M. Wilson
Cambridge University Press
ISBN 0 521 00601 5


4 commentaires

Le site suivant dispose également de certaines animations vraiment cool qui pourraient vous aider à comprendre les algorithmes de graphes: CS .sunysb.edu / ~ Skiena / Combinatorica / Animations


Je n'ai jamais jamais examiné la combinatoire, mon intérêt est donc très culminant. Cependant, il ne semble pas contenir de code correct?


JLV: C'est correct, il n'y a aucun code dans ce livre. Cependant, c'est un excellent livre pour apprendre les mathématiques derrière des structures graphiques, qui peuvent ensuite être appliquées à des algorithmes. Je n'aurais pas mentionné cela, mais ce n'est qu'un si bon livre; Je ne pouvais pas pas en mentionnez-le. :)


Mitch: Merci! Heureux que ce soit utile.




1
votes

Je suggérerais que lorsque vous étudiez des algorithmes, alors ne pensez pas à le coder. Les algorithmes sont totalement mathématiques et vous devez avoir la même attitude envers eux. Lorsque vous étudiez quelque chose comme l'algorithme de la clé de graphique, alors ne pensez pas à la coder comment les représenter. D'abord, appréciez pourquoi l'algorithme est important et non trivial. Ensuite, essayez des solutions très triviales et comparez leur complexité. Voyez ensuite à quel point des solutions optimales ressemblent et essaient de dériver leurs propriétés. Utilisez un papier et un stylo et non des IDE, essayez de dériver et de prouver des lemmas et ainsi de suite. Enfin, voyez enfin comment vous pouvez écrire un pseudocode pour résoudre le problème. Si vous faites ces éléments, vous développerez une relation intime avec les algorithmes, puis vous trouverez qu'il est beaucoup plus facile de les résoudre puisque vous ne pensez pas tout en codant pourquoi je le fais.

Malheureusement, en raison de fortes demandes de programmeur, le programmeur des jours ne sont pas des mathématiciens et ils sont confrontés à des problèmes pour résoudre de nouveaux problèmes. Le programmeur des jours antérieurs tels que Don Knuth, McArthy étaient des mathématiciens et de bons chercheurs. Par conséquent, le programmeur est maintenant un mot relativement bon marché par rapport aux informaticiens.


2 commentaires

OTOH, j'ai personnellement trouvé la mise en œuvre d'un algorithme (sans voir de pseudocode avant) et en utilisant cette mise en œuvre une bonne vérification que j'ai parfaitement compris comment l'algorithme fonctionne.


@MarkusUnterWAditzer - Vrai, c'est un excellent exercice. Notez à ceux qui le font cependant, il est facile de s'enliser dans une solution médiocre. Si vous avez atteint un point où il semble que vous ne le faites pas correctement, cela vaut votre temps pour regarder pseudocode.



0
votes

Algorithme Bellman-Ford : Chemin le plus court de la source à tous les autres nœuds dans un graphique dirigé pondéré, même avec le poids de bord (non cycle). plus lent mais polyvalent que Dijsktra. Complexité: O (| V |. | e |)

bfs: Trouvez le chemin d'un sommet donné à d'autres nœuds dans un graphique non dirigé non pondéré. Complexité: O (| V | + | e |) . Il est plus rapide lorsque vous connaissez les sommets à venir et utilisez la structure de données appropriée, c'est-à-dire une structure de données appropriée I.E FIFO QUE pour déterminer quel sommet déjà traité que la complexité peut être réduit à O (| v |)

dfs: Trouvez le chemin le plus court de la source vers d'autres nœuds. dans l'arbre et aussi dans le graphique. Le graphique peut contenir du cycle, ce qui signifie qu'un nœud pourrait être visité à nouveau et à nouveau. Nous pouvons donc utiliser une matrice booléenne pour suivre une trace des nœuds visités. sinon algorithme ne cessera pas. Plus sur il paraître plus profondément plus profond et aller aussi loin à la fin de la branche dans l'arbre. Complexité: O (| V | + | e |) . et complexité: O (| v |) espace pour stocker les sommets.

algorithme de guerre flotté: Trouvez tout le chemin le plus court sur la paire dans un graphique non pondéré dirigé avec + Eve, -Eve (non cycle) Poids de bord. Mais cela ne rend pas les détails des chemins eux-mêmes. Il peut être utilisé pour détecter le cycle de poids dans le graphique. quand il en trouve un, il se termine. Il compare tout chemin possible par graphique entre chaque paire de sommets. Il utilise donc une approche dynamique pas une approche gourmande. Complexité: O (| v ^ 3 |)

Algorithme de Johnson: Trouver tous les paires Chemin le plus court dans un graphe de race pondéré dirigé lorsque le poids est + Eve, -Eve mais pas - cycle. Il utilise d'abord l'algorithme Belman-Ford pour calculer le graphe transformé du graphique d'origine. Il supprime les bords de poids. Puis Dijkstra est appliqué pour trouver des chemins. Complexité: O (V ^ 2 LOG V + VE)

algorithme de dijkstra: La version originale de cet algorithme n'utilise pas la priorité que la complexité est donc o (| v ^ 2 |) mais une version plus récente utilise cette structure de données afin que la complexité devienne O (E + V Log V) < / fort>. Et il s'agit d'un algorithme de chemin le plus court unique. Cela fonctionne en attribuant un poids provisoire au nœud visité et à l'infini aux nœuds non visités pour les nœuds visités, recherchez toutes les bords non visités et sélectionnez avec un poids minimum. et ajoutez-le au jeu de path.

Algorithme de Krushkal: Pour trouver du MST où il trouve un bord du moindre poids possible qui relie deux arbres dans la forêt sur un graphique pondéré non dirigé. C'est un algorithme gourmand. Il trouve également une forêt minimale étendue. Complexité: O (E Log V)

Algorithme de PRIM: Il trouve un sous-ensemble d'arêtes formant un arbre sur un graphique non dirigé et pondéré. mais ne peut pas trouver la forêt de Mme comme l'algorithme de Krushkal.

Algorithme de Brouvka: Un problème avec cet algorithme est que les poids doivent être uniques dans le graphique. Il trouve la MST en examinant chaque sommet, puis en mettant avec un poids plus petit. Cet algorithme est de nature parallèle mais pas plus rapide que l'algorithme de Prim.

la même complexité que l'algorithme de Krushkal.


0 commentaires