Gegeben ist eine positive ganze Zahl ganze Zahl und ganze Zahlen mit für jedes . Wie ist es zu entscheiden, ob es ganze Zahlen so dass für alle und für alle ?
Was beobachtet werden kann, ist, dass ein gieriger Algorithmus, bei dem wir annehmen, dass und gemäß dieser Reihenfolge wählen , nicht unbedingt funktioniert. Zum Beispiel können wir . Das Setzen von funktioniert nicht (es lässt keinen Platz für ), aber was funktioniert, ist das Setzen von und . Ist das Problem vielleicht NP-schwer?
algorithms
np-hard
pi66
quelle
quelle
Antworten:
Wie in der vorherigen Antwort gezeigt, kann dieses Problem als Planungsproblem mit Release- und Fälligkeitsterminen modelliert werden. Schrages Heuristik funktioniert jedoch nur für den Fall (alle Verarbeitungszeiten sind ) oder wenn Release- und Fälligkeitstermine übereinstimmen (dh es gibt eine Reihenfolge, in der und ).pj=1 1 r1≤⋯≤rn d1≤⋯≤dn
Für den Fall Polynomalgorithmen von Simons (1978) , Carlier (1981) und Garey et al. (1981) , laufend in der Zeit , bzw. .pj=p O(n2logn) O(n2logn) O(nlogn)
Der Algorithmus von Garey et al. Plant Zeiteinheitenaufgaben, ermöglicht jedoch eine willkürliche Freigabe und Fälligkeitstermine. Das obige Problem kann auf diese Einstellung reduziert werden, indem alle Daten und Verarbeitungszeiten durch . Die Hauptidee des Algorithmus besteht darin, eine Reihe verbotener Regionen zu finden, in denen keine Aufgabe gestartet werden darf. Sie zeigen, dass Schrages Heuristik unter Berücksichtigung verbotener Regionen einen realisierbaren Zeitplan mit minimaler Makespan findet. Bei der Konstruktion der verbotenen Regionen kann ihr Algorithmus auch Unmöglichkeit erkennen.p
Um zu sehen, wie der Algorithmus funktioniert, schauen Sie sich zunächst ein einfacheres Problem an: Planen Sie Zeiteinheitenaufgaben zwischen einem Veröffentlichungsdatum und einer Frist verbotenen Regionen , wobei jede Region ist ein offenes Intervall. (Beachten Sie, dass wir uns hier nicht mit der Veröffentlichung und den Fälligkeitsterminen einzelner Aufgaben befassen.)n r d F=⋃i(ai,bi) (ai,bi)
Dieses Problem kann durch Backscheduling gelöst werden : Definieren Sie eine Sentinel-Startzeit , und setzen Sie für die Startzeit auf die späteste Zeit spätestens das ist nicht verboten.sn+1=d i=n,n−1,…,1 si si+1−1
Schreiben Sie für eine Anwendung von Backscheduling für die obigen Eingaben und definieren Sie den Rückgabewert als , das spätestmögliche Startdatum für die Planung der Aufgaben. Wenn nun gibt es keinen realisierbaren Zeitplan für die Aufgaben. WennB(r,d,n,F) s1 n B(r,d,n,F)<r n r≤B(r,d,n,F)<r+1 Keine andere Aufgabe kann beginnen (B(r,d,n,F)−1,r) da sonst gibt es wieder keinen realisierbaren zeitplan für die n Aufgaben und damit (B(r,d,n,F)−1,r) kann als verbotene Region deklariert werden.
Es stellt sich heraus, dass diese Logik ausreicht, um alle verbotenen Regionen zu finden, die für Schrages heuristische Arbeit erforderlich sind. Angenommen, die Aufgaben sind so angeordnet, dassr1≤r2≤⋯≤rn und schreibe n(r,d) für die Anzahl der Aufgaben, die im geschlossenen Intervall freigegeben und fällig sind [r,d] .
Eine einfache Implementierung wie oben würde Zeit . Garey et al. zeigen (neben Korrektheit), die die Zeiten von Backscheduling erhalten durch Aktualisierung, Füge- verbotene Bereiche überlappen, und macht „verboten“ Abfragen Zeit gebracht werden kann , und durch die Verwendung noch bessere Datenstrukturen zu .O(n4) O(1) O(n2) O(nlogn)
quelle
Ihr Problem ist als nicht präventive Einzelmaschinenplanung mit Veröffentlichungszeiten und -fristen mit Aufgaben gleicher Länge bekannt und kann mithilfe der gierigen Heuristik von Schrage effizient gelöst werden.
Lassen Sie uns das Problem zunächst formeller beschreiben. Wir erhalten eine Folge von Zeitintervallen und eine Folge von Auftragslängen . Wir möchten jeden Job innerhalb seines Intervalls planen, damit sich keine zwei Jobs überschneiden.[ri,di] pi
In unserem Fall ist , und . Die Startzeit jedes Jobs erfüllt somit , und zwei Jobs stehen in Konflikt, wenn sich überschneidet , was der gleiche ist wie . (Ohne Verlust der Allgemeinheit werden alle Jobs zu ganzzahligen Zeiten geplant.)ri=ai di=bi+2 pi=2 ci ai≤ci≤bi (ci,ci+2) (cj,cj+2) |ci−cj|<2
Schrages Heuristik ist eine übliche Heuristik, die in einigen Fällen optimal ist, jedoch nicht unbedingt diese. In der Literatur gibt es jedoch andere Algorithmen, die dieses Problem effizient lösen.
quelle
Sei A der kleinste derai . Dann gibt es zwei Möglichkeiten für die ersteci Um das auszuwählen, kann es offensichtlich nicht verbessert werden: Erstens, finde das i so, dass ai=A und bi ist so klein wie möglich, dann lassen ci=ai . Zwei, wähle j so, dassaj=A+1 , bj<bi , und bj so klein wie möglich, dann lassen cj=bj (Dies ist möglicherweise nicht möglich). Entfernen Sie dann dieses Element aus der Liste der Intervalle und aktualisieren Sie alleai um zwei größer sein als die ci das wurde ausgewählt, und überprüfen Sie, dass nein bi es ist zu klein. Tiefensuche und Rückverfolgung finden eine Lösung.
Es besteht eine gute Chance, dass dies schnell geht, da die erste Wahl als Heuristik nicht schlecht ist.
Wenn es genau k Intervalle mit gibtai<A für einige A, und wir finden k Werte ci<=A−2 dann diese ci sind optimal und das Zurückverfolgen für diese k Elemente kann nicht helfen und wird niemals benötigt. Auf der anderen Seite, wenn es zu viele Werte gibtbi zu nahe beieinander, um zu beweisen, dass es keine Lösung gibt.
Schließlich kann das Problem von klein auf angegangen werdenai oder gleich gut vom größten bi .
quelle