Betrachten Sie Wertesätze (dargestellt als sortierte Arrays ohne Duplikate und mit einer bekannten Größe (dh die Größe kann in O (1) erhalten werden). Die Werte können in O (1) -Zeit auf Gleichheit getestet werden. Ich möchte um den Satz von Werten zu erhalten, die in mindestens k verschiedenen Sätzen unter den n vorhanden sind .
Der naheliegende Algorithmus, um dies zu tun, besteht darin, alle Mengen durchzugehen, die Anzahl der Vorkommen jedes Werts zu zählen und diejenigen mit einer höheren Anzahl als . In einigen Fällen können Sie es jedoch besser machen: Wenn beispielsweise n = k = 2 ist und eine Menge S 1 viel kleiner als die andere Menge S 2 ist , ist es effizienter, alle Elemente von S 1 zu betrachten und auszuführen eine binäre Suche für jeden von ihnen in S 2 : Der Ansatz der binären Suche kostet O ( | S 1 | log ( | S 2 |) während der naive Ansatz O ( | S 1 | + | S 2 | ) kostet,was schlimmer ist, wenn | S 1 | < < | S 2 | .
In welchen Situationen können wir in diesem Sinne besser abschneiden als mit dem naiven Algorithmus? (Wenn dies ein bekanntes Problem ist, würde ich mich freuen, den üblichen Namen zu kennen und Referenzen zu haben.)
quelle
Antworten:
quelle
Ihr Problem ähnelt dem Data Mining-Problem beim Auffinden häufiger Objektgruppen , das auch als Lernen von Assoziationsregeln bezeichnet wird . Wenn ich es richtig verstanden habe, kann Ihr Problem darauf reduziert werden, häufige Elemente der Kardinalität 1 (dh Singletons) mit Unterstützung > = k zu finden . Natürlich ermöglichen die verfügbaren Algorithmen (wie Apriori, Eclat, D-CLUB usw.) für das Problem auch die Bestimmung häufiger Kardinalitätselemente> 1.
quelle