Ermitteln des Produkts aus jeder der (n-1) Teilmengen eines gegebenen Arrays

7

Tut mir leid, dass ich die ursprüngliche Frage gelöscht habe, hier ist es: Wir haben eine Tasche oder ein Array von n ganzen Zahlen, wir müssen das Produkt von jedem der (n-1) Teilmengen finden. z.B.:

S = {1, 0, 3, 6}
ps [1] = 0 * 3 * 6 = 0; ps [2] = 1 * 3 * 6 = 18; usw.

Nach Diskussionen müssen wir uns um die drei Fälle kümmern und sie werden im Folgenden illustriert:

%Vor%

Danke.

    
guirgis 19.04.2010, 18:24
quelle

5 Antworten

13

Wenn das Set sehr groß ist, kann es bequem sein:

  • Berechnen Sie vorher das Produkt P aller Elemente und dann
  • Erhalte für jedes Element x ein (n-1) Produkt als P / x

Wenn die Menge Null enthält (d. h. P = 0, x = 0), müssen Sie sie als Sonderfall behandeln.

BEARBEITEN . Hier ist eine Lösung in Scheme, die die Antwort von andand berücksichtigt. Ich bin ein kompletter Anfänger - kann jemand mir helfen, den folgenden Code zu verbessern (macht es effizienter, lesbarer, lisp-ish)? (Fühlen Sie sich frei, meine Antwort zu bearbeiten.)

%Vor%     
Federico A. Ramponi 19.04.2010 18:27
quelle
11

Sie müssen die drei Fälle explizit berücksichtigen:

1) Keine Nullen: Berechnen Sie das Produkt aller Elemente und teilen Sie das gewünschte Mengenelement aus diesem Produkt auf.

2) Eine Nullstelle: Berechne das Produkt der Nicht-Null-Elemente vorberechnen. Die Antwort ist immer 0, außer wenn Sie das einzelne Nullelement entfernen. In diesem Fall ist es das vorberechnete Produkt.

3) Mehr als eine Null: Die Antwort ist immer 0.

Dies setzt voraus, dass Sie einen Datentyp haben, der die Produkte enthalten kann ... das heißt, Sie müssen darauf achten, dass Ihr Produkt den Maximalwert des Typs, den Sie zum Speichern verwenden, nicht überschreitet.

Berechnen Sie für die tatsächliche Implementierung immer das Produkt der Nicht-Null-Elemente und verfolgen Sie, wie viele Nullen es gibt. Wenn das "Set" dynamisch ist (seine Werte ändern sich), müssen Sie das Produkt und die Nullzählung aktualisieren. Wenn Sie nach einem bestimmten Teilprodukt gefragt werden, betrachten Sie die verschiedenen Fälle und handeln Sie entsprechend.

    
andand 19.04.2010 19:14
quelle
2
%Vor%

Wenn ich Ihre Frage verstehe, ist das die triviale Lösung. Es sollte in jeder Programmiersprache einfach zu implementieren sein.

    
Stefan Kendall 19.04.2010 18:27
quelle
2

Sie können dies in O(N) lösen, indem Sie O(1) zusätzlichen Speicherplatz verwenden (das O(N) -Ausgabefeld nicht mitgerechnet), ohne die Division zu verwenden. Hier ist der Algorithmus in Java.

%Vor%

Siehe auch

polygenelubricants 22.04.2010 08:37
quelle
0

Angenommen, Sie können Python verwenden:

Sie können die Methode combinations aus dem Modul itertools verwenden, um träge zu generieren die verschiedenen Teilmengen des betreffenden Satzes. Sobald Sie das haben, können Sie reduce und operator.mul , um das Produkt eines jeden zu erzeugen.

    
Hank Gay 19.04.2010 18:46
quelle

Tags und Links