Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici
DJI porta un importante aggiornamento alla sua linea di gimbal camera tascabili con Osmo Pocket 4: sensore CMOS da 1 pollice rinnovato, gamma dinamica a 14 stop, profilo colore D-Log a 10 bit, slow motion a 4K/240fps e 107 GB di archiviazione integrata. Un prodotto pensato per i creator avanzati, ma che convince anche per l'uso quotidiano
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-02-2007, 17:44   #1
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
[C++] Minor cammino (semplice)

Salve a tutti. Il problema è semplice: dobbiamo attraversare un castello 5x5 stanze, ed ogni stanza ha un certo costo di attraversamento. Si parte sempre da quella più sud. La versione è semplice e di prestazioni scarse, senza quindi utilizzare programmazione dinamica e altri artefici.

Codice:
#include <iostream>

using namespace std;

#define INF 1000000

int n=5;
int castle[5][5]={{6,7,4,7,8},{7,6,1,1,4},{3,5,7,8,2},{2,6,7,0,2},{7,3,5,6,1}};


int min(int n1, int n2, int n3)
{
    int tmin=n1;
    if (tmin > n2)
        tmin = n2;
    if (tmin > n3)
        tmin = n3;
    
    return tmin;
}


int minCost(int x, int y)
{
    if (x < 0 || x >= n)
        return INF;
    else if (y == 0)
        return castle[x][y];
    else
        return min(minCost(x-1, y-1), minCost(x, y-1), minCost(x+1, y-1)) + castle[x][y];
}


int main()
{
    int x, y=4;
    
    cout << "x da cui partire (0-4): "; cin >> x;
    
    cout << minCost(x,y);
    system("PAUSE");    
}
Eppure il risultato è sempre sbagliato... Qualcuno mi sa dire perchè? Il codice è esattamente quello trovato su Wikipedia, alla seguente pagina
http://it.wikipedia.org/wiki/Programmazione_dinamica
e non è nulla di trascendentale... dove sbaglio?
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 14:30   #2
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
Nessuno? é.è
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 14:46   #3
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
In che senso il risultato è sbagliato?
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 15:19   #4
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
Codice:
 | 6 | 7 | 4 | 7 | 8 |
 | 7 | 6 | 1 | 1 | 4 |
 | 3 | 5 | 7 | 8 | 2 |
 | 2 | 6 | 7 | 0 | 2 |
 | 7 | 3 | 5 | 6 | 1 |
Questa è la matrice

Se parto dalla casella centrale (5), è evidente che il percorso più breve è:
5 + 0 + 2 + 1 + 4 = 12
Eppure mi restituisce 11. E la stessa cosa in altri casi
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 15:35   #5
yorkeiser
Senior Member
 
L'Avatar di yorkeiser
 
Iscritto dal: Jul 2006
Città: Tristram
Messaggi: 517
Lo provo
__________________
Il sole è giallo
yorkeiser è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 15:45   #6
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
Se provi addirittura a partire dall'ultimo (1) ti da 11, mentre è evidentemente 8...
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 17:59   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quello che hai utilizzato è un algoritmo greedy: in pratica scegli di spostarti sulla casella vicina che ha costo minore, ma non porta ad un cammino ottimale se non in rari casi.
Comunque ad occhio non vedo problemi...provo a guardarlo meglio.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 18:52   #8
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
Sicuro? Perchè cmq si richiama ricorsivamente sulle caselle successive, scegliendo quelle da cui parte il cammino più breve, e per farlo ripete la cosa su quelle successive ancora... E' molto inefficiente in termini di tempo, però dovrebbe portare alla soluzione ottimale...
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 18:58   #9
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
E cmq resta il fatto che partendo dalla centrale mi da 11 e non 12, quindi il problema è che è TROPPO ottimale XD
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 19:09   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Mesh89 Guarda i messaggi
Sicuro? Perchè cmq si richiama ricorsivamente sulle caselle successive, scegliendo quelle da cui parte il cammino più breve, e per farlo ripete la cosa su quelle successive ancora... E' molto inefficiente in termini di tempo, però dovrebbe portare alla soluzione ottimale...
Guarda questo:

00054
05432
05432
05432
00600

Partendo da quella centrale in basso il tuo farebbe: 6 + 5 + 0 + 0 + 0
Mentre il cammino minore ha costo nullo..

Questo perché permetti sempre e solo di salire di una riga...quando in teoria il cammino minimo potrebbe passare anche da una cella adiacente lateralmente.

C'è un algoritmo del cammino a costo minimo che si chiama Dijkstra...lo puoi adattare semplicemente al tuo algoritmo. Una implementazione dell'algoritmo si chiama Forward Search e la puoi realizzare staticamente e facilmente con due vettori di strutture da 25 elementi (in teoria si farebbe meglio con una lista, ma in questo modo non dove fare allocazione dinamica).
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 19:45   #11
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
Si, conosco Dijsktra... cmq ripeto, questo è solo un adattamento del codice proposto alla pagina, mi servirebbe per arrivare poi a capire il passo successivo, non voglio risolvere il problema in modo ottimale, è chiaro che è una pessima via... Però non da il risultato che dovrebbe! Trovato nulla?
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2007, 22:40   #12
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130

Codice:
#include <iostream>

const int INF = 1000000;
int n = 4;
int castle[5][5] = {{6,7,4,7,8},
                    {7,6,1,1,4},
                    {3,5,7,8,2},
                    {2,6,7,0,2},
                    {7,3,5,6,1}};

int min(int n1, int n2, int n3)
{
    return (n1 < n2) ? ((n1 < n3) ? n1 : n3)
                     : ((n2 < n3) ? n2 : n3);
}

int minCost(int x, int y)
{
        if (x < 0 || x > n)
                return INF;
        if (y == 0)
                return castle[y][x];
        return min(minCost(x-1, y-1),
                   minCost(x, y-1),
                   minCost(x+1, y-1)) + castle[y][x];
}

int main()
{
    int x;

    std::cout << "x da cui partire (0-4): ";
    std::cin >> x;
    std::cout << minCost(x, n) << std::endl;
}
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2007, 12:53   #13
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
? O.o"
Mi hai solo indentato il codice in modo diverso, o sbaglio?
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2007, 13:14   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ti ha messo anche questo: if (x < 0 || x > n)
Però sinceramente non mi torna...perchè con x==5 questo fa la chiamata ricorsiva, ma accede a castle[y][5] che è fuori dallo spazio allocato.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2007, 14:09   #15
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ah...ha portato n a 4
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2007, 14:14   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Mesh89 Guarda i messaggi
Codice:
 | 6 | 7 | 4 | 7 | 8 |
 | 7 | 6 | 1 | 1 | 4 |
 | 3 | 5 | 7 | 8 | 2 |
 | 2 | 6 | 7 | 0 | 2 |
 | 7 | 3 | 5 | 6 | 1 |
Questa è la matrice

Se parto dalla casella centrale (5), è evidente che il percorso più breve è:
5 + 0 + 2 + 1 + 4 = 12
Eppure mi restituisce 11. E la stessa cosa in altri casi
Boh...a me restituiscono 12 entrambi i programmi !!!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2007, 18:00   #17
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
A me 11, e partendo da altre caselle da risultati ugualmente sbagliati... Giuro, non vi sto prendendo in giro! Com'è possibile? ?_?
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2007, 18:35   #18
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
No mi torna 11, non mi aveva ricompilato
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2007, 22:27   #19
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
Codice:
[jcd@server tmp]$ ./camminomin
x da cui partire (0-4): 2
12
[jcd@server tmp]$ ./camminomin
x da cui partire (0-4): 4
8
[jcd@server tmp]$
Aguzzate la vista!
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
Old 17-02-2007, 23:02   #20
Mesh89
Member
 
Iscritto dal: Dec 2006
Messaggi: 198
Perchè a certi torna 11 ad altri 12?
Mesh89 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
Nuovo trailer per Street Fighter: un fil...
Sovranità sui dati: arriva la pri...
Schede video NVIDIA e AMD di nuovo su Ma...
Robot aspirapolvere, TV OLED, iPhone 17 ...
EUREKA J15 Pro Ultra super interessante ...
Intel porta l'AI nei notebook entry-leve...
6000 mAh, 5G e 108MP a meno di 200€: ecc...
FRITZ!Mesh Set 2700: Wi-Fi 7 in tutta la...
Amazfit Cheetah 2 Pro: lo smartwatch per...
Intel, focus su GPU workstation e datace...
Addio definitivo a iOS 26.4, Apple blocc...
EPYC di nuova generazione: AMD supporter...
AMD, Arm e Qualcomm scommettono su Wayve...
Intel potrebbe estendere la vita del soc...
Windows, gli aggiornamenti di aprile for...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:37.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v