Bei einem 2D-Array von Daten, wie finde ich die größte Kombination mit den meisten Übereinstimmungen?
Beispiel:
Kd. Nr. Prod Nr.
C1 P1
C1 P2
C2 P1
C2 P3
C3 P1
C3 P3
C3 P4
(Verwendung von Haskell - konnte nicht herausfinden, wie dies einfach in C# gemacht werden kann, was gewünscht wird) Die Teilfolgen sind:
> subsequences \["P1","P2","P3", "P4"\]
=> \[\[\],\["P1"\],\["P2"\],\["P1","P2"\],\["P3"\],\["P1","P3"\],\["P2","P3"\],\["P1","P2","P3"\],\["P4"\],\["P1","P4"\],\["P2","P4"\],\["P1","P2","P4"\],\["P3","P4"\],\["P1","P3","P4"\],\["P2","P3","P4"\],\["P1","P2","P3","P4"\]\]
Ich möchte eine Teilfolge der Größe X mit mehr als Y Übereinstimmungen finden...
Also, für dieses Beispiel ist die größte Teilfolge mit mehr als einer Übereinstimmung: ["P1", "P3"] - mit 2 Übereinstimmungen
Da die individuellen Kundensequenzen sind:
C1 => \["P1", "P2"\]
C2 => \["P1", "P3"\]
C3 => \["P1", "P3", "P4"\]
Also gibt es zwei Instanzen von ["P1", "P3"] in diesen Sätzen.
Mein erster Gedanke war es, die Teilfolgen zu generieren und dann abzugleichen, aber mein Datensatz ist zu groß.
Hinweis: Mein Datensatz enthält 13000 eindeutige Kombinationen von 2D-Daten, daher ist der Teilfolgenansatz entweder überlaufen oder hat nie geendet, abhängig von der Sprache.
EDIT: Ich bin an der längsten Teilmenge interessiert (nicht geordnet)
EDIT: @Jimmy: Wenn Sie Folgendes zu Ihrer Liste hinzufügen, hätte ich erwartet, dass P1, P2, P4 das Ergebnis sind, da es die meisten Kunden mit diesem Korb hat. Ihre Lösung funktioniert leider nicht
{ "C4", new HashSet(new[] { "P1", "P2","P4"})},
{ "C5", new HashSet(new[] { "P1", "P2","P4"})},
{ "C6", new HashSet(new[] { "P1", "P2","P4"})},
EDIT: @Eric Lippert
Meine ideale Ausgabe wäre jede Kombination und jedes Mal, wenn es eine Teilmenge war. Dann könnte ich eine Abfrage der größten Körbe mit einer Mindestanzahl von Waren in diesem Korb machen.
EDIT: Um es aus einer geschäftlichen Perspektive zu sehen, möchte ich den am häufigsten vorkommenden Warenkorb finden, den viele meiner Kunden kaufen. Mir ist bewusst, dass viele und die Größe des Korbs vage sind - aber hier kommt die Analyse des Ergebnisses ins Spiel.