2010-12-08 7 views
0

Wie würde ich finden können, wenn mindestens die Hälfte meiner Objekte in einem Array wahr (in einer Funktion) mit einem Divide and Conquer-Algorithmus zurückgibt? Die Objekte haben keinen aufzählbaren Wert, daher ist Objekt A keinesfalls größer als Objekt B.Divide and Conquer - Vergleichen

Um zu verdeutlichen, alle Objekte miteinander zu vergleichen, die diese Funktion verwenden. So gibt funct (Obj a, Obj b) basierend auf einigen Kriterien wahr oder falsch zurück. Sie können zusammengelegt werden, wir wollen nur wissen, ob mindestens die Hälfte der verglichenen Objekte wahr ist.

+0

sind diejenigen, die zusammen für diese Funktion wahr verklumpt zurückkehren? –

+0

Um zu verdeutlichen, alle Objekte mit dieser Funktion miteinander zu vergleichen. So gibt funct (Obj a, Obj b) basierend auf einigen Kriterien wahr oder falsch zurück. Sie können zusammengelegt werden, wir wollen nur wissen, ob mindestens die Hälfte der verglichenen Objekte wahr ist. – blahhhhhh

+1

Möchten Sie alle zu vergleichenden Elementpaare aufnehmen oder werden alle Elemente des Arrays mit einem bekannten Wert verglichen, z. Wenn das Array aus Ints bestand und Sie wissen wollten, ob die Hälfte aus einzelnen Ziffern bestand? –

Antwort

0

hängt von einer Menge Dinge:

Wie viele Objekte gibt es? Sind sie bestellt? Welche Sprache benutzen Sie? Auf welcher Maschine läuft das?

Ich würde sagen, wenn Sie eine Menge von Elementen haben, nach dem Zufallsprinzip geordnet, auf einer Maschine, deren Prozesse von Threading profitieren würden, erstellen Sie ein paar Threads und weisen Sie jedem ein Stück Daten zu arbeiten. Sobald Sie die Anzahl der Durchgänge erhalten haben oder mehr als die Hälfte der Anzahl der Objekte ausfällt, haben Sie Ihre Antwort.

+0

Es gibt n Anzahl der Objekte. Immer andere Größe. Sie sind nicht geordnet und haben daher keinen Bestellwert. Egal welche Sprache oder Maschine. – blahhhhhh

1

Warum möchten Sie Divide and Conquer verwenden? Beantworten Sie Ihre Frage als O (n), wenn Sie den trivialen Algorithmus 'iterate and count' verwenden ... und Sie nicht wissen können, dass die Hälfte der Objekte wahr ist, indem Sie einen Algorithmus verwenden, der weniger als O (n/2) Objekte prüft, Das ist das gleiche wie O (n).

BEARBEITEN: OK, die Bearbeitung zeigt, dass es kein Prädikat ist, das Sie anwenden. Also meine Antwort gilt nicht. Ich verstehe immer noch nicht, wie Sie wirklich 'die Hälfte des Objekts als wahr' definieren. Sie kehren wahr im Vergleich zu was zurück? Was wir haben, ist n**2 Paare (vielleicht weniger, ist es unklar, ob ein Objekt mit sich selbst verglichen werden kann). Meinst du die Hälfte der n**2 Paare geben wahr, wenn Vergleichsfunktion angewendet wird?

Wenn so eine Argumentation sehr ähnlich wie die vorherigen zu dem Schluss kommen Sie zum Scheitern verurteilt sind, und kann nicht besser als O(n**2)

+0

Beispiel: gegeben (a, b, c, d) wenn eine Funktion FUNKTION (a, b) = wahr ist. Dann wurde mindestens die Hälfte der Objekte als wahr zurückgegeben. – blahhhhhh

+0

Die zurückgegebenen Objekte sind alle möglichen Paare? – kriss

+0

Wenn dem so ist, bist du wieder verloren, hier kannst du nicht teilen und herrschen. Aber es könnte eine mögliche Parallelisierung geben, wie es ein anderes Poster vorgeschlagen hat. – kriss