Binomialkoeffizient, wie findet man k und n heraus

sserio

Bekanntes Mitglied
Ich habe mich mal an https://projekteuler.de/problems/18 drangesetzt und mir überlegt, dass ich ja jeden Weg in einer Liste speichern könnte. Die Listen dann jeweils zusammen rechnen und die größte wiedergeben. Die Frage ist bloß, wie man k und n herausfindet oder ob man diese gar nicht erst dafür braucht.
Java:
75
95 64
17 47 82
18 35 87 10
20 04 82 47 65
19 01 23 75 03 34
88 02 77 73 07 63 67
99 65 04 28 06 16 70 92
41 41 26 56 83 40 80 70 33
41 48 72 33 47 32 37 16 94 29
53 71 44 65 25 43 91 52 97 51 14
70 11 33 28 77 73 17 78 39 68 17 57
91 71 52 38 17 14 91 43 58 50 27 29 48
63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23
 

Jw456

Top Contributor
Du sollst doch genau so duch das Dreieck gehen wie in dem Beispiel.

Also Spitze
Dann erste Zahl
Dann zweite
Dritte ....
 

Jw456

Top Contributor
Du brauchst doch nur von der Spitze
Dach unten immer in der Zeile unter dem Wert den größeren Wert benutzen.
Ausgehend von diesem wider eins tiefer und den größeren von den beiden benutzen.
....
 

fhoffmann

Top Contributor
Ich würde mal einen Ansatz mit Dynamic Programming versuchen.
Das ist im Prinzip korrekt - wird aber erst im Euler-Problem 67 verlangt.
Im Euler-Problem 18 kannst du alle möglichen Pfade ausprobieren und dir das Maximum merken:
Code:
int max = 0;
für jeden möglichen Pfad {
  int berechneteLänge = ...
  if (berechneteLänge > max) {
    max = berechneteLänge;
  }
}
System.out.println(max);
 

Jw456

Top Contributor
Fange unten an bilde die beiden Pärschen. Trage das größere Ergebnis in das Array ein .
Mit der nächsten Zeile das gleiche bis nach oben dann hast du dein Ergebnis.



Java:
      3
    7   4
  2   4   6          
8   5   9   3          



                3+20=23

         7+13=20     4+15=19

    2+8=10    4+9=13     6+9=15

8          5          9            3
 

sserio

Bekanntes Mitglied
Fange unten an bilde die beiden Pärschen. Trage das größere Ergebnis in das Array ein .
Mit der nächsten Zeile das gleiche bis nach oben dann hast du dein Ergebnis.



Java:
      3
    7   4
  2   4   6         
8   5   9   3         



                3+20=23

         7+13=20     4+15=19

    2+8=10    4+9=13     6+9=15

8          5          9            3
Ich habe es jetzt geschafft, durch "Glück"
Java:
package ProjectEuler18;

public class Main {
    public static int triangle[][];

    public static void main(String[] args) {
        triangle = new int[15][15];
        addTo(0, new int[]{75});
        addTo(1, new int[]{95, 64});
        addTo(2, new int[]{17, 47, 82});
        addTo(3, new int[]{18, 35, 87, 10});
        addTo(4, new int[]{20, 4, 82, 47, 65});
        addTo(5, new int[]{19, 1, 23, 75, 3, 34});
        addTo(6, new int[]{88, 2, 77, 73, 7, 63, 67});
        addTo(7, new int[]{99, 65, 4, 28, 6, 16, 70, 92});
        addTo(8, new int[]{41, 41, 26, 56, 83, 40, 80, 70, 33});
        addTo(9, new int[]{41, 48, 72, 33, 47, 32, 37, 16, 94, 29});
        addTo(10, new int[]{53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14});
        addTo(11, new int[]{70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57});
        addTo(12, new int[]{91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48});
        addTo(13, new int[]{63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31});
        addTo(14, new int[]{4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23});
        for (int i = 0; i < triangle.length; i++) {
            for (int j = 0; j < triangle[i].length; j++) {
                System.out.printf("%1$02d ", triangle[i][j]);
            }
            System.out.println();
        }
        System.out.println(biggestPathSum(triangle));
    }

    public static void addTo(int row, int[] numbers) {
        int index = numbers.length;
        int temp = 0;
        for (int i = 0; i < triangle[row].length; i++) {
            if (temp < index) {
                triangle[row][temp] = numbers[temp];
                temp++;
            }
        }
    }

