Ich suche nach einem -Algorithmus zum Finden der transitiven Reduktion einer Rechteck-Containment-Hierarchie DAG, dh eine gerichtete Kante existiert von einem Rechteck zum anderen, wenn das erste Rechteck das zweite enthält.
Das heißt, entfernen Sie so viele Kanten wie möglich, damit Sie nach dem Entfernen der Kanten immer noch v von u für beliebige v und u erreichen können.
Angenommen, Rechtecke sind eindeutig, es handelt sich also um eine DAG.
Dies ist zum Beispiel beim quantitativen Assoziationsregel-Mining von Srikant / Agrawal 1996 nützlich. Dort sind wir an engen Vorfahren für Hyperrechtecke interessiert, die uns Vorfahren enthalten. Das Bestimmen eines nahen Vorfahren ähnelt dem Bestimmen eines nahen Nachkommen, was mit der transitiven Reduktion mit Rechteckeinschluss zusammenhängt. Diese Art des Regel-Mining hängt mit dem APRIORI-Algorithmus für das Standard-Assoziationsregel-Mining (dh "Boolean") von Agrawal / Srikant 1994 zusammen.
Ein ähnliches Problem ist die transitive Reduktion der Standard-DAG, die hier vorliegt :
Transitive Reduktion der DAG
Verweise
- Agrawal, Srikant - Schnelle Algorithmen für Regeln von Bergbauverbänden (1994)
- Srikant, Agrawal - Quantitative Assoziationsregeln für den Bergbau in großen relationalen Tabellen (1996)
quelle
Antworten:
14. Dezember 2018
Standardansatz und eine heuristische Alternative
Standardansatz - Grafik und Entfernungsprodukt verwenden
Wir stellen fest, dass die transitive Reduktion sowohl in der zusätzlichen Zeit in auf den transitiven Verschluss und umgekehrt reduziert werden kann . Dann wissen wir, dass wir, wenn wir den transitiven Abschluss in der Zeit lösen können, auch die laxe Boolesche Matrixmultiplikation (MM) in ähnlicher Zeit lösen können, indem wir sie auf transitiv reduzieren Closure (oder transitive Reduktion) nach Fischer / Meyer 1971. Lax Boolean MM ist, wo Eingabewerte in und wir einen Halbring vonO(n2) O(n2⋅polylog(n)) {0,1} (OR,AND) . Wir können laxes boolesches MM lösen, indem wir es auf Standard-MM (plus, mal) reduzieren. Dies bedeutet, dass ein Ansatz mit signifikant subkubischer Zeit derzeit für eine transitive Reduktion unwahrscheinlich ist. Wir können die knotenbasierte transitive DAG-Reduktion durch topologische Reihenfolge und Formen, deren Größe umgekehrt zum Abstand von der Quelle in Beziehung steht, auf eine auf Rechtecken enthaltene transitive DAG-Reduktion reduzieren. Für die Anwendung von Rechtecken sollten wir natürlich keine Zyklen haben, die auftreten, wenn die Rechtecke identisch sind. In diesem Fall sollten wir Duplikate entfernen. Ein direkterer Algorithmus dient zur Berechnung der Reduktion unter der Annahme eines spärlichen Graphen, der Zeit benötigt. Diese Zeiten ignorieren auch, dass wir, um die erste DAG zu erstellen, Containment-Tests durchführen sollten, von denen jeder Zeit in Anspruch nimmtO(n3) n2 O(d)=O(2)=O(1) .
Heuristische Alternative - R-Baum verwenden
Alternativ können wir unter der Annahme, dass wir die Dimension mäßig niedrig und fest haben und nicht fest an gebunden sind, zu Zeiten gelangen, die in subkubisch erscheinen . Wir haben zwei Möglichkeiten - beide verwenden eine R-Tree-Variante mit Bulk-Loading, z. B. über den Sort-Tile-Recursive (STR) -Ansatz über Leutenegger 1997, und das ist ausgeglichen und dynamisch über bkd-tree-artige gelegentliche Neuerstellungen (siehe Procopiuc) 2003) zur Unterstützung von Einfügungen und Löschungen in Zeit. Siehe Guttman 1984 für Details zum Standard-R-Baum. Die Hauptidee ist, dass wir enge Nachkommen für jedes der bereitgestellten Rechtecke über insgesamtd O(n) n O(log2(n)) n n Abfragen von Nachkommen. Wir betrachten beide Optionen als heuristisch, da wir möglicherweise viele Zwischenschätzungen für nahe Nachkommen haben, die letztendlich nicht überleben, obwohl Unterabfragen eine gute garantierte Zeit für Option 1 haben.
Wenn wir paarweise Rechtecke haben, die nicht häufig ein Gehäuse / Containment beinhalten und die Überlappung stark mit dem Gehäuse / Containment korreliert, ist es denkbar, dass wir mit R-Tree über eine der beiden Optionen für unseren Ansatz eine bessere Leistung erzielen können. Wir stellen fest, dass bei einer Abfrage eines Rechteckgehäuses nach einem bestimmten Abfrage-Rechteck gefragt wird, das es enthält, und bei einer Abfrage zum Einschließen eines Rechtecks nach einem bestimmten Abfrage-Rechteck, das in dieses Rechteck passt. Die Abfrage von nahen Nachkommen funktioniert ungefähr über einen heuristischen Ansatz. Wir finden primitive Rechtecke, die im Abfrage-Rechteck enthalten sind, und verwenden Hilfsabfragen, um festzustellen, ob zurückgegebene Rechtecke übergeordnete Elemente haben, die im ursprünglichen Abfrage-Rechteck enthalten sind. Die Kandidaten schließen Nachkommen ab, die wir in einem "Konflikt" speichern. sekundärer R-Baum zum Zweck der Beschleunigung von Überprüfungen in Form einer Anlage-Unterabfrage mit vorzeitigem Stopp, die bestimmen, ob ein Kandidat-Elternteil einen Kandidaten-Nachkommen schließt (und disqualifiziert); Wir pflegen diesen Konfliktbaum über Einfügungen und Löschungen. Wir stellen fest, dass wir, wenn wir auf Rechtecke gleicher Form stoßen, eines davon beliebig behalten können. Wir verwenden eine Warteschlange mit der besten Priorität, um die Reihenfolge der Begrenzungsrahmenüberlegungen zu bestimmen. Wir bevorzugen geschlossene Begrenzungsrahmen und wir brechen, indem wir einen größeren Begrenzungsrahmenbereich bevorzugen (weil es schwieriger ist, ein Mittelmann für einen größeren geschlossenen Rahmen zu sein). wir können uns dafür entscheiden, einen von ihnen willkürlich zu behalten. Wir verwenden eine Warteschlange mit der besten Priorität, um die Reihenfolge der Begrenzungsrahmenüberlegungen zu bestimmen. Wir bevorzugen geschlossene Begrenzungsrahmen und wir brechen, indem wir einen größeren Begrenzungsrahmenbereich bevorzugen (weil es schwieriger ist, ein Mittelmann für einen größeren geschlossenen Rahmen zu sein). wir können uns dafür entscheiden, einen von ihnen willkürlich zu behalten. Wir verwenden eine Warteschlange mit der besten Priorität, um die Reihenfolge der Begrenzungsrahmenüberlegungen zu bestimmen. Wir bevorzugen geschlossene Begrenzungsrahmen und wir brechen, indem wir einen größeren Begrenzungsrahmenbereich bevorzugen (weil es schwieriger ist, ein Mittelmann für einen größeren geschlossenen Rahmen zu sein).
Option 1 - Look-Ahead verwenden
Die erste Option besteht darin, die Vorausschau für Unterabfragen wie Rechteckeinfassung und Rechteckeinschließung in Verbindung mit der Eckentransformation zu verwenden. Abfragen mit enger Nachkommenschaft würden dann Look-Ahead nicht direkt verwenden. seine Unterabfragen tun. Dann haben wir einen Koeffizienten von für Look-Ahead-Abfragen für Kantenprüfungen. Wir werden nicht weiter auf die Vorausschau eingehen, außer dass für Geschwister grob getrennte Begrenzungsrahmen erforderlich sind (obwohl eine gemeinsame Kante zulässig ist) und dass es damit zusammenhängt, zu wissen, dass ein Kind aus zwei Teilbäumen definitiv eine Übereinstimmung hat (was bedeutet) Es ist einfacher zu bemerken, vorausgesetzt, wir verwenden auch eine Eckentransformation) über Kantenprüfungen an jedem Knoten. Es ist zu beachten, dass ohne Vorausschau Gehäuse und Sicherheitsbehälter bereits mindestensd d d Zeit für jeden Knoten für einen R-Baum. Wir ändern die Enclosure-Unterabfrage so, dass sie vorzeitig gestoppt wird. Dies führt dazu, dass eine solche Abfrage anstelle von lautet . Die Zeit für jede Abfrage mit engen Nachkommen ist in , wobei die Anzahl der Bucket-Nachkommen ist, die st in . Dies bedeutet, dass wir für eng untergeordnete Abfragen insgesamt Zeit in = . Da dies in weniger als kubisch ist (obwohl wir einen Faktor von weglassenO(log(n)) O(log2(n)) O(k⋅log2(n)) k k O(n) n O(k⋅n⋅log2(n)) O(n2⋅log2(n)) n d Unter der Annahme, dass es mäßig niedrig und fest ist, kann dieser Ansatz verwendet werden, um in der Praxis eine bessere Leistung zu erzielen. Wir haben Details ausgelassen, dass wir für vorausschauende Gehäuse- / Containment-Unterabfragen möglicherweise eine nicht konstante Zeit benötigen, selbst wenn keine Übereinstimmungen vorliegen.
Option 2 - Verwenden Sie keine Vorausschau
Die zweite Möglichkeit besteht darin, keine Vorausschau zu verwenden, und alles, was wir sagen können (ohne die Annahmen weiter zu vereinfachen), ist, dass wir für jede eng absteigende Abfrage den schlimmsten Fall von Ahnungen haben, von denen jede dann annehmen würde. Zeit zu finden (weil wir nicht mehr als einmal einen Ast hinuntergehen). Wir stellen fest, dass wir davon ausgehen, dass wir keine Eckentransformation verwenden. Infolgedessen haben wir eine äußerst lockere und pessimistische Zeitgrenze von für den Versuch, einen ahnungsnahen Nachkommen über eine Unterabfrage des Gehäuses mit frühem Stopp zu disqualifizieren. Die Zeit für eine eng absteigende Abfrage wird dann durch , wobei die Worst-Case-Anzahl von Ahnungen (dh ) ist. Zeit fürn O(log(n)) O(n⋅log(n)) O(k′⋅n⋅log(n)) k′ n n Abfragen mit engen Nachkommen werden dann durch = . Diese Zahl ist in mehr als kubisch (was wiederum darauf hinweist, dass wir einen Faktor von weglassen, da er mäßig niedrig und fest ist), aber die Zeiten für den Ansatz sind erheblich pessimistisch und wir glauben, dass es immer noch eine Chance gibt, dass er gut abschneiden kann übe Brt-Force. Wir zeigen, dass dies plausibel ist, indem wir jetzt einige Annahmen treffen, die wir unten diskutieren. Während die erste Option die Möglichkeit nicht ausnutzt, dass die Anzahl der Ahnungen signifikant niedriger alsO(k′⋅n2⋅log(n)) O(n3⋅log(n)) n d n entweder hat es niedrigere theoretische Grenzen, weil sie die Möglichkeit ausnutzen, dass die Unterabfrage des Gehäuses mit vorzeitigem Anhalten zur Disqualifikation eines nachgiebigen nahen Nachkommen garantiert schnell sein kann.
Option 2 - drei Annahmen
Die Annahme "Null-Überlappung" besagt, dass (i) Begrenzungsrahmen sich nicht mit dem Abfrage-Rechteck überlappen, es sei denn, wir schließen das Abfrage-Rechteck für die Gehäuse-Abfrage ein oder wir sind im Abfrage-Rechteck für die Containment-Abfrage enthalten. und (ii) Begrenzungsrahmen für Geschwister, in denen kein Geschwister enthalten ist, überlappen sich nur an einer Grenze. Wir stellen fest, dass Teil eins dieser Annahme meistens nur wahr sein kann, z. B. weil eine echte Rechtecksammlung ein größtes Rechteck hat, das nicht eingeschlossen werden kann, und ein kleinstes Rechteck, das nicht enthalten kann. Wir führen , das das durchschnittliche Verhältnis von falsch-positiv zu tatsächlich-positiv beschreibt, um zu glauben, dass ein Kind für einen Knoten mit einer garantierten Übereinstimmung während der Disqualifizierungsversuch-Unterabfrage st inb b [0,1] . Die Zeit für die Abfrage der zweiten nachkommenden Option der zweiten Option ist in zwei Teile unterteilt. Der erste Teil beschreibt das Erhalten der Ahnungen. Der zweite Teil beschreibt Versuche, jede Vermutung zu disqualifizieren. Der dritte Teil befasst sich mit Aktualisierungen des Konfliktbaums. Angenommen, die Anzahl der Ahnungen ist . Die Zeit für den ersten Teil ist . Die Zeit für den zweiten Teil ist . Die Zeit für den dritten Teil ist . Die Gesamtzeit ist lose (unter der Annahme, dass eins ist) in . Die Zeit für eng nachkommende Abfragen ist =k′′ O(k′′⋅log(n)) O(k′′⋅(b+1)log(n)⋅log(n)) O(k′′⋅log2(n)) b O(k′′⋅n⋅log2(n)) n O(k′′⋅n2⋅log2(n)) O(n3⋅log2(n)) wenn in . Dies scheint nicht besser zu sein als Brute-Force. Wenn wir die Annahme "Null-Überlappung" machen, ist Null, was eng absteigende Abfragezeit von = ergibt wenn in . Der Faktor von (anstelle vonk′′ O(n) b n O(k′′⋅n⋅log2(n)) O(n2⋅log2(n)) k′′ O(n) log2(n) log(n) ) stammt aus dem Einfügen / Löschen für den Konfliktbaum von Bucket Close-Nachkommen. Diese Annahme kann für Rechtecke für eine Hierarchie gelten, die sehr kohärent ist - dh eine mit vielen realisierten Einschluss- / Einschlussbeziehungen und einer guten Trennung zwischen Rechtecken, die nicht über Einschluss / Einschluss in Beziehung stehen.
Wir haben zwei weitere Annahmen - "einheitliche Sparsamkeit" und "kein Beschneiden", von denen jede sekundäre Zwecke hat, die mit unserer Anwendung des quantitativen Assoziationsregel-Mining zusammenhängen. Sie ermöglichen es uns, die Arbeit drastisch zu reduzieren, da die zweite Option für die Abfrage von Nachkommen sehr zeitaufwändig sein kann. Insbesondere ist die durchschnittliche Anzahl von Partitionen für ein quantitatives Attribut (wobei ein kategoriales Attribut als möglicherweise mehrere quantitative Attribute mit zwei Partitionen behandelt wird) ; dann ist die Anzahl der festen Regionen, die für jedes quantitative Attribut berücksichtigt werden, - alle überleben, wenn wir die Annahme "kein Beschneiden" haben. Wenn wir reduzieren , schrumpft der Raum aller möglichen mehrdimensionalen Rechtecke und über "gleichmäßige Sparsity"p p2 p n Wir haben mehr Kollisionen (dh möglicherweise mehr Einschließungs- / Enthalten-Beziehungen), aber die Anzahl der Rechtecke (die aus Kombinationen fester Bereiche für verschiedene Attribute bestehen) schrumpft schneller - dies bedeutet, dass bei der Abfrage von Nachkommen die erforderliche Zeit abgefragt wird drastisch schrumpfen, indem die durchschnittliche Anzahl der Partitionen leicht reduziert wird .p
Verschiedene gemeinsame Details
Der einzige Grund, warum wir glauben, dass man Option 1 möglicherweise nicht verwenden möchte, ist etwas mehr Implementierungsschwierigkeiten. Wir sehen nicht oft einen vorgeschlagenen Algorithmus, der Berichte erstellt und für jede Übereinstimmung einen Zeitkoeffizienten hat, der nicht einer ist. Dennoch ist der Koeffizient, den wir von oder in Ordnung; für niedriges ist oft akzeptabel, wo immer wir , im Gegensatz zu wenn wir zB wo wir . Im Allgemeinen ist ein R-Baum besser als ein mehrschichtiger Segmentbaum für Rechteck-Einschließungs- / Einschluss- / Schnittpunktabfragen oder Punktbeherrschungsabfragen, wenn kleiner alslog(n) log2(n) logq(n) q O(1) n O(1) d logmax(d−1,1)(n) für , da wir für einen R-Baum keine gespeicherten Rechtecke klonen. Option eins und Option zwei mit Annahmen implizieren, dass wir besser als Brute-Force zu sein scheinen, da es angebracht ist, wegzulassen .d≥1 d
Verweise
https://cs.stackexchange.com/q/29133
https://en.wikipedia.org/wiki/Transitive_reduction
quelle