Inscription / Connexion Nouveau Sujet
Niveau maths spé
Partager :

Algorithme

Posté par Profil etudiantilois 20-02-20 à 17:47

Bonjour,

J'ai des questions sur l'algorithme de Dijkstra, mais le code est vraiment long donc il est hébergé sur un site Internet dédié.


Est-ce que je vais être banni si je mets le lien ? C'est en plus mieux car ça permet de préserver l'indentation et les couleurs.

Cette question s'adresse surtout à un modérateur, malou par exemple !

Merci beaucoup par avance pour votre réponse.

Posté par
malou Webmaster
re : Algorithme 20-02-20 à 17:50

Bonjour
un code se recopie très facilement et pour que l'indentation ne bouge pas, tu mets les balises de code en cliquant sur < / > en dessous de la zone d'écriture

Posté par Profil etudiantiloisre : Algorithme 20-02-20 à 20:01

Cela ne marche pas, je dois refaire toutes les indentations manuellement !

Voici donc le code : [url]https://*******. C'est l'algorithme de Dijkstra que je ne comprends pas, en tout cas à partir de la ligne 5...

En plus, il y a des couleurs, c'est plus lisible et ça donnera plus envie à quelqu'un de m'aider.

Merci beaucoup pour votre compréhension.

Posté par
malou Webmaster
re : Algorithme 20-02-20 à 20:06

non mais tu rigoles là....
moins de 3 secondes

def dijkstra(G, depart, arrivee):
    file_priorite = PriorityQueue()
    file_priorite.insert(depart, 0)
    dict_distance_min = {depart: 0}
    dict_predecesseur = {}
    noeuds_visites = set()
    while True:
        entree = file_priorite.pop()
        if entree is None:
            break
        distance, noeud = entree
        if noeud not in noeuds_visites:
            noeuds_visites.add(noeud)
            if noeud == arrivee:
                break
            for successeur, longueur_arc in arcs_sortants(G,noeud):
                nouvelle_distance = distance+longueur_arc
                distance_min = dict_distance_min.get(successeur)
                if (distance_min is None or nouvelle_distance <distance_min):
                    dict_distance_min[successeur] =nouvelle_distance
                    dict_predecesseur[successeur] = noeud
                    file_priorite.insert(successeur,nouvelle_distance)
    distance = distance_min.get(arrivee)
    chemin = []
    if distance is not None:
        noeud = arrivee
        while noeud is not None:
            chemin = [noeud] + chemin
            noeud = dict_predecesseur.get(noeud)
    return (chemin,distance)

Posté par Profil etudiantiloisre : Algorithme 20-02-20 à 20:17

Mais du coup il n'y a plus les couleurs ni les numéros de lignes ? Comment on fait pour se repérer ?

Et moi quand j'ai copié ça a enlevé toutes les indentations.

Posté par Profil etudiantiloisre : Algorithme 20-02-20 à 20:23

Il n'y a pas moyen de mettre des couleurs ?

En tout cas, si quelqu'un veut bien m'aider à comprendre cette fonction...

malou peut-être ?

Posté par
fUnderscoreE
re : Algorithme 21-02-20 à 08:33

Il faut te remettre sérieusement en question @etudiantlilois.

Tu te plains d'avoir des sujets ouverts depuis des mois, peut-être que la raison vient de toi.

Tu ne fais __RIEN__ pour faire avancer le sujet:

- (1) tu n'exhibes aucune preuve de réflexion: il faut écrire tes raisonnements, même s'ils n'aboutissent pas. Ne RIEN passer sous le tapis...
- (2) tu ne montres aucun effort sur tes posts: réponse quelques minutes après le posteur alors que tes sujets n'ont clairement pas la même durée de vie...

(1) Djikstra: as tu dessiné un graphe simple? appliqué l'algorithme à la main? Tenté toi même de résoudre le problème sans Djikstra? ...

En atteste une fois de plus tes messages ici:
- (2) t'arrives pas à poster du code indenté: qu'as-tu tenté précisément
- (2) tu prétends ne pas pouvoir te repérer dans le code: que proposes-tu à part un lien? rien.
alors que:
* compter les lignes
* toi même numéroter les lignes
* citer un passage du code via [ quote] ou même sans