    public static int biggestPathSum(int[][] triangle) {
        int summenHalter = 0;
        for (int i = triangle.length - 2; i >= 0; i--) {
            for (int j = 0; j <= i; j++) {
                final int LEFT = j;
                final int RIGHT = j + 1;
                triangle[i][j] += Math.max(triangle[i + 1][LEFT], triangle[i + 1][RIGHT]);
            }
        }
        return triangle[0][0];
    }
}
Wüsstest du warum man bei meiner Methode biggestPathSum() bei der ersten ForSchleife bei length -2 anfängt und nicht bei length -1. Also ich habe es ausprobiert und -2 ist richtig, jedoch erscheint mir -1 logischer
 

Jw456

Top Contributor
Minus 1 ist ja weil das Array von 0 bis 14 geht und triangle.length dir 15 die Anzahl der Elemente gibt.
Die letzte Zeile hast du ja schon also geht es bei 0-14 bei 13 los.

Wenn dir triangle.length 15 gibt dann minus 2
 

berndoa

Top Contributor
Also falls du die einzelnen Zeilen der Pyramide als Listen /arrays gegeben hast, dann würde ich mir ganz salopp nur das in der letzten Reihe benutzte Element und dessen Index merken.

Also zuerst Element=75, index=0 (1. reihe hat halt nur 1 element welches an index=0 ist)
nächste reihe hat 2 elemente mit index 0 und 1.
dann guckst du dir deinen aus der vorreihe üebrnommenen index an und vergleichst ob
reihe2[index] oder reihe2[index+1] größer ist.
je nachdem wird element und idnex auf das gewählte objekt angepasst.

rinse and repeat. Und natürlich nicht vergessen, bei jeder wahl eines Elements das zu einer separat geführten Summierungsvariable hinzuzuzählen (schließlich wilslt du ja nicht nur den gewissen pfad an elemente lang gehen sondern auch deren Summe wissen!

Edit: Nur wie ich die Aufgabe verstand, falls es da andere Auffassungen gibt:
Man hat ein rotes gewähltes Element in zeile k an index i.
das nächste element in der zeile darunter, also in zeile k+1, findet man indem man sich in zeile k+1 die elemente an idnexstelle i und i+1 anguckt, guckt, wldches von beiden größer ist und dasjenige als das folgelement des pfades nimmt.
rinse and repeat bis man von ganz oben nach ganz unten kam.
und halt zwischendurch die jeweils gewählten elemente aufaddieren, was nicht schwer ist.

habt ihr die Aufgabe anders aufgefasst?
Manche der Beiträge hier lassen es vermuten
 

berndoa

Top Contributor
Ja. Es soll die maximale Summe gefunden werden.

Beispiel:
Code:
  1
 1 3
9 3 4

Nach Deiner Methode würdest Du den Pfad 1 -> 3 -> 4 wählen (Summe 8). Gesucht wäre aber 1 -> 1 -> 9 (Summe 11).
Ja, nahc etwas mehr Überlegen habe ich auch den Untershcied verstanden.

Aber, gerade wenn man die Beispielpyramide anguckt, scheint es ja wirklich so als würde man von oben nach unten immer zum Größeren der beiden Nachfolgewerte gehen.

Im Beispiel also der Pfad 3,7,4,9.
Dass der, rein zufällig, der Pfad ist wo die Summe der Pfadelemente größer ist als alle anderen möglichen Pfade, war aus der schlecht gewählten Pyramide so nicht ersichtlich für mich.

Aber jetzt versteh ichs auch und es ist fast schon genial wie man die bisherige Summe der Pfadelemente von unten immer weiter mit nach oben zieht.,

Muss man erst mal draufkommen.

Nur, falls mal gefragt, dadraus dann den perfekten Pfad zu rekonstruieren wird schwierig :)

An sich habt ihr das in ein hübsches Rekursionsproblem umgeformt, bei dem die Arraylänge immer kleiner wird :)




