Guten Morgen,
ich suche eine Funktion bzw. bin an einer dran die mir leicht Kopfschmerzen bereitet.. erstmal zur Erklärung:
In Angular habe ich folgendes Array und einen Startpunkt:
Nun brauche ich folgende Funktion. jedes Objekt hat verschiedene Kombinationsmöglichkeiten. Ziel ist es, die beste Kombination zu finden.Wir starten bei 1. Needed zeigt an, was benötigt wird.
Die erste mögliche Kombination wäre also:
{
firstId: 1,
secondId: 123,
val1: 1,
val2: 3
},
Dadurch wurde die firstId und secondId nun mit 1 - 3 belegt. Man könnte aber auch die anderen Kombinationen mit diesem Wert belegen.
Das nächste Objekt mit TaskId: 2 hat nur eine Kombinationsmöglichkeit und zwar mit den Ids 1 und 123.
Dadurch, dass aber die 1 und auch die 123 bereits mit 1-3 belegt wurden, müssen wir hier allerdings mit 4 anfangen. Plus die 5 die benötigt werden, blockieren nun die IDs 1 und 123 zusätzlich den Zahlenraum 4-9.Besser wäre es allerdings gewesen, hätte das erste Objekt die Ids ausgewählt, die das zweite Objekt eh nicht besitzt. In dem Fall 2 und 456. Dann würde diese nämlich die Zahlen 1-3 für die IDs 2 und 456 blockieren. Das zweite Objekt hätte dann zwei freie Ids 1 und 123 und könnte dann auch bei 1 anfangen und hätte dann die Zahlen 1-6.Das hier sind nur Beispielzahlen und ein Array kann ca. 20-80 solcher Tasks besitzen mit ca. 10-20 Kombinationen.
Nun benötige ich eine Funktion, um halt das Optimum zu finden.Zum Thema limit noch was. Das Limit gibt an, das versucht werden sollte, dass ein bestimmter Wert nicht überschritten werden sollte, sofern es sich vermeiden lässt. Hätte das zweite Objekt die Zahlen 4-9 bekommen, wäre das z.b. über dem Limit von 8.
Im ersten Schritt hatte ich vor, jede Kombination in einem Set als json zu speichern um dann mit has zu überprüfen, ob dieser Wert bereits vorhanden ist oder nicht.
Das ganze innerhalb einer While Schleife wo die Abbruchbedingung wäre, wenn ich in einem Durchgang bei keiner Kombination mehr neue Werte hinzufügen kann.
Über weitere Ideen wäre ich sehr dankbar.
ich suche eine Funktion bzw. bin an einer dran die mir leicht Kopfschmerzen bereitet.. erstmal zur Erklärung:
In Angular habe ich folgendes Array und einen Startpunkt:
Javascript:
let start = 1;
const example = [
{
taskId: 1,
limit: 5,
needed: 3,
combinations: [
{
firstId: 1,
secondId: 123,
val1: null,
val2: null
},
{
firstId: 2,
secondId: 123,
val1: null,
val2: null
},
{
firstId: 2,
secondId: 456,
val1: null,
val2: null
}
]
},
{
taskId: 2,
limit:8,
needed: 5,
combinations: [
{
firstId: 1,
secondId: 123,
val1: null,
val2: null
},
]
}
]
Nun brauche ich folgende Funktion. jedes Objekt hat verschiedene Kombinationsmöglichkeiten. Ziel ist es, die beste Kombination zu finden.Wir starten bei 1. Needed zeigt an, was benötigt wird.
Die erste mögliche Kombination wäre also:
{
firstId: 1,
secondId: 123,
val1: 1,
val2: 3
},
Dadurch wurde die firstId und secondId nun mit 1 - 3 belegt. Man könnte aber auch die anderen Kombinationen mit diesem Wert belegen.
Das nächste Objekt mit TaskId: 2 hat nur eine Kombinationsmöglichkeit und zwar mit den Ids 1 und 123.
Dadurch, dass aber die 1 und auch die 123 bereits mit 1-3 belegt wurden, müssen wir hier allerdings mit 4 anfangen. Plus die 5 die benötigt werden, blockieren nun die IDs 1 und 123 zusätzlich den Zahlenraum 4-9.Besser wäre es allerdings gewesen, hätte das erste Objekt die Ids ausgewählt, die das zweite Objekt eh nicht besitzt. In dem Fall 2 und 456. Dann würde diese nämlich die Zahlen 1-3 für die IDs 2 und 456 blockieren. Das zweite Objekt hätte dann zwei freie Ids 1 und 123 und könnte dann auch bei 1 anfangen und hätte dann die Zahlen 1-6.Das hier sind nur Beispielzahlen und ein Array kann ca. 20-80 solcher Tasks besitzen mit ca. 10-20 Kombinationen.
Nun benötige ich eine Funktion, um halt das Optimum zu finden.Zum Thema limit noch was. Das Limit gibt an, das versucht werden sollte, dass ein bestimmter Wert nicht überschritten werden sollte, sofern es sich vermeiden lässt. Hätte das zweite Objekt die Zahlen 4-9 bekommen, wäre das z.b. über dem Limit von 8.
Im ersten Schritt hatte ich vor, jede Kombination in einem Set als json zu speichern um dann mit has zu überprüfen, ob dieser Wert bereits vorhanden ist oder nicht.
Das ganze innerhalb einer While Schleife wo die Abbruchbedingung wäre, wenn ich in einem Durchgang bei keiner Kombination mehr neue Werte hinzufügen kann.
Über weitere Ideen wäre ich sehr dankbar.