AGB  ·  Datenschutz  ·  Impressum  







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

Erkennen von Zahlenpaaren

Ein Thema von lowmax_5 · begonnen am 8. Okt 2015 · letzter Beitrag vom 9. Okt 2015
Antwort Antwort
Seite 1 von 3  1 23      
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
258 Beiträge
 
Delphi 11 Alexandria
 
#1

Erkennen von Zahlenpaaren

  Alt 8. Okt 2015, 15:43
Folgende Problematik stellt sich:

Eingabe:

  1. Geben sind zwei Mengen von Zahlenpaaren
  2. Die Summe der Menge 1 ist gleich der Summe von Menge2
  3. Es sollen nun Kombinationen zusammengestellt werden
  4. Menge1: (2,6,7,1,6,15,7,4,1) ==> Summe 49
  5. Menge2 (16,13,9,11) ==> Summe 49

Ausgabe:
  1. Welche Zahlen ergeben welche Summen? z.b. (16==>15+1) + (13==>7+6) + (9=>2+6+1) + (11=>7+4)
  2. Ist Ergebis eindeutig oder gibt es mehrere Kombinationsmöglichkeiten?
  3. Gesucht ist die Lösung mit den besten Kombinationen (Möglichst kurz)

Wie kann ein Lösungansatz aussehen? Bin für jeden Tipp dankbar!
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Erkennen von Zahlenpaaren

  Alt 8. Okt 2015, 15:56
Falls es da nicht irgendeine ausgefeilte mathematische Herangehensweise gibt, die mir unbekannt ist, würde ich auf Bruteforce (Erzeugen sämtlicher Permutationen) zurückgreifen. Soll es möglichst performant sein, kannst du auch Backtracking verwenden.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
258 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Erkennen von Zahlenpaaren

  Alt 8. Okt 2015, 16:20
Zitat:
...Soll es möglichst performant sein...
... Alles was unter einer Sekunde ist, ist akzeptabel!
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#4

AW: Erkennen von Zahlenpaaren

  Alt 8. Okt 2015, 16:29
Zitat:
...Soll es möglichst performant sein...
... Alles was unter einer Sekunde ist, ist akzeptabel!
Für welche Eingabegröße? 10 Zahlen, 100, 1000, 1000000?

Wenn ich mich nicht ganz täusche, ist das Problem NP-vollständig, d.h. eine "einfache, schnelle" Lösung gibts nicht. Brute-Force ist die wahrscheinlich einfachste Variante, die für kleine Mengen auch kein Problem darstellen sollte.
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
258 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Erkennen von Zahlenpaaren

  Alt 8. Okt 2015, 16:42
Zitat:
Für welche Eingabegröße? 10 Zahlen, 100, 1000, 1000000?
Bis 1000 reicht in diesem Fall aus.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: Erkennen von Zahlenpaaren

  Alt 8. Okt 2015, 23:38
Mhm, auf den ersten Blick sah es nach Partition aus, allerdings scheinst du ja eine passende Partition zu haben.
EDIT: JasonDX hat recht; das Partitionsproblem sollte sich darauf reduzieren lassen. Eingabe von Partition wird M1, M2 hat zwei Elemente: jeweils die Hälfte der Summe aller Elemente in M1.

Ich verstehe das Problem so: finde für jedes Element aus Menge2 eine Summe aus Elementen aus Menge1, sodass kein Element aus Menge1 doppelt verwendet wird (?)

Klar ist, dass dann immer alle Elemente von Menge1 benutzt werden müssen, da die Summe der Elemente gleich ist. Was heißt also ein "kurzes Ergebnis"?

Es gibt nicht immer ein Ergebnis. Beispiel:
M1 = 2, 4, 6
M2 = 3, 9

Es kann unterschiedliche Ergebnisse geben (welches ist hier besser/kürzer?):
M1 = 1, 2, 2, 3
M2 = 5, 3
5 = 1 + 2 + 2 und 3 = 3
5 = 2 + 3 und 3 = 2 + 1