Pour finir: on attend (je parle pas spécialement de ilemaths mais d'un point de vue général) un peu plus de quelqu'un dans le secondaire: soit pro-actif.

Posté par
alb12
re : Algorithme 21-02-20 à 11:40

salut,
de la part de bernard parisse developpeur de Giac/Xcas
cliquer dans la fonction pour voir tout le programme commenté.

Posté par Profil etudiantiloisre : Algorithme 21-02-20 à 12:31

alb12 @ 21-02-2020 à 11:40

salut,
de la part de bernard parisse developpeur de Giac/Xcas
cliquer dans la fonction pour voir tout le programme commenté.


Merci beaucoup. ! C'est vous Bernard Parisse ? Et c'est vous qui avez écrit les commentaires ?

Posté par
alb12
re : Algorithme 21-02-20 à 14:23

non pas de tout je ne suis qu'un utilisateur de Xcas.
je l'ai beaucoup utilise au lycee.

Posté par Profil etudiantiloisre : Algorithme 21-02-20 à 22:14

alb12 @ 21-02-2020 à 14:23

non pas de tout je ne suis qu'un utilisateur de Xcas.
je l'ai beaucoup utilise au lycee.


Le lien Xcas ne fonctionne pas... Est-ce le bon ?

Posté par Profil etudiantiloisre : Algorithme 21-02-20 à 22:20

Est-ce ceci ?

fonction Dijkstra(G,source)
  // G matrice carree symetrique de taille n donnant la longueur 
  // du sommet i au sommet j
  // renvoie la plus courte longueur et le sommet précédent
  local v,todo,todov,j,dist,distv,alt,prev,n;
  n:=size(G);
  // initialisation
  todo:=seq(j,j,0,n-1); dist:=[inf$n]; prev:=[-1$n]; dist[source]=<0;
  tantque size(todo)!=0 faire
    // sommet realisant la longueur min parmi ceux restant
    v:=0; 
    todov:=todo[v]; 
    distv:=dist[todov];
    pour j de 0 jusque size(todo)-1 faire 
      si dist[todo[j]]<distv alors v:=j; todov:=todo[v]; distv:=dist[todo[j]]; fsi; 
    fpour;
    si distv==inf alors return dist,prev; fsi; // fin algo prematuree
    todo:=suppress(todo,v); // supprime todo[v]
    // cherche les distances en passant par todo[v]
    for j in todo do
      alt:=distv+G[todov,j];
      si alt<dist[j] alors dist[j]:=alt; prev[j]:=todov; fsi;
    od;
  ftantque;
  return dist,prev;
ffonction:;


Je ne comprends rien...

Posté par
alb12
re : Algorithme 21-02-20 à 22:33

Cherche un cours sur le web par exemple

Posté par Profil etudiantiloisre : Algorithme 21-02-20 à 22:36

Super votre lien, merci beaucoup !

Je vais regarder tout ça. Est-ce que je peux vous poser des questions s'il y a des choses que je ne comprends pas ?

Posté par
alb12
re : Algorithme 21-02-20 à 23:59

je n'en sais pas plus que toi sur cet algorithme !

Posté par Profil etudiantiloisre : Algorithme 22-02-20 à 01:24

Ah mince...

Quelqu'un sur ce forum connaîtrait donc l'algorithme de Dijkstra ?!

MERCI.

Posté par
fUnderscoreE
re : Algorithme 22-02-20 à 06:40

Vriament à se demander si l'auteur n'est pas un troll!
Remonté son historique de messages, toujours suspicieux... @moderation

Posté par
luzak
re : Algorithme 22-02-20 à 09:39

En tapant Dijkstra sur vosgueules! j'ai obtenu
l'exposé de l'algorithme
son implantation en pseucode
la preuve d'un algorithme correct

Que faut-il de plus ?

Posté par
fUnderscoreE
re : Algorithme 22-02-20 à 10:07

Citation :
Que faut-il de plus ?


Des couleurs et une numérotation de ligne

Et aussi un code python, un debugger en ligne intégrant explication orale et au moins deux ou trois intervenants en temps réel sur ce forum

Posté par Profil etudiantiloisre : Algorithme 22-02-20 à 11:23

fUnderscoreE @ 22-02-2020 à 06:40

Vriament à se demander si l'auteur n'est pas un troll!
Remonté son historique de messages, toujours suspicieux... @moderation


Pardon ?!

Je demande simplement des infos sur l'algorithme de Dijkstra car je ne comprends pas son fonctionnement. J'ai regardé des vidéos avec des tableaux, mais je ne comprends toujours pas pourquoi ce que l'on fait permet d'avoir le plus court chemin !

Si quelqu'un pouvait m'expliquer...

Posté par
fUnderscoreE
re : Algorithme 22-02-20 à 12:06

Citation :
Pardon ?!

Je me trompe?

- le lien de alb12 ignoré
- le code de malou osculté
- les recommandations de luzak, sous tapis
- ma recommandation de dérouler l'algorithme à la main: du vent
- 10 messages de ta part jusqu'à maintenant: "j'ai rien compris, quelqu'un d'autre?"



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !