Hardware Upgrade Forum

Hardware Upgrade Forum (https://www.hwupgrade.it/forum/index.php)
-   Programmazione (https://www.hwupgrade.it/forum/forumdisplay.php?f=38)
-   -   [Java] Aiuto su un algoritmo (https://www.hwupgrade.it/forum/showthread.php?t=2876476)


mistergks 07-02-2019 17:00

[Java] Aiuto su un algoritmo
 
Ciao a tutti!
sto studiando per un esame di algoritmi e strutture dati.
Avrei bisogno di un consiglio su come approcciarmi a un esercizio.
Il linguaggio da utilizzare è il Java e si possono utilizzare tutte le librerie che si vuole, purchè funzioni bene con tutti i casi di input oltre a quelli dell'esempio. Voi come lo risolvereste?
Ovviamente non chiedo la soluzione, ma vorrei capire qual'è il metodo più corretto per risolverlo nel migliore dei modi.


http://i65.tinypic.com/2e4bvxk.png

sottovento 12-02-2019 21:35

Io costruirei un grafo in cui ogni nodo contiene una parola. Il nodo adiacente al nodo attuale ha una sola lettera che varia.
Non dovrebbe essere difficile costruire un simile grafo.
Si tratta poi di percorrere il grafo dalla parola di partenza a quella di arrivo

Kaya 13-02-2019 15:28

Concordo sull'idea del grafo, si tratta di un grafo orientato non pesato.
Si tratta di trovare un cammino minimo tra i due nodi (Djstrka?)

sottovento 13-02-2019 19:23

Quote:

Originariamente inviato da Kaya (Messaggio 46068382)
Concordo sull'idea del grafo, si tratta di un grafo orientato non pesato.
Si tratta di trovare un cammino minimo tra i due nodi (Djstrka?)

Esatto. Ci sono anche altri algoritmi:
https://it.wikipedia.org/wiki/Cammino_minimo

In alternativa, si puo' rappresentare il grafo in maniera tabellare (tabella di interi), mettendo i noti di partenza in riga e di arrivo in colonna (o viceversa se si preferisce); poi si mettera' un 1 in questo caso se si puo' andare dal nodo di partenza a quello di arrivo. In questo caso il percorso non e' a senso unico visto che si puo' andare anche a ritroso (i.e. da CASA posso andare a CARA e viceversa), quindi la matrice sara' simmetrica rispetto alla diagonale principale.
Questione di gusti

Kaya 14-02-2019 07:54

Quote:

Originariamente inviato da sottovento (Messaggio 46068912)
Esatto. Ci sono anche altri algoritmi:
https://it.wikipedia.org/wiki/Cammino_minimo

In alternativa, si puo' rappresentare il grafo in maniera tabellare (tabella di interi), mettendo i noti di partenza in riga e di arrivo in colonna (o viceversa se si preferisce); poi si mettera' un 1 in questo caso se si puo' andare dal nodo di partenza a quello di arrivo. In questo caso il percorso non e' a senso unico visto che si puo' andare anche a ritroso (i.e. da CASA posso andare a CARA e viceversa), quindi la matrice sara' simmetrica rispetto alla diagonale principale.
Questione di gusti

Credo che invece sia più opportuno considerare un cammino orientato.

Facciamo ipotesi che devo andare da CARA a CASO: CARA->CASA->CASO
Nel mio grafo non avrò mai necessità di tornare indietro e quindi mettere un orientamento (vado a memoria) dovrebbe ridurre la complessità computazionale (diciamo che dovremmo stare al di sotto del caso peggiore O(n^2) ) [ripeto vado un po a memoria e non ho fatto conti]

eliano 20-02-2019 09:10

Per un approccio diverso...
 
Costruisci un albero n-ario nel quale ad ogni livello corrisponde la successiva lettera della parola:
liv.1 - 1a lettera
liv.2 - 2a lettera
...
liv.n - ultima lettera della/e parola/e più lunga/he
La radice dell'albero sarà un nodo fittizio.
Ogni nodo contiene puntatori ad altri contenenti la possibile lettera successiva o un puntatore nullo se il dizionario non contiene una parola che contenga quella lettera.
Discendendo l'albero fino a trovare la parola p2, dovresti percorrere il cammino minimo.
Se n è il numero di livelli, dovrebbe avere complessità spaziale 26^n e O(n) nel caso limite che il dizionario contenga tutte le possibili sequenze di n caratteri.


Tutti gli orari sono GMT +1. Ora sono le: 22:40.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Hardware Upgrade S.r.l.