Avatar billede thomaz Nybegynder
21. oktober 2001 - 20:19 Der er 4 kommentarer og
1 løsning

Sortering af array og over som indeks i et ny array

Har følgendespørgsmål.

Har et string array bestående af f.eks. tcgactacgatcgac. Min klasse får 2 int parametre, samt mitArray som input. Det jeg nu skal gøre er, at bruge disse integers som start positioner til MitArray. Nu skal jeg sammenligne 5 tegn ad gangen. F.eks. hvis jeg starter ved position 0 og  position 9. Så skal jeg sammenligne tcgac med tacga. De tegn der har den mindste værdi bliver markeret som 0 i et ny array. Så det jeg egentlig gør er at jeg laver et indekseret Array af MitArray der viser hvordan MitArray \"er\" sorteret. Hvis jeg f.eks.har 2 ens 5 x tegn ja så ses det i mit indekseret array som f.eks. 0,0


class sorter
{
  private int[]mitIndeksetArray;
  public sorter(String[] mitArray, int a, int b)
  {
   
/* tag a og b. som startpositioner til mitArray.
traverser mitArray for at finde ens tegn og for
at alfabetiseret mit Array. Hele resultatet lægges over i mit indekserede mitIndeksetArray. MitIndekseretArray kunne f.eks se sådan ud. 0,0,1,2,3,4,5,6,6,7 osv.   
**/
mitIndeksetArray = //traverser MitArray, sorter find ens og lav indeks og læg dette over i mitIndekseretArray


  }

}

Vil meget gerne se noget kode. Har brugt MEGET lang tid på dette her, og sidder fuldstændig fast. Har virkelig brug for noget hjælp.



Avatar billede logical Nybegynder
21. oktober 2001 - 20:41 #1
Jeg forstår stadig ikke hvad der er du vil :-)

Du siger, du har et string array, men viser en enkelt string. Dernæst alt det med de mindste værdier bliver markeret som 0, er det A i dit tilfælde, og betyder det så ikke, at din eksempel string bliver til 312013012031201 ??
Avatar billede disky Nybegynder
21. oktober 2001 - 20:51 #2
jeg er heller ikke med på hvad du mener.

Er det noget med DNA du roder med ? Synes jeg kan huske de 4 bogstaver du bruger.

Forsøger du at finde ud af om noget af dit array bliver gentager andrer steder i dit array ?

hvis det er det du søger.

Kan du bruge et princip man anvender i digital signal behandling, det hedder cirkulær korrelation. Det bliver brugt til at undersøge om en signal på en eller anden måde gentager sig selv.
Avatar billede thomaz Nybegynder
22. oktober 2001 - 07:32 #3
Disky lige netop det er DNA jeg roder med.  Vedr mindste værdi så er det f.eks. atbcg(som vil får tildelt værdien 0) derefter kommer atccg(som vil få tildelt værdien 1) osv. Jeg forsøger at sortere mit array samt at finde gentagelser. Efter sorteringen vil mit indekserede array kunne se sådan ud array

0,0,1,2,3,4,4,5,6,7,8,8,

hvor 0,0 og 4,4 og 8,8 indikerer at jeg har to ens dna \"ord\" og alle integers indikerer den alfabetiserede rækkefølge

Logical. Sorry det er ikke en streng jeg har men et array. MitArray {t,c,g,t,c,g,c,g,t,g,f,c,d} osv.
Avatar billede frosig Nybegynder
22. oktober 2001 - 23:02 #4
Sådan, som jeg har forstået det, så repræsenterer b slut-værdien for, hvilke bogstaver, der skal sorteres. Er det rigtigt?

Hvis det er, så kan du oprette et temp-array, hvor hvert index indeholder 5 X bogstaver, som skal sorteres. Så sortere du dem med en eller anden sorterings-algoritme.

Til sidst så sammenligner du til at starte med index 0 og 1, derefter 1 og 2 osv...

Jeg håber, at det har hjulpet og at jeg har forstået det rigtigt.
Avatar billede jakoba Nybegynder
24. oktober 2001 - 00:10 #5
// Hvis det er dna og de sekvenser der skal findes maximalt
// er 5 grupper lange // har vi 4 i 5\'te = 1024 mulige kombinationer
// at lede efter i en gevaldig lang streng.
//
// Det er ikke vældig mange så mon ikke det er nemmere at sige:

public class Monsterfinder {
 
static String alfabet = \"acgt\";

static String tilStr( int nr ) {
    String res = \"\";
    for (int i=0; i<5; i++ ) {
        res = alfabet.charAt( nr % 4 ) +res;
        nr /= 4;
    }
    return res;
}; //end tilstr

static int fraStr( String str ) { // værd at optimere
    int res = 0;
    for (int i=0; i<5; i++ ) {
        res = 4*res + alfabet.indexOf( str.charAt(i) );
    }
    return res;
}; //end fraStr

public static void main(String[] args) {

    String dna;
    int[] tael = new int[1024];    // opret udfaldsrum
   
    dna = syslinie();
    while ( dna.length() > 5 ) {

        for (int i=0; i<1024; i++ ) tael[i]=0;

        for (int i=dna.length()-5; i>=0; i-- )
            tael[ fraStr( dna.substring(i,i+5) ) ]++;

        int accountedfor = 0;
        int i = 0;
        while ( accountedfor < 1024 ) {
            String fnd = \"\";
            int antal = 0;
            for (int j=0; j<1024; j++ ) {
                if ( tael[j] == i ) {
                    fnd += \", \"+tilStr( j );
                    antal += 1;
                    if ( (antal%10)==0 ) fnd+=\"\\n\";
                }
            }
            if ( antal > 0 ) {
                System.out.println( \"Der var \"+antal+\" strenge med \"+i+\" forekomster:\" );
                System.out.println( fnd.substring(1) );
            }
            i++;
            accountedfor += antal;
        }
        dna = syslinie();
    }

}; //end main

static String syslinie() {
    int i;
    String res = \"\";
    try {
        while ( (i=System.in.read()) != 13 ) res += (char) i;
    } catch (Exception e) { };
    return res;
}; //end syslinie

} //endclass Monsterfinder

// ccccccccccggggggggggttttttttttaaaaaaaaaaaatttttttttttccccccccctttttttttgct
// aacgttgcaggccttcgattcaaggctctgagtcaagtccccagctacttgcaaagctatttcgaaagcctta
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester