Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Huiswerkvragen: Exacte vakken (https://forum.scholieren.com/forumdisplay.php?f=17)
-   -   [IN] Java - Matrix (https://forum.scholieren.com/showthread.php?t=1783187)

Tripp 07-12-2009 21:42

Java - Matrix
 
Ik ben momenteel bezig een programma te schrijven dat 2 sequenties met elkaar moet gaan vergelijken. Nu heb ik een script waarin ik de sequenties heb zitten. En nu wil ik dat deze sequenties met elkaar worden vergeleken. En een waarde word toegekend. Op deze manier:

Code:


  A  R  N  D  C  Q  E  G  H  I  L  K  M  F  P  S  T  W  Y  V  B  Z  X  *
A  2 -2  0  0 -2  0  0  1 -1 -1 -2 -1 -1 -3  1  1  1 -6 -3  0  0  0  0 -8
R -2  6  0 -1 -4  1 -1 -3  2 -2 -3  3  0 -4  0  0 -1  2 -4 -2 -1  0 -1 -8
N  0  0  2  2 -4  1  1  0  2 -2 -3  1 -2 -3  0  1  0 -4 -2 -2  2  1  0 -8
D  0 -1  2  4 -5  2  3  1  1 -2 -4  0 -3 -6 -1  0  0 -7 -4 -2  3  3 -1 -8
C -2 -4 -4 -5 12 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3  0 -2 -8  0 -2 -4 -5 -3 -8
Q  0  1  1  2 -5  4  2 -1  3 -2 -2  1 -1 -5  0 -1 -1 -5 -4 -2  1  3 -1 -8
E  0 -1  1  3 -5  2  4  0  1 -2 -3  0 -2 -5 -1  0  0 -7 -4 -2  3  3 -1 -8
G  1 -3  0  1 -3 -1  0  5 -2 -3 -4 -2 -3 -5  0  1  0 -7 -5 -1  0  0 -1 -8
H -1  2  2  1 -3  3  1 -2  6 -2 -2  0 -2 -2  0 -1 -1 -3  0 -2  1  2 -1 -8
I -1 -2 -2 -2 -2 -2 -2 -3 -2  5  2 -2  2  1 -2 -1  0 -5 -1  4 -2 -2 -1 -8
L -2 -3 -3 -4 -6 -2 -3 -4 -2  2  6 -3  4  2 -3 -3 -2 -2 -1  2 -3 -3 -1 -8
K -1  3  1  0 -5  1  0 -2  0 -2 -3  5  0 -5 -1  0  0 -3 -4 -2  1  0 -1 -8
M -1  0 -2 -3 -5 -1 -2 -3 -2  2  4  0  6  0 -2 -2 -1 -4 -2  2 -2 -2 -1 -8
F -3 -4 -3 -6 -4 -5 -5 -5 -2  1  2 -5  0  9 -5 -3 -3  0  7 -1 -4 -5 -2 -8
P  1  0  0 -1 -3  0 -1  0  0 -2 -3 -1 -2 -5  6  1  0 -6 -5 -1 -1  0 -1 -8
S  1  0  1  0  0 -1  0  1 -1 -1 -3  0 -2 -3  1  2  1 -2 -3 -1  0  0  0 -8
T  1 -1  0  0 -2 -1  0  0 -1  0 -2  0 -1 -3  0  1  3 -5 -3  0  0 -1  0 -8
W -6  2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4  0 -6 -2 -5 17  0 -6 -5 -6 -4 -8
Y -3 -4 -2 -4  0 -4 -4 -5  0 -1 -1 -4 -2  7 -5 -3 -3  0 10 -2 -3 -4 -2 -8
V  0 -2 -2 -2 -2 -2 -2 -1 -2  4  2 -2  2 -1 -1 -1  0 -6 -2  4 -2 -2 -1 -8
B  0 -1  2  3 -4  1  3  0  1 -2 -3  1 -2 -4 -1  0  0 -5 -3 -2  3  2 -1 -8
Z  0  0  1  3 -5  3  3  0  2 -2 -3  0 -2 -5  0  0 -1 -6 -4 -2  2  3 -1 -8
X  0 -1  0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -2 -1  0  0 -4 -2 -1 -1 -1 -1 -8
* -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8  1

Ik heb geprobeerd om een array te maken, maar zonder al te veel succes. Misschien heeft iemand nog tips over hoe ik op zijn minst deze info in het script krijg? Ik wil als output een getal.

Voorbeeld van hoe het zou moeten werken:
Seq1 = VLS
Seq2 = VHL

V V = 4
L H = -2
S L = -3

4 -2 -3 = -1

Nu heb ik o.a. dit, ik zal niet alles op internet zetten. Maar voor het idee:

Code:


import java.util.Scanner;
import java.io.*;

public class Opdracht2 {

        //private boolean A[][];
        //private int row;
        //private int colm;

        public static void main (String[] args){

        // Twee aminozuur sequenties:
        String AminoSeq1 = "MEASALTSSAVTSVAKVVRVASGSAWWLPLARIATVVIGGVVAMAAVPMVLSAMGFTAAGIASSSIAAKMMSWAAIANGGGVASGSLVATLQSLGATGLSGLTKFILGSIGSAIAAVIARFY";
        String AminoSeq2 = "MEACALTSSAVTSVAKVVRVASGSAVVLPLARIATVVIGGGGMMAAVPMVLSAMGFTAAGIASSSIAAKMMSAAAIANGGGVASGSLVATLQSLLLTGLSGLTKFILGSIGSAIAAVIARFY";
        // Bepaal de lengte van de sequenties.
        int AminoLengte1 = AminoSeq1.length();
        int AminoLengte2 = AminoSeq2.length();

        // Array maken
        int[][] a = new int[AminoLengte1][AminoLengte2];
        }
}


Rob 09-12-2009 10:18

Het is niet nodig om de gehele matrix op te slaan, omdat de kolommen en rijen met dezelfde index dezelfde waarden hebben.

Ik ga er vanuit dat je de geposte matrix probeert in te lezen. In dat geval moet je nu eenmalig de rijen of kolommen inlezen. De rijen is makkelijker, omdat iedere regel één unieke sleutel bevat en zijn bijbehorende waardes.
Of je nou de combinatie AR of RA opslaat, het resultaat is hetzelfde, namelijk -2.

PHP-code:

private Map<Tuple<Character>, Integervalues = new HashMap<Tuple<Character>, Integer>(); 

De Map waarin alles opgeslagen wordt. De sleutel is een letterpaar en de waarde is de bijbehorende waarde uit jouw matrix.

Even wat grove pseudocode, alles is 0-based:
PHP-code:

//Ga over de regels 0 tot en met n. regelNr = huidige regelnummer. Regel 0 heeft key A, regel 1 heeft key R, etc..
Character lineKey;
//Ga per regel over de kolommen (23 - regelNr) tot en met het einde. De eerste paar kolommen hoeven niet, want van alles daarvoor heb je de inverse al gehad. Kolom 0 heeft key A, etc.
Character columnKey;
Integer value//Deze veranderd per kolom

values.put(new Tuple<Character>(lineKeycolumnKey), value); //Voeg toe aan de map 

Je hebt nu je twee sequenties die je moet vergelijken. Als de combinatie die je zoekt niet bestaat, moet je de inverse even proberen.

Ik neem aan dat de sequenties even lang zijn en dat de matrix altijd is zoals jij 'm gepost hebt.

PHP-code:

int score 0;
for(
int i 0sequence1.length(); i++) {
  
Tuple<Characterkey = new Tuple<Character>(sequence1.charAt(i), sequence2.charAt(i));
  if(
values.contains(key)) {
    
score += values.get(key).intValue();
  } else {
    
score += values.get(key.inverse()).intValue();
  }



De Tuple class:
PHP-code:


public class Tuple<T> {
    private 
T first;
    private 
T second;
    
    public 
Tuple(T firstElT secondEl) {
        
first firstEl;
        
second secondEl;
    }
    
    public 
Tuple<Tinverse() {
        return new 
Tuple<T>(secondfirst);
    }
    
    public 
T firstElement() {
        return 
first;
    }
    
    public 
T secondElement() {
        return 
second;
    }




Alle tijden zijn GMT +1. Het is nu 22:31.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.