| Autor |
Beitrag |
mtc
      
Beiträge: 16
Win XP, Suse 8.1 Prof
D7 Prof
|
Verfasst: Do 08.05.03 00:33
 Man hat 5 Zahlenwerte (1,3,6,2,4) und einen Grenzwert von 9 und zwar soll dieser Grenzwert aus der Summe der 5 Zahlenwerte gebildet werden und der Rechner soll mir alle Möglichkeiten angeben, wie man mit den 5 Zahlen durch Summieren auf diesen Wert kommst oder ihm so nah wie möglich kommst
D.H. es kann auch sein, dass man schon mit 3 Werten auf den Grenzwert kommt.
z.B. 3+6=9 oder 3+4+2=9 ---->>> diese Möglichkeiten sollte der Computer mir ausgeben
Das ganze hat auch einen praktischen Hintergrund:
Wenn ich meine Filme auf DVD brennen will, hab ich exakt nur 4480 MB übrig! Meine Filme haben definierte Werte von zum Bsp: 1250MB usw.
Der Rechner soll mir nun Vorschläge geben, welche Filme ich zusammen auf eine DVD mache, damit diese bestmöglichst ausgefüllt ist und ich nicht 400 MB oder so verschenke.
Wäre super wenn ein paar schlaue Hirne mir Tips für einen Algorithmus geben könnten.
MfG
 MTC
Moderiert von Tino: "***" und "Wichtig" aus dem Titel entfernt.
|
|
Alni
      
Beiträge: 205
Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
|
Verfasst: Do 08.05.03 00:53
Am besten alle Kombinationen austesten, ist zwar ineffizient aber ich denke du hast nicht so viele Filme das dies stören würde
_________________ MfG Alex
|
|
inselberg
      
Beiträge: 458
|
Verfasst: Do 08.05.03 01:11
wieviel filme hast du denn ?
_________________ hans bist du das ?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 08.05.03 01:29
dann mach doch folgendes: 1. größter Film, dann der nächste, bis die CD voll ist. Wo liegt das Problem 
_________________ Gruß
Hansa
|
|
inselberg
      
Beiträge: 458
|
Verfasst: Do 08.05.03 02:02
also ich hab gerade mal was gebastelt ...
nur wenn man alle möglichkeiten .. permutationen nimmt sind es ja n! möglichkeiten ... und das sind einige
den permutationscode hab ich bei google gestohlen... und der restliche code ist grausam, um 3h morgens hab ich nur wild rumgetippt ...
Zuletzt bearbeitet von inselberg am Do 08.05.03 02:17, insgesamt 2-mal bearbeitet
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 08.05.03 02:07
eben, das letzte Byte auszuquetschen ist Blödsinn.
_________________ Gruß
Hansa
|
|
mtc 
      
Beiträge: 16
Win XP, Suse 8.1 Prof
D7 Prof
|
Verfasst: Do 08.05.03 07:40
Titel: Menge Filme
| Alni hat folgendes geschrieben: | | Am besten alle Kombinationen austesten, ist zwar ineffizient aber ich denke du hast nicht so viele Filme das dies stören würde |
Ich weiss ja nicht, ob man 1500 Filme als nicht so viele bezeichnen würde.
Ich denke mal schon das das ne Menge ist und da alle Kombinationen auszutesten dürfte ganz schön lange dauern
|
|
mtc 
      
Beiträge: 16
Win XP, Suse 8.1 Prof
D7 Prof
|
Verfasst: Do 08.05.03 07:43
Titel: Message an Hansa
| hansa hat folgendes geschrieben: | dann mach doch folgendes: 1. größter Film, dann der nächste, bis die CD voll ist. Wo liegt das Problem  |
Würde ich nicht so machen, da eventuell eine Kombination aus kleineren Filmen oder aus dem größten und mehreren kleinen Filmen eine höhere Effizienz geben würde!!

|
|
mtc 
      
Beiträge: 16
Win XP, Suse 8.1 Prof
D7 Prof
|
Verfasst: Do 08.05.03 08:31
Titel: Ist ja auch nicht so gemeint
| hansa hat folgendes geschrieben: | | eben, das letzte Byte auszuquetschen ist Blödsinn. |
Damit hast du schon recht, nur wenn man nicht alle Kombinationen berechnet, gehen mir viele Möglichkeiten verloren wie ich andere DVD's hätte füllen können !!
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 08.05.03 11:00
Dann machs doch so:
1. größter Film
2. Kleinster Film
3. zweitkleinster Film
4. drittkleinster Filmm
usw., bis die DVD voll ist. Die kopierten Filme aus Liste löschen und nächste DVD, dasselbe Spielchen.
_________________ Gruß
Hansa
|
|
mtc 
      