@M.L. : Mein Vorgehen hatte auch Methode, es hat nur die falsche Aufgabenstellung beantwortet :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
sserio Binomialkoeffizient n/k Java Basics - Anfänger-Themen 7
H Binomialkoeffizient Java Basics - Anfänger-Themen 6
J Binomialkoeffizient Java Basics - Anfänger-Themen 12
V Binomialkoeffizient-Produktformel Java Basics - Anfänger-Themen 8
W Binomialkoeffizient iterativ/rekursiv Java Basics - Anfänger-Themen 2
K Binomialkoeffizient rekursiv berechnen Java Basics - Anfänger-Themen 8
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
V Wer findet den Fehler :) Java Basics - Anfänger-Themen 12
P module-info findet zweites Paket nicht Java Basics - Anfänger-Themen 1
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
J Java findet plötzlich die Dateien im Projekt nicht mehr. Java Basics - Anfänger-Themen 12
D jsoup.select findet keine elemente Java Basics - Anfänger-Themen 2
J Compiler-Fehler Java findet main Klasse nicht Java Basics - Anfänger-Themen 16
K Schlüsselworte Nach Java update findet mdb Datei nicht Java Basics - Anfänger-Themen 6
A Vollkommene Zahlen: Findet keine Einzige Java Basics - Anfänger-Themen 9
O Javac findet die .java datei nicht Java Basics - Anfänger-Themen 2
snipesss Eclipse Neon findet meine Projekte nicht? Java Basics - Anfänger-Themen 1
snipesss IDE findet meine .txt Datei nicht! Java Basics - Anfänger-Themen 12
J .jar findet DATEI nicht Java Basics - Anfänger-Themen 2
A Umgebungsvariable CMD findet Hauptklasse nicht (hat bereits funktioniert) Java Basics - Anfänger-Themen 6
N Java find - findet nix Java Basics - Anfänger-Themen 1
S Classpath Findet die Klasse nicht classpath setzen? Java Basics - Anfänger-Themen 8
J JavaScript findet Applet Methode nicht Java Basics - Anfänger-Themen 2
C Jar Datei findet Bibliothek nicht Java Basics - Anfänger-Themen 2
K Programm findet datei in Jar nicht Java Basics - Anfänger-Themen 9
S Applet findet Klasse nicht Java Basics - Anfänger-Themen 7
C Variablen Findet Variable nicht Java Basics - Anfänger-Themen 13
E Executable jar-file findet class nicht Java Basics - Anfänger-Themen 12
T eclipse findet javax nicht Java Basics - Anfänger-Themen 4
M JDK installieren Glassfish, bzw. ArgoUML findet die JRE nicht Java Basics - Anfänger-Themen 4
H HashMap<Int, String> - Er findet die Int-Klasse nicht. Java Basics - Anfänger-Themen 3
J Compiler findet method nicht Java Basics - Anfänger-Themen 12
A CMD findet die java.class Datei nicht Java Basics - Anfänger-Themen 46
R FileInputStream findet Datei nicht Java Basics - Anfänger-Themen 5
S jar-File findet Hauptklasse nicht Java Basics - Anfänger-Themen 9
T Ausgabe findet nicht statt Java Basics - Anfänger-Themen 4
A Findet Main class nicht Java Basics - Anfänger-Themen 12
P Datentypen Warum findet er diese methoden nicht? Java Basics - Anfänger-Themen 13
Fu3L Programm findet nach .jar-Export Dateien nicht Java Basics - Anfänger-Themen 3
C Testprogramm kann nicht compiliert werden - javac findet file nicht Java Basics - Anfänger-Themen 12
Z Programm findet MAIN Datei nicht Java Basics - Anfänger-Themen 2
N Compiler findet array in gleicher methode nicht Java Basics - Anfänger-Themen 4
megachucky FileInputStream findet nur absoluten Pfad, keinen Relativen ?! Java Basics - Anfänger-Themen 7
M javac findet Oberklassedatei nicht Java Basics - Anfänger-Themen 7
GilbertGrape findet jar aus Classpath nicht Java Basics - Anfänger-Themen 4
C Wo findet man den Inhalt vordefinierter Methoden? Java Basics - Anfänger-Themen 15
B HashMap findet Key nicht Java Basics - Anfänger-Themen 2
Q Findet existierendes File auf Festplatte nicht Java Basics - Anfänger-Themen 6
M Wer findet den Fehler? Java Basics - Anfänger-Themen 19
G (csv)Datei lesen FindBug findet mgl. NullPointer - wie lösen Java Basics - Anfänger-Themen 3
M Deploy findet Datei nicht Java Basics - Anfänger-Themen 2
N Vergleich findet nicht statt. Java Basics - Anfänger-Themen 13
G Anwendung findet vorhandene Klasse nicht Java Basics - Anfänger-Themen 4
N Mein Applet findet -online- einfach die Klasse nicht ! Java Basics - Anfänger-Themen 6
E jedit findet javac nicht Java Basics - Anfänger-Themen 64
H JAR findet die main-class nicht Java Basics - Anfänger-Themen 9
I Hilfe wer findet mein Fehler in bei der Endlosschleife Java Basics - Anfänger-Themen 7
M Compiler findet main nicht Java Basics - Anfänger-Themen 4
H Anwendung findet Datei nicht Java Basics - Anfänger-Themen 2
A Programm findet keine wav-Dateien im jar Archiv Java Basics - Anfänger-Themen 4
T Totaler Anfänger findet Fehler nicht. Java Basics - Anfänger-Themen 13
G Programm findet andere .class-Dateien nicht Java Basics - Anfänger-Themen 6
R java findet nicht den neuesten JRE Java Basics - Anfänger-Themen 14
V Eclipse findet (meines Wissens) korrekte Klasse nicht Java Basics - Anfänger-Themen 3
G Public class??? Findet meine Klasse nicht. Java Basics - Anfänger-Themen 5
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
S setText aus anderer class heraus Java Basics - Anfänger-Themen 6
K Compiler-Fehler Objektmethode aus einer statischen Methode heraus aufrufen Java Basics - Anfänger-Themen 34
J Classpath Programm aus Programm heraus starten Java Basics - Anfänger-Themen 1
U jar aus RAM heraus starten Java Basics - Anfänger-Themen 21
G Java Applet aus Eclipse heraus testen? Java Basics - Anfänger-Themen 6
Y Datei mit relativem Dateipfad per FileReader aus .JAR heraus auslesen Java Basics - Anfänger-Themen 4
J JavaFX aus Java-Application heraus starten Java Basics - Anfänger-Themen 7
I Jar aus Java heraus starten. Java Basics - Anfänger-Themen 12
Y .jar aus applikation heraus starten? Java Basics - Anfänger-Themen 3
E Word aus Java heraus öffnen und in den Vordergrund holen Java Basics - Anfänger-Themen 2
I auf Textfeld aus anderer Klasse heraus zugreifen Java Basics - Anfänger-Themen 2
S Main-Methode aus anderer Klasse heraus starten Java Basics - Anfänger-Themen 8
B Warum aus child heraus nicht änderbar? Java Basics - Anfänger-Themen 4
E Variable aus einer Methode heraus in eine andere Klasse übergeben Java Basics - Anfänger-Themen 13
J this aus eingebetteter implementation heraus Java Basics - Anfänger-Themen 2
W iText - Layer aus PDF heraus löschen Java Basics - Anfänger-Themen 1
A JRadioButton aus Code heraus selectieren. Java Basics - Anfänger-Themen 4
A [gelöst]Aus der Klasse heraus auf ein anderes Objekt zugreifen Java Basics - Anfänger-Themen 4
J Java Applikation aus Applet heraus starten Java Basics - Anfänger-Themen 4
L Zeilenwechselsequenz erkennen aus der Datei heraus Java Basics - Anfänger-Themen 2
G Umgebungsvariable aus Java Programm heraus setzen Java Basics - Anfänger-Themen 4
G Webseite aus Java heraus laden Java Basics - Anfänger-Themen 3
S Rückgabe eines eingelesenen 2D Arrays aus Klasse heraus Java Basics - Anfänger-Themen 3
G jProgressBar value aus anderer Klasse heraus verändern Java Basics - Anfänger-Themen 7
P Fenster schliessen auf Menue heraus Java Basics - Anfänger-Themen 2
R Dateien aus Java heraus öffnen Java Basics - Anfänger-Themen 9
F Problem mit auführen einer .bat Datei aus Java heraus Java Basics - Anfänger-Themen 24
D exe AUS Java heraus starten Java Basics - Anfänger-Themen 4
G Aufruf einer .bat-Datei aus Java heraus Java Basics - Anfänger-Themen 6
G Andere Anwendung aus Java heraus steuern Java Basics - Anfänger-Themen 3
M aus Applet heraus 2. Fenster öffnen und Parameter übergeben? Java Basics - Anfänger-Themen 18
H Objecte aus einer Liste heraus benutzen ? Java Basics - Anfänger-Themen 3
M Klassen zur Laufzeit laden, aus einer jar heraus. Java Basics - Anfänger-Themen 14
V Erste Ziffer aus einer dreistelligen "Zahl" heraus Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben