Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

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

Optimierungsproblem (Tabellen mit Baumstruktur)

  Alt 13. Apr 2016, 19:51
Hallo zusammen,

ich habe eine Menge von Objekten, welche alle die Eigenschaft A besitzen. Zudem kann jedes Objekt optional noch die Eigenschaften B, C, D und E definieren. Alle diese Eigenschaften geben den Index in einer dazugehörigen Filter-Tabelle an.

Die Filter-Tabellen haben unterschiedliche Kapazitäten:
Code:
A = 256
B =   3
C =   5
D =   5
E =   4
Aus diesen Filter Tabellen baue ich mir nun einen Baum. Kleines Beispiel:
Code:
OBJ1 = {A =  4, B = /, C = 5, D = 3, E = /}
OBJ2 = {A = 54, B = 2  C = 3, D = /, E = /}
OBJ3 = {A = 54, B = 1, C = 1, D = /, E = /}

FilterA
   | - 001
   | - 002
   | - 003
   | - 0004 = FilterC
   |             | - 1
   |             | - 2
   |             | - 3
   |             | - 4
   |             | - 5 = FilterD
   |                        | - 1
   |                        | - 2
   |                        | - 4 = OBJ1
   |                        | - 3
   |                        | ...
   | - 005
   | ...
   | - 053
   | - 054 = FilterB
   |            | - 1 = FilterC
   |            |          | - 1 = OBJ3
   |            |          | ...
   |            |          | - 5
   |            | - 2 = FilterC
   |            |          | - 1
   |            |          | - 2
   |            |          | - 3 = OBJ2
   |            |          | - 4
   |            |          | - 5
   |            | - 3
   | - 055
   | ...
Und hier sieht man bereits das Problem. Bisher ist die Reihenfolge der Filter Tabellen statisch von A nach E festgelegt. Im Falle von OBJ2 und OBJ3 benötige ich deshalb 1x FilterB (Kapazität 3) und 2x FilterC (Kapazität 5), womit ich auf eine Gesamtkapazität von 13 komme. Hätte ich die Tabellen aber anders angeordnet; sprich zuerst C und dann B, würde ich für diesen Ast 1x FilterC (Kapazität 5) und 2x FilterB (Kapazität 3) benötigen, was eine Gesamtkapazität von 11 zur Folge hätte.

Wie würdet ihr an dieses Problem rangehen, um für jeden Einzel-Ast (und somit letztlich auch für den kompletten Baum) die jeweils optimale Konfiguration zu ermitteln?
Gibt es eventuell schon effiziente Alogrithmen, die ich für meine Zwecke umbauen könnte (generell wird es wohl auf Bruteforce/Backtracking hinauslaufen, nehme ich an)?

Viele Grüße
Zacherl
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat