Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [JAVA] Indici e range

  1. #1

    Problema con gli indici

    Ciao ho uno pseudo codice che devo tradurre in Java solo che non ottengo il corretto risultato. Se traduco pari pari il compilatore dice (con una eccezione) che sono fuori range
    questa è la mia parte di codice:
    for (int i=0;i<m;i++)
    for (int j=0;j<n;j++)
    if (x.charAt(i)==y.charAt(j))
    {
    //System.out.println("Y: "+y.charAt(j));
    c[i][j]=c[(i+1)-1][(j+1)-1]+1;
    b[i][j]=1; //freccia diagonale
    }
    else if (c[(i+1)-1][j]>=c[i][(j+1)-1])//(c[i-1][j]>=c[i][j-1]) c[(i+1)-1][j]>=c[i][(j+1)-1]
    {
    c[i][j]=c[i][(j+1)-1];//c[i][j]=c[(i+1)-1][j];
    b[i][j]=2; //freccia in alto
    }
    else {c[i][j]=c[(i+1)-1][j];
    b[i][j]=3; //freccia in alto
    }
    Allego lo pseudo codice

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    Il linguaggio va indicato anche nel titolo della discussione, come da Regolamento.

    Correggo io.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    fai vedere il codice che ha scritto e l'errore come e dove te lo da!
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  4. #4
    non mi da errore, mi stampa un risultato diverso! Secondo voi è giusta l'operazione che ho fatto sugli indici?
    anziche darmi la stringa risultato BDAB mi da BDB

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    spieghi un po' che dovrebbe fare sto codice? Stai per caso cercando di compilare la matrice per la ricerca della massima sottostringa comune?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  6. #6
    Esatto! ho in ingresso 2 stringe e mi deve tornare la piu lunga sottosequenza comune.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    questo ti compila la matrice

    codice:
    private int[][] compileM(String a, String b) {
            int[][] L = new int[a.length()+1][b.length()+1];
            for (int i = 0; i < L.length; i++) {
                L[i][0] = 0;
            }
            for (int j=0; j <L[0].length; j++) {
                L[0][j] = 0;
            }
            for (int i = 0; i < a.length(); i++) {
                for (int j=0; j < b.length(); j++) {
                    if (a.charAt(i)==b.charAt(j)) {
                        L[i+1][j+1]=L[i][j]+1;
                    }
                    else {
                        L[i+1][j+1] = Math.max(L[i][j+1], L[i+1][j]);
                    }
                }
            }
            return L;
        }
    La prima riga e prima colonna sono i pivot per la ricerca della MSC... quando le raggiungi hai finito.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Grazie lo provo

  9. #9
    Ciao Andrea, come mai il tuo codice compila la matrice saltando una riga ed una colonna? Ho notato inserendo le stringhe ABCBDAB e BDCABA il numero massimo nella matrice è 3. Dovrebbe essere 4 perchè rappresenta la lunghezza della LCS

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    public class LCS {
    
        public int[][] M;
        public String LCS;
    
        public static int[][] compileM(String a, String b) {
            int[][] L = new int[a.length()+1][b.length()+1];
            for (int i = 0; i < L.length; i++) {
                L[i][0] = 0;
            }
            for (int j=0; j <L[0].length; j++) {
                L[0][j] = 0;
            }
            for (int i = 0; i < a.length(); i++) {
                for (int j=0; j < b.length(); j++) {
                    if (a.charAt(i)==b.charAt(j)) {
                        L[i+1][j+1]=L[i][j]+1;
                    }
                    else {
                        L[i+1][j+1] = Math.max(L[i][j+1], L[i+1][j]);
                    }
                }
            }
            return L;
        }
    
        private String reverse(String s) {
            String temp="";
            for (int i=0; i < s.length(); i++) {
                temp += s.charAt(s.length()-i-1);
            }
            return temp;
        }
    
        public LCS(String a, String b) {
            LCS = "";
            M = compileM(a,b);
            int i = M.length-1;
            int j = M[0].length-1;
      
            while (i > 0 && j > 0) {
                if (a.charAt(i-1)==b.charAt(j-1)) {
                    LCS += a.charAt(i-1);
                    i--; j--;
                }
                else {
                    if (M[i][j-1] > M[i-1][j]) {
                        j--;
                    }
                    else {
                        i--;
                    }
                }
            }
            LCS = reverse(LCS);
        }
    
        public String toString() {
            StringBuffer buf = new StringBuffer();
            for (int i=0; i < M.length; i++) {
                for (int j = 0; j < M[0].length; j++) {
                    buf.append(M[i][j]+"  ");
                }
                buf.append("\n");
            }
            buf.append("\n\n"+LCS);
            return buf.toString();
        }
        public static void main (String[] args) {
            LCS lcs = new LCS( "ABCBDAB", "BDCABA");
            System.out.println(lcs);
        }
    }
    Credo sia corretto, o no?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.