Geändert von BUG ( 9. Okt 2015 um 00:42 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#7

AW: Erkennen von Zahlenpaaren

  Alt 9. Okt 2015, 07:41
Korrigiert mich bitte, aber wenn es hier um Teilmengen (nicht Partitionen) geht, dann ist das doch popelig.

Also: Gegeben zwei Mengen A und B. Gesucht ist die Menge aller Teilmengen T, sodass für jedes t aus T gilt: Es existiert ein Element b aus B mit b=Summe der Elemente aus t.

Beispiel: A = (1,2,3,4). B=(5,7,10)
Teilmengen =
(1),(2),(3),(4),
(1,2),(1,3),(1,4),
(2,3),(2,4),(3,4),
(1,2,3),(1,2,4),(2,3,4),
(1,2,3,4)
Die Teilmengen 't', deren Summe entweder 5,7 oder 10 ist, sind fett markiert.

Ich muss also nur alle Teilmengen aus A bilden, summieren und schauen, ob der Wert in B vorkommt. Ganz einfach. Dauert nur. Denn es gibt 2^n Teilmengen einer n-elementigen Menge.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#8

AW: Erkennen von Zahlenpaaren

  Alt 9. Okt 2015, 08:24
Ganz einfach. Dauert nur. Denn es gibt 2^n Teilmengen einer n-elementigen Menge.
Und dir ist klar das 2^1000 eine nicht unbedingt kleine Zahl ist? Also ich könnte verstehen, das man sein Ergebnis haben möchte bevor das Universum den Wärmetod stirb ... vielleicht hat man ja Glück und hat nur einfache Instanzen, für die es im Regelfall schneller geht.

Ich wäre schon neugierig, was das für ein echtes Problem ist, das lowmax da lösen möchte

Geändert von BUG ( 9. Okt 2015 um 09:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#9

AW: Erkennen von Zahlenpaaren

  Alt 9. Okt 2015, 14:07
Korrigiert mich bitte, aber wenn es hier um Teilmengen (nicht Partitionen) geht, dann ist das doch popelig.

Also: Gegeben zwei Mengen A und B. Gesucht ist die Menge aller Teilmengen T, sodass für jedes t aus T gilt: Es existiert ein Element b aus B mit b=Summe der Elemente aus t.

Beispiel: A = (1,2,3,4). B=(5,7,10)
Teilmengen =
(1),(2),(3),(4),
(1,2),(1,3),(1,4),
(2,3),(2,4),(3,4),
(1,2,3),(1,2,4),(2,3,4),
(1,2,3,4)
Die Teilmengen 't', deren Summe entweder 5,7 oder 10 ist, sind fett markiert.

Ich muss also nur alle Teilmengen aus A bilden, summieren und schauen, ob der Wert in B vorkommt. Ganz einfach. Dauert nur. Denn es gibt 2^n Teilmengen einer n-elementigen Menge.
Wenn Sort(A) dann kann man ggf. mit Min(B), Max(B) das ganze noch einschränken und optimieren, besser für kleine Max(B)-Min(B).
  Mit Zitat antworten Zitat
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
258 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Erkennen von Zahlenpaaren

  Alt 9. Okt 2015, 14:30
Zitat:
Ich verstehe das Problem so: finde für jedes Element aus Menge2 eine Summe aus Elementen aus Menge1, sodass kein Element aus Menge1 doppelt verwendet wird (?)
Ja, das ist korrekt. In Menge B sollen der Einfachheit halber auch alle Elemente verwendet werden. Nach dem Studium Eurerer Beiträge scheint sich eine Lösung für mich wie folgt darzustellen:

1. Bilde Summen Menge1 und und Menge2 ==> Wenn gleich, mache weiter
2. Nun alle Permutationen aus Menge1 erzeugen und Summen bilden
3. Ist die Summe der Permutation in Menge2 enthalten => Wenn Ja=gültig, wenn Nein dann löschen
4. Nun alle Kombinationen bilden, die auf die Gesamtsumme kommen. ==> Diese Kombinationen markieren
5. Sortieren nach den einfachsten Kombinationen ( Am wenigsten summierende Elemente)
Fertig!

Kann das funktionieren? Was meint Ihr dazu?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 01:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz