Zahlen mit minimalem Unterschied trennen


7

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 ?na1,b1,,an,bnaibiic1,,cnaicibii|cicj|2i,j

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?a1ancia1=1,b1=4,a2=b2=2c1=1c2c1=4c2=2


1
Haben Sie über dynamische Programmierung nachgedacht?
John L.

Ja. Das Problem ist, dass wir die Reihenfolge der nicht kennen , so dass wir beispielsweise die "beste" Lösung mit auf der linken Seite nicht speichern konnten . cic1,,ck
pi66

Könnten Sie einen Verweis auf das ursprüngliche Problem hinzufügen?
John L.

Ich habe keine Referenz. Es würde mich interessieren, wenn jemand einen kennt.
pi66

Antworten:


5

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=11r1rnd1dn

Für den Fall Polynomalgorithmen von Simons (1978) , Carlier (1981) und Garey et al. (1981) , laufend in der Zeit , bzw. .pj=pO(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.)nrdF=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=di=n,n1,,1sisi+11

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)s1nB(r,d,n,F)<rnrB(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, dassr1r2rn und schreibe n(r,d) für die Anzahl der Aufgaben, die im geschlossenen Intervall freigegeben und fällig sind [r,d].

  1. einstellen F=
  2. für Aufgaben i=n,n1,,1::
  3.   c=min{B(ri,dj,n(ri,dj),F)j:djdi}
  4.   wenn : "kein realisierbarer Zeitplan" zurückgebenc<ri
  5.   sonst wenn : setzeric<ri+1F=F{(c1,ri)}

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)


1
Sieht vielversprechend aus, aber der erste und der letzte Link führen zu Paywalls, und der zweite führt für mich zu einem fehlerhaften Zertifikat und der Seite "500 Internal Server Error". Könnten Sie einen der Algorithmen zusammenfassen oder einen öffentlich zugänglichen Link angeben? Vielen Dank!
j_random_hacker

Entschuldigung, diese Artikel scheinen schwer zu bekommen zu sein. Carlier's Artikel ist auf Research Gate, aber auf Französisch. Ich werde sehen, ob ich eine kurze Zusammenfassung geben kann.
Marcus Ritt

Das wäre toll, danke :)
j_random_hacker

0

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=aidi=bi+2pi=2ciaicibi(ci,ci+2)(cj,cj+2)|cicj|<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.


2
Schrages Heuristik ist nur optimal für pj=1 nicht für pj=p (nehmen r=(01), d=(53), p=(22)). Polynomalgorithmen fürpj=pwurden von Simons (1978), Carlier (1981) und Garey et al. (1981), letzteres inO(nlogn).
Marcus Ritt

@MarcusRitt Ich stimme zu, dass die Heuristik nicht funktioniert. Könnten Sie die Links (oder zumindest die Titel) für Ihre Referenzen angeben?
pi66

Ich sehe nicht, wie der Wert von pbetritt das Bild. Sie können alles durch teilenpJobs mit Einheitslänge zu bekommen.
Yuval Filmus

1
@YuvalFilmus Ja, aber dann sind Release- und Fälligkeitstermine möglicherweise nicht mehr ganzzahlig, was das Problem schwieriger macht. Tatsächlich haben Garey et al. (1981) lösen das Zeiteinheitsproblem mit nicht ganzzahligen Daten, und ihr Algorithmus kann angewendet werden, nachdem alles durch dividiert wurdep.
Marcus Ritt

0

Sei A der kleinste der ai. 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 bies 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 gibt ai<A für einige A, und wir finden k Werte ci<=A2 dann diese cisind 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 werden aioder gleich gut vom größten bi.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.