Algoritmi e strutture dati [GRAFI]

di il
13 risposte

Algoritmi e strutture dati [GRAFI]

.

13 Risposte

  • Re: Algoritmi e strutture dati [GRAFI]

    Up
  • Re: Algoritmi e strutture dati [GRAFI]

    La soluzione e' compilcata, per questo nessuno ha risposto. Non serve uppare.

    Usare il backtracking e' solo una parte della soluzione del problema: serve:

    1) definire l'algoritmo, e per questo basta carta, penna e calamaio
    2) decidere le strutture dati da utilizzare per descrivere il grafo
    3) implementare in modo opportuno l'algoritmo.

    Il backtracking non e' un algoritmo e' solo un modo per implementare un algoritmo, cosi' come un ciclo, la ricorsione, ecc.

    Inizia con un approccio banale: generi tutte le permutazioni di nodi di un grafo e calcoli il costo.
    Si puo' fare sicuramente di meglio.
  • Re: Algoritmi e strutture dati [GRAFI]

    .
  • Re: Algoritmi e strutture dati [GRAFI]

    Non cercare di trovare un ordinamento che minimizza il costo totale.

    Inizia con un approccio piu' stupido, per ora:

    genera tutti i possibili ordinamenti,
    per ogn'uno calcola il costo
    alla fine scegli quello che ha il costo minore.

    Te lo avevo proposto gia' nel post precedente.
  • Re: Algoritmi e strutture dati [GRAFI]

    .
  • Re: Algoritmi e strutture dati [GRAFI]

    .
  • Re: Algoritmi e strutture dati [GRAFI]

    Bene. Quindi, la prossima domanda e' la seguente: generare tutti i possibili ordinamenti non e' molto intelligente, perche' non si sfrutta un' informazione fondamentale: gli archi.
    Come si puo' ridurre il numero di ordinamenti sfruttando gli archi del grafo?
    In altre parole: c'e un modo piu' intelligente di 'camminare' tra i nodi di un grafo?
  • Re: Algoritmi e strutture dati [GRAFI]

    .
  • Re: Algoritmi e strutture dati [GRAFI]

    osvy92 ha scritto:


    fatto, praticamente ho modificato la funzione che mi generava tutte le combinazioni.
    Calcolo il costo con gli archi già mentre la sto generando, e se vedo che non è buono in partenza scarto in primis la soluzione e vado avanti. Credo proprio che sia una sorta di backtracking
    E' sceso da circa 5 minuti a circa 50 secondi su un input di 11 grafi.
    Vediamo se posso fare di meglio! Grazie del supporto
    Io ho un problema simile ma sono ferma alla creazione di tutte le possibili combinazioni che ho fatto con la next_permutation...Mi dai qualche informazione circa la tua funzione?
  • Re: Algoritmi e strutture dati [GRAFI]

    .
  • Re: Algoritmi e strutture dati [GRAFI]

    come scritto prima calcolo il costo già mentre la sto generando, e se vedo che non è buono in partenza scarto in primis la soluzione e vado avanti.
    ho capito, ma per le permutazioni usi la next_permutations anche tu?
    oppure qualcosa del tipo:
    void swap (string *x, string *y)
    
    {
    
        string temp;
    
        temp = *x;
    
        *x = *y;
    
        *y = temp;
    
    }
    
    void permute(string *a, int i, int n)
    {
       int j;
       if (i == n)
    	   printf("%s\n", a);
       else
       {
            for (j = i; j <= n; j++)
           {
              swap((a+i), (a+j));
              permute(a, i+1, n);
              swap((a+i), (a+j)); //backtrack
           }
       }
    }
    
  • Re: Algoritmi e strutture dati [GRAFI]

    .
  • Re: Algoritmi e strutture dati [GRAFI]

    osvy92 ha scritto:


    si! ovviamente va adattata al tuo problema
    Utilizzando la funzione permute che ho incollato al post precedente, poi come utilizzi il vettore A?
    Ovviamente non serve a niente stamparlo ma utilizzarlo per il calcolo del costo nel mio caso, ora non so il tuo...
Devi accedere o registrarti per scrivere nel forum
13 risposte