Finden Sie die minimale Abdeckung von einem Intervall mit subintervals
Angenommen ich habe ein Intervall (a,b), und eine Reihe von subintervals {(ai,bi)}i, deren union all (a,b). Gibt es einen effizienten Weg zu wählen, eine minimal-Kardinalität der Teilmenge dieser subintervals, die immer noch deckt (a,b)?
- Sind Sie auf der Suche nach der kleinsten Anzahl von subintervals, oder die Menge der subintervals, die die wenigsten Elemente (und damit die wenigsten Duplikate)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen greedy-Algorithmus, beginnend bei a oder b immer die optimale Lösung.
Beweis: betrachten Sie die Menge Sa alle subintervals abdecken. Klar, einer von Ihnen zu gehören, um die optimale Lösung zu finden. Wenn wir ersetzen Sie es mit ein subinterval (amax,bmax) aus den Sa, deren rechter Endpunkt bmax ist maximal in Sa (erreicht am weitesten rechts), die noch offenen Intervall (bmax,b) wird ein Teil des restlichen Intervalls von der optimalen Lösung, so kann es sein, bedeckt mit nicht mehr subintervals als die Analog aufgedeckt Intervall von der optimalen Lösung. Daher wird eine Lösung hergestellt aus (amax,bmax) und die optimale Lösung für die verbleibenden Intervall (bmax,b) wird auch optimal sein.
Also, beginnen Sie einfach mit ein und iterativ wählen Sie das Intervall zu erreichen, die am weitesten rechts (und für den Ende des vorherigen Intervall), wiederholen Sie, bis Sie auf b. Ich glaube, dass die Auswahl der nächsten Pause kann man in log(n) wenn Sie speichern die Intervalle in einer augmented-Intervall-Baum.
Klingt wie dynamische Programmierung.
Hier ist eine illustration des Algorithmus (vorausgesetzt die Intervalle sind in einer Liste, sortiert nach der Endzeit):
Aber es sollte auch um caching (memoisation).
minCard()
soll eine minimale Kardinalität aber die Frage fragt nach einer Teilmenge mit minimaler Kardinalität.Gibt es zwei Fälle zu betrachten:
Fall 1: Es gibt keine überschneidenden Intervallen nach der Endzeit eines Intervalls. In diesem Fall wählen Sie den nächsten Intervall mit der kleinsten Startzeit und die längste Bearbeitungszeit. (amin bmax).
Fall 2: Es gibt 1 oder mehr über-Läppen Abständen mit dem letzten Intervall, die Sie suchen. In diesem Fall wird die Startzeit spielt keine Rolle, weil Sie bereits abgedeckt. So optimieren Sie für die Endzeit. (a, bmax).
Fall 1 wählt immer das erste Intervall als das erste Intervall in der optimalen Menge als auch (der Beweis ist der gleiche wie das, was @RafalDowgrid zur Verfügung gestellt).
Du meinst also, dass die subintervals noch überschneiden sich in der Weise, dass (a,b) bleibt vollständig bedeckt ist, überhaupt Punkte?
Vielleicht aufteilen, die subintervals sich in basic blocks zugeordnet, von wo Sie gekommen sind, so können Sie Liste mit Optionen für jeden basic block-Intervall-Buchhaltung für andere Regionen, die von der subinterval auch. Dann können Sie eine Suche auf Basis jedes sub-subinterval und zumindest sicher sein, keine Lücken gelassen werden.
Dann würde suchen müssen.. effizient.. das würde schwieriger werden.
Beseitigen könnte jeder Ansammlung von Intervallen, die vollständig abgedeckt durch einen anderen Satz von kleiner Anzahl und zu arbeiten, das problem nach der Vorverarbeitung.
Wäre das nicht der minimal für das ganze minimal sein für mindestens die Hälfte? Ich bin mir nicht sicher.
Gefunden link eine Zeitschrift, aber konnte es nicht Lesen. 🙁
Wäre dies eine hitting set problem und NP_hard im Allgemeinen.
Nicht Lesen konnte, diese beiden, aber sieht aus wie entgegengesetzte Art von problem.
Konnte es nicht Lesen, aber eine andere link erwähnt das splitting Abständen.
Hier ist ein verfügbaren Verweis auf Randomisierte Algorithmen für GeometricOptimization Probleme.
Seite Fünf und dreißig dieses pdf hat ein greedy-Algorithmus.
Seite 11 von Karp (1972) erwähnt hitting-set und zitiert eine Menge.
Google Ergebnis. Die Erforschung war Spaß, aber ich muss jetzt gehen.