AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alle Kombinationen ausgeben

Ein Thema von Kegasetu · begonnen am 10. Nov 2020 · letzter Beitrag vom 25. Nov 2020
 
Kegasetu

Registriert seit: 26. Sep 2013
85 Beiträge
 
#4

AW: Alle Kombinationen ausgeben

  Alt 10. Nov 2020, 10:53
Hallo K

in https://www.delphipraxis.net/1476191-post36.html

habe ich dir gezeigt wie du ohne tief greifende Kombinatorik alle möglichen Kombinationen durchlaufen kannst und dabei gleich noch eine beste (oder wenn du willst auch alle) Lösung finden kannst.

Du kannst das rekursiv tun. Nimm an, du hast n Positionen und k Dinge die du reinhängen willst.
Du gehst alle möglichen (Brett-)Positionen von links nach rechts durch. Bei jeder Position gibt es genau zwei Möglichkeiten: Du machst entweder nix oder du hängst was rein. Du gehst eine Position weiter - und wieder das gleiche Spiel: nix tun oder was tun. und so weiter...

Wann brichst du ab? Es gibt zwei Abbruchkriterien:
Fall 1: Sobald du k Mal was getan hast bist du fertig und bewertest diese Kombination.
Fall 2: Du brichst ab sobald du weisst, dass du noch i Mal was tun müsstest, aber nur noch p<i Positionen frei sind.

Natürlich gibt es schönere Wege alle Kombinationen aufzuzählen. Aber dieser Weg ist für dich sicher nachvollziehbar.

Probier's mal aus...

Gruss
M
Danke für den Code, aber ich komme nicht so ganz damit klar...

Ich würde jetzt gerne die Stelle aufzeigen, aber es sind so viele.

Was beduetet z.B. record? Oder wie genau funktionert das:

Delphi-Quellcode:
 TRes = record
      br : TBrett;
      bew : TBewertungstyp;
     end;
Ich habe schon den Anspruch zu verstehen was ich da mache aber so ganz tief bin ich nicht in der Materie. Ich versuche es so einfach wie möglich zu machen, damit ich immer erklären kann was da passiert. Und die Hoffung des es irgendwie mit einem simplen Array funktionert ist nach wie vor da

Hier mal meine Überlegung, die so noch nicht funktionert:

Delphi-Quellcode:
var i, q, durch : integer;
variation [0..200]: Array of Integer; //Array definieren, maximaler Bereich von 200

begin

for i:= 0 to strtoint(edit1.Text) do // Anzahl der Halterungen
 variation [i] := i; //Hier das Array füllen


for q:= strtoint(edit1.Text) to strtoint(edit2.Text) do //Hier wird die Bereichgröße (edit2) eingegeben (später ist das in der Rechnung integriert und richtet sich nach der Länge des Balkens)
 begin
   variation [strtoint(edit1.Text)] := variation [strtoint(edit1.Text)+q] //der Letzte Wert wird hochgezählt und dann ausporbiert.Hier bin ich momentan und komme nicht weiter. Die Vorgehensweise ist auch falsch.
 end;
end;
Um es Verbal zu beschreiben , in der zweiten for Schleife sollen dann alle Kombinationen erstellt und im Anschluss ausprobiert werden.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz