Avatar billede axe2 Nybegynder
11. april 2002 - 20:15 Der er 22 kommentarer og
1 løsning

Algoritme søges eller kode 80)

Hej jeg mangler en algoritme der kan lave alle samtlige kombinationer ud af en array værdier. dvs. samtlige sum værdier i arrayet

eks:

array a = {1,2,4};

algoritmen skal kunne kombinere samtlige mulige sum værdier ud fra dette, hvordan.

Løsningen skal laves i Java, her. Men ser også gerne andet kode eller pseudo
Avatar billede axe2 Nybegynder
11. april 2002 - 20:15 #1
eller bare ideer :)
Avatar billede soreno Praktikant
11. april 2002 - 20:26 #2
var det sådan du havde tænkt:
public static void main(String args[])
{
    Vector v = new Vector(10);
    v.add(new Integer(1));
    v.add(new Integer(2));
    v.add(new Integer(4));
    v.add(new Integer(8));
   
    for(int i=0; i<v.size();i++)
    {
        for(int j=i+1; j<v.size();j++)
        {
            Integer a = (Integer)v.elementAt(i);
            Integer b = (Integer)v.elementAt(j);
            int sum = a.intValue() + b.intValue();
            System.out.println("[" + a + "][" + b + "]" + '\t' + "[Sum] " + sum);
        }
    }
}

resultat er:
[1][2]  [Sum] 3
[1][4]  [Sum] 5
[1][8]  [Sum] 9
[2][4]  [Sum] 6
[2][8]  [Sum] 10
[4][8]  [Sum] 12
Avatar billede erikjacobsen Ekspert
11. april 2002 - 21:02 #3
Den skal vel også skrive 15, i dit eksempel, Søren
Avatar billede soreno Praktikant
11. april 2002 - 21:07 #4
tænker du at der skal flere dimensioner på ? ([1][2][4][8] = 15)
Avatar billede soreno Praktikant
11. april 2002 - 21:13 #5
axe2> i såfald kunne jeg godt tænke mig at få defineret "samtlige mulige sum værdier"
Avatar billede erikjacobsen Ekspert
11. april 2002 - 21:14 #6
Det kunne jeg også godt tænke mig :)
Avatar billede axe2 Nybegynder
11. april 2002 - 21:21 #7
Samtlige mulige er altså alle former for kombinationer der kan laves på et array, uafhængigt af størrelsen på arrayet. dvs power(3,3) i tilfældet med de 3 elementer. Håber det gav mening. dvs en array med 3 elementer giver 27 mulige summe fra element værdierne
Avatar billede erikjacobsen Ekspert
11. april 2002 - 21:24 #8
Nej nej, med 3 elementer er de 3^2 = 9 muligheder. Med 4 er der
16, dvs 4^2. Du får dem på denne måde:


import java.util.*;
class SumSum {
  static Vector v = new Vector();

  static void tryit(int n,int sum) {
    if (n>=v.size()) {
      System.out.println(sum);
    } else {
      for (int i=0;i<=1;i++) {
        tryit(n+1,sum+((Integer)v.get(n)).intValue()*i);
      }
    }
  }

  public static void main(String args[]) {
    v.add(new Integer(1));
    v.add(new Integer(2));
    v.add(new Integer(4));
    v.add(new Integer(8));
 
    tryit(0,0);
  }

}
Avatar billede soreno Praktikant
11. april 2002 - 21:25 #9
jeg kan altså kun se følgende kombinationer med 3 elementer:
1 2 4
1 4 2
2 1 4
2 4 1
4 1 2
4 2 1

men summen af dem er jo altid den samme (1+2+4 == 1+4+2) ?
Avatar billede erikjacobsen Ekspert
11. april 2002 - 21:31 #10
Min løsning giver fx disse summer

  1
  2
  1+2
  2+4+8
  1+8
  1+2+4+8

