Dizionario con chiave

di il
25 risposte

Dizionario con chiave

Ciao
spero tanto mi possiate essere di aiuto

Sono uno studente in informatica e devo progettare un Dizionario che ha uno schema composto da chiavi (LETTERE MAIUSCOLE) , lettere vere e proprie (MINUSCOLE) .
Il mio problema è che non so implementare uno schema del genere o meglio come faccio in java una cosa del genere ?
Vi riporto l esempio dato dal testo

l parola "acca"

è un istanza dello schema "aBBa" o anche dello schema "aCBa" o "CDcC" . Le lettere maiuscole son le chiavi e le minuscole son le lettere che compongono la parola

Spero di non essere stato troppo vago sul problema e vi ringrazio in anticipo per l aiuto

Edit:
Arrivato un messaggio di risposta .... ma risposte non ne vedo

25 Risposte

  • Re: Dizionario con chiave

    Ho letto e riletto ma non sono riuscito a capire un' "acca".
    Che correlazione c'è tra le chiavi e i valori?
  • Re: Dizionario con chiave

    Bella battuta e bella domanda .... Se vuoi ti posto il testo preciso perchè è proprio quello che non mi è chiaro
  • Re: Dizionario con chiave

    Allo il testo del problema dice

    Una parola è una sequenza finita di lettere minuscole
    Uno schema è una sequenza finita di caratteri appartenenti all alfabeto {a,b,c,.....z} U {A,B,C....Z}. Le lettere maiuscole rappresentano delle variabili su cui agisce la funzione di assegnamento.
    Un assegnamento è una funzione "SIGMA" da {A,B,C,...Z} a {a,b,c,....} (ossia, a ogni lettera maiuscola l' assegnamento associa una lettera maiuscola).
    Dato uno schema W = "alfa"1 ......"alfa"n e un assegnamento "SIGMA",indichiamo con "SIGMA"(W) la parola w= "BETA"1...."BETA"n tale che , per ogni 1<=i<=n, se "ALFA"i è una lettera minuscola allora "BETA"i = "SIGMA"("ALFA"i), se "ALFA"i è una lettera minuscola allora "BETA"i = "ALFA"i.
    Una parola w è un istanza di uno schema W se esiste un assegnamento "SIGMA" tale che w= "SIGMA"(W).

    Questo è il testo del compito purtroppo io non so come codificare la funzione che richiede, in pratica ogni lettera maiuscola può rappresentare una qualsiasi lettera minuscola in una qualsiasi parola


    Spero che sia più chiaro così , io non so come esprimerlo in codice è questa la difficoltà che trovo

    Vi ringrazio ancora e spero che qualcuno riesca ad aiutarmi
  • Re: Dizionario con chiave

    Ma e' BANALE!

    ti serve sapere:

    1) come funziona un ciclo
    2) come funziona un dizionario, detto anche mappa? Se non lo sai, STUDIA!

    Lascia perdere per il momento Java, ragiona SOLO in termini di ALGORITMO

    Il testo dell'esercizio e' molto teorico, ma l'implementazione saranno 10 righe di codice!
  • Re: Dizionario con chiave

    Adesso ho capito, a parte l'algoritmo di @migliorabile di mostro il ragionamento con l'esempio che hai fatto tu.
    La parola è "acca"
    Lo schema è "aBBa"
    adesso devi valutare se "acca" è un'istanza dello schema "aBBa".

    Per farlo puoi seguire l'algoritmo sopra citato.
    Splittiamo la parola "acca", abbiamo beta1="a", beta2="c", beta3="c", beta4="a".
    Lo schema invece è formato da: alfa1="a", alfa2="B", alfa3="B", alfa4="a".

    La funzione Sigma è una semplice mappa "m" che associa una lettera maiuscola ad una lettera minuscola.
    Adesso consideriamo ogni alfa_i e ogni beta_i (1<=i<=4)

    beta1="a", alfa1="a" (minuscola), sono uguali? SI, andiamo avanti
    beta2="c", alfa2="B" (maiuscola), m["B"] è uguale a "c"? Se SI, andiamo avanti, altrimenti "acca" non è un'istanza di "aBBa"
    beta3="c", alfa3="B" stessa cosa per beta2, alfa2
    beta4="a", alfa4="a" stessa cosa per beta1, alfa1
  • Re: Dizionario con chiave

    In effetti sto messo male per questo che sto chiedendo aiuto a voi e il mio problema è proprio di codifica perchè ai suggerimenti che mi avete dato ci ero arrivato anche io .
    Ho guardato e riguardato mappe dizionari alberi ma non ci arrivo
    plz help me
  • Re: Dizionario con chiave

    Ma che tipo di aiuto stai cercando?
    Che qualcuno faccia l'esercizio al posto tuo mentre tu sei in spiaggia?

    In pratica te l'ho gia' fatto io.
    Se aspetti ancora un po', lo cancello pure

    1) riguardati mappe dizionari alberi
    2) se non ci arrivi, goto 1)
    3) ci sei arrivato!
  • Re: Dizionario con chiave

    Comunque come "mappa" potresti usare anche un semplice array di lunghezza 26. In questo caso la lettera "A" sarà rappresentata dall'indice 0, la "B" dall'indice 1, ecc. In generale sottrai al carattere corrispondente alla lettera corrente il valore del carattere 'A'.
  • Re: Dizionario con chiave

    Guarda non sto cercando che qualcuno mi faccia l esercizio anche perchè questa è solo una parte di quello che devo fare...... e non sono al mare come credi tu .....io lavoro !!!
    cmq io delle prove prove di codice le avevo già fatte tipo questa :
    	private ArrayList<String> list;
    	
    	public RicercaParole(String mParola){
    		mParolaData = mParola;
    	}
    	
    	private boolean eChiave(){
    		char[] s = null;
    		for(int i =0 ; i < mParolaData.length();i++){
    				if(Character.isUpperCase(s[i]))
    					return true;
    			
    		}
    		return false;
    		
    	}
    	
    	private boolean eLettera(){
    		char[] s = null;
    		for(int i =0 ; i < mParolaData.length();i++){
    				if(Character.isLowerCase(s[i]))
    					return true;
    		}
    		
    		return false;
    	}
    	
    	
    //	 public List<String> cercaParole(List<String> parola){
    }
    	
    o questa
    	protected String mParolaData;
    	private Node strutturaParola;
    	
    	private class Node{
    		char key;
    		char letter;
    		Node next , prev ;
    		
    		public Node(char key, char letter) throws InvalidKeyException{
    		
    			if( Character.isUpperCase(key)){
    				this.key = key;
    			}else{
    				throw new InvalidKeyException();
    			}
    		
    			if(Character.isLowerCase(letter)){
    				this.letter = letter;
    			}
    			next = prev = null ;
    		}
    	}
    	
    
    
    	public void insert(char e,char k) throws InvalidKeyException{
    		if(this.isEmpty()){
    			Node p = new Node(e,k);
    			p.next = p.prev = p;
    			strutturaParola = p;
    		}
    		else{
    			Node p = new Node(e,k);
    			p.prev = strutturaParola;
    			p.next = strutturaParola.next;
    			strutturaParola.next = p;
    			strutturaParola.next.prev = p;
    		}
    	}
    	
    	private boolean isEmpty(){
    		return (strutturaParola==null);
    	}
    }
    
    in questa il confronto l ho messo nel costruttore e poi il ciclo lo metterei nel main per confrontare i vari caratteri ma qualcosa non funziona in questi due codici in effetti .
    Come mi hai suggerito tu @migliorabile non capisco come fare il passaggio
    if t[i] non nel dizionario d
           d[t[i]] = s[i]
    
    il d[t[]] non capisco
  • Re: Dizionario con chiave

    Niente ho letto e riletto studiato e ristudiato ma non ci arrivo.
    Anche con i suggerimenti di xeno riesco ad arrivarci ..... esiste il blocco del programmatore ?????
    ahhahahahahah.
    Dai raga qualche suggerimento in più ?
  • Re: Dizionario con chiave

    Vedi il d[t] come
     dictionaty.get(""+template.charAt(i))
    se dictionary è una Map
    oppure se usi l'array come ti ho suggerito, puoi vederlo come
     dictionary[template.charAt(i)-'A'] 
    Più chiaro di così non si può.
  • Re: Dizionario con chiave

    Ok volevo provare ad usare le mappe ma non ci ho capito niente però con gli array penso di esserci riuscito
    ecco il codice
    
    public boolean cercaParola(String schema){
    	 char[] arrParola = parola.toCharArray();
    	char[]  lettera = schema.toCharArray();
    	  //confronto se la lunghezza delle parole è uguale :
    	  if(arrParola.length!= lettera.length)return false;
    	  
    	  for(int i = 0; i < lettera.length; i++){
    		  //verifico se le lettere minuscole corrispondono
    		  if(Character.isLowerCase(lettera[i])&& lettera[i]!= arrParola[i]){
    			  return false;
    		  }
    		  //controllo che sia una chiave
    		   if(Character.isUpperCase(lettera[i])){
    			  for(int j = i ;j< lettera.length; j++){
    				  //Controllo che non vengano occoppiate 2 lettere alla stessa chiave;
    				  if(arrParola[i]!=arrParola[j] && lettera[i]==lettera[j]){
    					  return false;
    				  }
    			  }
    				  // assegno allo schema la lettera corrispondente
    			  lettera[i]= arrParola[i];
    		  }
    	  }
    	     return true;
    	     }
    
    che dite può andare ?
  • Re: Dizionario con chiave

    L'array o la mappa o il dizionario che definiscono la funzione Sigma dove è?
  • Re: Dizionario con chiave

    ....
Devi accedere o registrarti per scrivere nel forum
25 risposte