Problem mit Algorithmierung eines Zahlenproblems

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
tommy_45
User
Beiträge: 13
Registriert: Freitag 23. November 2018, 09:39

Hallo,

ich habe folgendes Problem ich habe 24 Zahlen von 1 bis 1000 und soll 10 Zahlen bestimmen, die diesen 24 Zahlen insgesamt am nächsten liegen. Ich weiß, ein bissel unverständlich, aber hier mal ein Beispiel mit nur 3 Zahlen und 2 bestimmten Zahlen:

Gegeben sind die Zahlen 3, 5, 700 --> ermittelte Zahlen: 4, 700 --> So ist die Differenz der drei Zahlen zu den ermittelten Zahlen möglichst gering, nämlich: 0 + 1 + 1 = 2

Die zwei Zahlen 4, 700 habe ich ermittelt, indem ich die zwei Zahlen gesucht habe, die sich einander am nächsten sind, also 3 und 5. Davon habe ich den Durchschnitt gebildet und als zweite Zahl die 700 gewählt.

Wie könnte ich dieses "Verfahren" auf oben geschildertes Problem übertragen und so einen Algorithmus entwickeln?
Hat jemand eine Idee?

Vielen Dank im Voraus

LG tommy_45
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

Versuche zuerst das "Verfahren" so umzuformulieren, dass es zuerst auf mehr als 3 gegebene Zahlen und im zweiten Schritt auch auf mehr als zwei gesuchte Zahlen erweiterbar ist.
tommy_45
User
Beiträge: 13
Registriert: Freitag 23. November 2018, 09:39

Mehr als 3 gegebene Zahlen:
Die Liste der gegebenen Zahlen der Größe nach sortieren?
Aber wie ermittle ich dann erstmal die zwei Zahlen? Ich muss ja dann prüfen, welche Zahl am weitesten von allen anderen entfernt ist..
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

@tommy_45: und hier kommt das Programmieren ins Spiel. Du mußt gar nicht zwei Zahlen ermitteln, sondern nur für eine gegebene Gruppeneinteilung die idealen Zahlen berechnen und den Abstand ermitteln. Wenn Du dann alle möglichen Gruppen durchprobierst, kannst Du diejenige finden, die den kleinsten Abstand hat.
tommy_45
User
Beiträge: 13
Registriert: Freitag 23. November 2018, 09:39

Sry, das verstehe ich jetzt nicht. ;-( Was meinst du mit Gruppeneinteilung? Und wie dann die idealen Zahlen ermitteln?
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

Du willst doch immer eine bestimmte Anzahl an Zahlen zu einer Gruppe zusammen nehmen, um für diese eine Ergebniszahl zu berechnen. Bei zwei Ausgabezahlen sind das dann zwei Gruppen, die ersten n Zahlen in die eine, der Rest in die andere. Und wenn Du nicht weißt, wie viele Zahlen in einer Gruppe am besten sind, dann probierst Du eben alle durch.
tommy_45
User
Beiträge: 13
Registriert: Freitag 23. November 2018, 09:39

Ah, jetzt verstehe ich. Bloß wie kann ich dafür ein Programm entwickeln? Hättest du einen bestimmten Lösungsansatz?
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

Hätte ich, aber wie sehen Deine Überlegungen dazu aus?
tommy_45
User
Beiträge: 13
Registriert: Freitag 23. November 2018, 09:39

Naja, ich denke, man hat am Anfang eine Liste mit den gegebenen Zahlen und dann erstellt man mit einer for- oder while-Schleife alle möglichen Gruppenkombinationen und speichert diese (jeweils 2) Kombis in Listen und diese zwei Listen in einem Dictionary ab. Anschließend berechne ich die Differenzen, addiere sie und speichere sie im jeweiligen Dictionary:

Code: Alles auswählen

moeglichkeit_1 = {'group_1': [3, 5], 'group_2': [700], 'sum': 2}
und so weiter...
Dann lese ich mit einer for-Schleife aus, wo 'sum' am kleinsten ist und küre dieses Dictionary zum "Sieger" :-)

Bloß wie sieht die for-Schleife aus?
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

@tommy_45: bei nur zwei gesuchten Zahlen ist die for-Schleife doch einfach, n von 1 bis N-1.
tommy_45
User
Beiträge: 13
Registriert: Freitag 23. November 2018, 09:39

Code: Alles auswählen

len = len(numbers)
for n in range(1, len-1):
	pass
so hier?
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

das wär' schon mal ein Anfang. Du solltest aber die Funktion `len` nicht mit der Variable `len` überschreiben.
tommy_45
User
Beiträge: 13
Registriert: Freitag 23. November 2018, 09:39

Sirius3 hat geschrieben: Samstag 24. November 2018, 11:40 das wär' schon mal ein Anfang. Du solltest aber die Funktion `len` nicht mit der Variable `len` überschreiben.
Ja, das ist mir nach dem Posten auch aufgefallen..

Wie komme ich dann weiter? - hab keine Idee :(
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo kommst Du denn nicht weiter. Du hast den nächsten Schritt doch schon selbst geschrieben: »man hat am Anfang eine Liste mit den gegebenen Zahlen und dann erstellt man mit einer for- oder while-Schleife alle möglichen Gruppenkombinationen«.
tommy_45
User
Beiträge: 13
Registriert: Freitag 23. November 2018, 09:39

Naja, ich hab keine Ahnung, wie man jetzt alle möglichen Gruppenkombinationen erstellt. Natürlich auch mit for-Schleifen - aber wie?
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

nein, mit Indexzugriff.
tommy_45
User
Beiträge: 13
Registriert: Freitag 23. November 2018, 09:39

..., den ich in eine for-Schleife packen muss, oder?
Sirius3
User
Beiträge: 18268
Registriert: Sonntag 21. Oktober 2012, 17:20

Probier's doch einfach aus.
Antworten