...og flere... Måske det der menes ??
Avatar billede axe2 Nybegynder
11. april 2002 - 22:09 #11
erikjacobsen jeps det er det sidste jeg mente
altså
1
2
4
1+2
1+4
osv
Avatar billede erikjacobsen Ekspert
11. april 2002 - 22:11 #12
Hvis du også vil have tallene der indgår med, så kan du bare:

import java.util.*;

class SumSum {

  static Vector v = new Vector();

  static void tryit(int n,int sum,String s) {
    if (n>=v.size()) {
      System.out.println(sum+" ("+s+")");
    } else {
      int w=((Integer)v.get(n)).intValue();
      tryit(n+1,sum,s);
      tryit(n+1,sum+w,s+w+" ");
    }
  }

  public static void main(String args[]) {
    v.add(new Integer(1));
    v.add(new Integer(2));
    v.add(new Integer(4));
    v.add(new Integer(8));
 
    tryit(0,0,"");
  }

}
Avatar billede axe2 Nybegynder
11. april 2002 - 22:20 #13
sejt Erik, rekursiv løsning , takker
Avatar billede axe2 Nybegynder
11. april 2002 - 22:22 #14
Uden at have nærløst koden kan du sige mig om den virker på vector'en uanset dens størrelse
;)
Avatar billede erikjacobsen Ekspert
11. april 2002 - 22:23 #15
Uanset størrelse, ja. Du propper bare tal i. Men det tager længere,
og længere, og  ... gab ... længere tid, jo flere tal der er
Avatar billede axe2 Nybegynder
11. april 2002 - 22:39 #16
Arrgh damn fatter ikke en skid af det, kan det laves itterativt istedet, eller kan du komme med en lilli bitte forklaring på hvad der sker, er helt grøn på rekursion
Avatar billede erikjacobsen Ekspert
11. april 2002 - 22:55 #17
Alt rekursivt kan da laves iterativt - hvis man gider.

Jeg synes det ville være spild af tid.
Avatar billede axe2 Nybegynder
11. april 2002 - 22:59 #18
en lille forklaring er det muligt hvis du gider
Avatar billede erikjacobsen Ekspert
11. april 2002 - 23:14 #19
Jeg vil ikke forklare alt fra Adam til Eva. Kan du spørge om
noget specifikt, skal jeg gøre hvad jeg kan.
Avatar billede axe2 Nybegynder
11. april 2002 - 23:29 #20
Klart.

hvad sker der i disse to linier, hvorfor kaldes de 2 gange kan ikke lige genneskue ideen, men kender ideen bag rekursion, altså bare disse to linier, point gives hvis du vil ha
tryit(n+1,sum,s);
      tryit(n+1,sum+w,s+w+" ");
Avatar billede axe2 Nybegynder
11. april 2002 - 23:31 #21
jeg ønsker at samle værdierne i grupper, så jeg kan indsamle objekt grupperne der giver summen tilsammen, her kan du se hvad jeg bruger det til.

Derfra skal jeg kunne hente de objekter ud der f.eks gav 7 i sum, feks fra en vector
public static void makeBestCardSelection(int n, int sum, String s) {
   
   
   
   
    if (n >= pBord.size()) {
        //System.out.println(sum + " (" + s + ")");
    } else {
        int w = pBord.getCardAt(n).getValue();
        System.out.println(w);
        makeBestCardSelection(n + 1, sum, s);
        makeBestCardSelection(n+1,sum+w,s+w+" ");
    }
   




   
       
       
       
 
   
}
Avatar billede axe2 Nybegynder
11. april 2002 - 23:34 #22
f.eks

en grupper har værdierne
1 2 4 tilsammen 7
derefter skal der laves en metode der hedder finbedstevalg"højeste værdi, eller flest den med flest additions argumenter"
Avatar billede erikjacobsen Ekspert
11. april 2002 - 23:42 #23
Ok, i de to linier du nævner prøver jeg at lave summen enten
uden eller med den n'te værdi i vektoren. Læg mærke til at
w kun lægges til det ene sted.
fx: I første kald af metoden prøves først uden det første element
(med alle mulige summer af resten) og derefter med det første
element (med alle mulige summer af resten)
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