I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Du kan gøre det binært --- har du f.eks. fem elementer ( A B C D E ), så kan du også sige, at det er det samme som binært 11111 (=31) - derefter skriver du bare alle "kombinationer" ned til 1, så har du alle kombinationer - og på en måde der gør at der ikke både optræder en B D og en D B...
Jeg har lavet noget java-kode her- den er måske lidt forvirrende - men selve princippet går ud på at sige 1) jeg har n elementer 2) derfor har jeg (2^n)-2 muligheder (0 fratrukket) 3) jeg skal starte med mulighed (2^n)-1 (dette kalder vi idx) 4) jeg skal finde ud af hvor der er "tændte bits" (1-taller) i tallet idx 5) udskrive de elementer, som passer til de tændte bits 6) træk 1 fra idx 7) hvis jeg ikke er nået til tallet 0, så skal jeg gå til trin 4 igen...
Her er koden... public static void printCombos( String[] elems ) { int starttal = (int)Math.pow(2, elems.length) -1; //(starttal er 2^n -1) for(int idx = starttal; idx>0; --idx) {
// Hold en Stringbuffer, vi kan samle kombinationen i StringBuffer res = new StringBuffer();
// Find de elementer, som passer de tændte bits for(int p=elems.length-1; p>=0; --p) { int bitPos = (int)Math.pow(2,p); if( (idx & bitPos) == bitPos ) // IF idx AND bitPos == sand -- så udskriv elementet res.append(elems[p]); else res.append(" "); }
public class Comb { public static void process(int[] b) { for (int j = 0; j < b.length; j++) { System.out.print(" " + b[j]); } System.out.println(); } public static void allcomb(int[] a, int len, int[] b, int ix, int start) { if (ix < b.length) { for (int i = start; i < a.length; i++) { b[ix] = a[i]; allcomb(a, len, b, ix + 1, i + 1); } } else { process(b); } } public static void allcomb(int[] a, int len) { int[] b = new int[len]; allcomb(a, len, b, 0, 0);
} public static void allcomb(int[] a) { for (int len = 1; len <= a.length; len++) { allcomb(a, len); } } public static void main(String[] args) { int[] a = { 1, 3, 5 }; allcomb(a); } }
Synes godt om
Slettet bruger
09. oktober 2003 - 19:54#6
Jeg har ikke brugt nogle af jeres svar direkte, men tak for inspiration.
Hvis det ikke skal være fortløbende tal (og stadig må være PHP), gør du bare:
function try($t,$m,$s,$a) { if ($t>=$m) { if ($s!="") print "$s <br>\n"; } else { try($t+1,$m,$s." $a[$t]",$a); try($t+1,$m,$s,$a); } }
try(0,3,"",array(7,9,13));
(det kan evt simplificeres en anelse mere...)
Synes godt om
Slettet bruger
10. oktober 2003 - 19:46#8
erikjacobsen : Ihh hvor pænt. Tak.
Synes godt om
Ny brugerNybegynder
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.