Beiträge: 16
Win XP, Suse 8.1 Prof
D7 Prof
|
Verfasst: Do 08.05.03 11:10
Titel: Naja, auch nicht genau das richtige
| Zitat: | Dann machs doch so:
1. größter Film
2. Kleinster Film
3. zweitkleinster Film
4. drittkleinster Filmm
usw., bis die DVD voll ist. Die kopierten Filme aus Liste löschen und nächste DVD, dasselbe Spielchen. |
Das würde ja gehen, aber wie gesagt das ist nicht das Optimum, da man eine DVD vielleicht mit dem zweitgrößten und dem kleinsten und dem zweitkleinsten Film noch besser füllen könnte und dann wären diese Möglichkeiten ja schon weg ! Und man müßte dann neue Möglichkeiten suchen, um den größten Film ideal unterzubringen !!!
Trotzdem danke !!
Du könntest mir auch mal einen kurzen Quelltext posten mit dem ich deine Variante mal testen könnte, vielleicht reicht sie ja doch aus !
MfG
MTC
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Do 08.05.03 12:27
Ich würds mit einer Listbox machen. Glaube aber nicht, daß ich Dir das ganze Programm schreibe.  Zuerst muß Du deine Listbox mit den Filmen füllen. Evenuell reicht es aus, diese aus einer Textdatei rauszufischen und mit
Quelltext 1:
| ListBox1.Items.Add ('Filmtitel'); |
einzufügen. Dann fängst Du an, die Filme auszuwählen, irgendwo mußt Du noch die Größe der ausgewählten Filme addieren und eine Warnung bringen, falls der verfügbare Platz überschritten wirst. Die ausgewählten schaufelst du in eine zweite Listbox:
Quelltext 1:
| ListBox2.Items.Add (Listbox1.Idems.text); |
eventuell brauchst du sogar noch eine dritte Box, in die schreibst du den Index aus der ersten, oder bringen das auch in der zweriten unter. So und nun wanderst Du die Auswahlbox durch und brennst die Filme. Hat alles geklappt, gehst Du wieder in die erste Box und löschst die Einträge darin mit Hilfe der zweiten:
Quelltext 1:
| ListBox1.Items.delete ("gespeicherter Index aus 2. Box"); |
Das alles in eine Schleife, am Anfang sowiso die zweite Box immer leeren. Und am Schluß muß die erste Box, dann wieder abgespeichert werden, am besten sogar nach jeder DVD.
Quelltext 1: 2:
| for i := 0 to Listbox1.Items.Count do WriteFile (Textdatei,ListBox1.Items.text); |
So sieht ein Grundgerüst aus. Natürlich kann man da vieles anders machen, aber von der Logik her sollte es so gehen.
_________________ Gruß
Hansa
|
|
inselberg
      
Beiträge: 458
|
Verfasst: Do 08.05.03 12:57
da bin ich ja froh das ich das program geschrieben hab, und keine sau guckts sich an ... :rool:
achja 1500! is ne was grössere zahl 
_________________ hans bist du das ?
|
|
mtc 
      
Beiträge: 16
Win XP, Suse 8.1 Prof
D7 Prof
|
Verfasst: Do 08.05.03 15:05
Titel: Doch Doch
| inselberg hat folgendes geschrieben: | da bin ich ja froh das ich das program geschrieben hab, und keine sau guckts sich an ... :rool:
achja 1500! is ne was grössere zahl  |
Ich hab mir das Programm schon angeschaut und ausprobiert.
Die Idee ist einwandfrei und funzt auch wunderbar, nur gibt es halt ein kleines Problem:
bei 10 Filmen die zur Auswahl stehen gibt es 10! (3628800) Möglichkeiten diese zu kombinieren.
Und dementsprechend dauert es auch lange (bei mir ca. 1 Minute) mit 1300 Millionen Herzchen !!!
Man wüßte eigentlich bei deinem Programm doch nur die Kombinationen rauslöschen, die er schon hatte, also wenn er Film 1 mit 3 verglichen hat, dann braucht er ja nicht mehr 3 mit 1 zu vergleichen. Dürfte eigentlich ne Menge Zeit sparen.
Trotzdem danke und ich will mal mein Bestes probieren.
MfG
 Martin 
|
|
Alni
      
Beiträge: 205
Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
|
Verfasst: Do 08.05.03 15:52
Vielleicht solltest du nicht die optimale Lösung suchen, sondern eine Schranke festlegen, die wenn überschritten wird eine Lösung als gültig kennzeichnet und alle an der Lösung beteiligten Filme aus der Liste nimmt.
Bsp.: 10, 5, 8, 9, 3, 9, 2, 13, 16, Filmgrößen
Obergrenze: 20 Untergrenze; 18
Durch probieren kommt man auf die erste Lösung
10 + 5 +3 liegt im gültigen Bereich
10,5,3 entfernen
Mit der 2 wärs zwar beser gewesen hätte aber länger gedauert
Neue Suche mit 8, 9, 9, 2, 13, 16
Nächste Lösung 8+9+2
usw.
Wenn man vorher die Liste sortiert und mit den kleinsten anfängt könnte die suche vielleicht noch beschleunigt werden. Man könnte auch vorher alle Filme herausnehmen die kleiner als die Schranke sind und sie am Ende noch auf die Lösungen verteilen
_________________ MfG Alex
|
|
mtc 
      
Beiträge: 16
Win XP, Suse 8.1 Prof
D7 Prof
|
Verfasst: Do 08.05.03 16:10
Titel: Gute Idee
Also ich muss sagen, dass das eine sehr praktikable Angelegenheit ist.
Das würde mir auch vollkommen genügen. Der Einbau der unteren Grenze ist auch nicht schlecht, da diese das ganze Problem etwas vereinfacht.
Ich dank dir und bin auch schon am Basteln.
Wenn es funktioniert und auch hinreichend schnell ist, dann bin ich mehr als zufrieden.
MfG
Martin
|
|
Alni
      
Beiträge: 205
Win 2000, XP, SuSe, Debian
D5 Prof, D7 Prof, Kylix
|
Verfasst: Do 08.05.03 16:17
Ich hoffe dein Prog wird Freeware, weil sowas könnt ich übrigens auch gut brauchen 
_________________ MfG Alex
|
|