Ich entschuldige mich für den langen Titel, aber ich wusste wirklich nicht, wie ich ihn anders schreiben sollte, ohne Informationen über den Inhalt zu haben.
Ich hatte vor kurzem eine Universitätsprüfung über parallele Algorithmen. In einer Übung wurde ich gebeten, einen Algorithmus zu schreiben, um festzustellen, ob die Elemente eines Arrays, nennen wir es A
, gleich oft wiederholt wurden.
Zum Beispiel:
1) A = 1 8 8 1 8 1 1 8
: Die Antwort lautet ja, jede Zahl wird zweimal wiederholt.
2) A = 7 8 8 5 5 4 7 8
: Die Antwort lautet nein.
Ich musste den Algorithmus für ein bestimmtes Modell des parallelen Rechnens schreiben, einen PRAM: Das Modell erforderte einige Techniken, um Lese- / Schreibkonflikte und andere Probleme zu vermeiden, aber dies ist nicht relevant. Am Ende hatte ich ein neues Array, nennen wir es B
, das ich wie folgt definieren kann:Given the array A, B[i] contains the number of repetitions of the element A[i] within A.
Zum Beispiel:
1) A = 1 8 8 1 8 1 1 8
B = 4 4 4 4 4 4 4 4
2)A = 7 8 8 5 5 4 7 8
B = 2 3 3 2 2 1 2 3
Wie Sie vielleicht denken und erwarten, müssen Sie nur noch prüfen, ob jedes Element des B
anderen gleich ist, aber es stellt sich heraus, dass ich Masochist bin und der Druck der Prüfung (und ich hatte ein bisschen Zeit) Temperatur) führte mich zu einem anderen Weg. Darüber hinaus ist der Vergleich von Elementen eines Arrays mit diesem Rechenmodell nicht unmittelbar.
Um zu überprüfen, ob alle Elemente von gleich B
sind, habe ich alle summiert und das Ergebnis durch die Anzahl der Elemente von geteilt B
: Wenn das Ergebnis einem Element von B (zum Beispiel dem ersten B[0]
) entspricht, wird der Algorithmus zurückgegeben true
( false
sonst).
Nehmen Sie das obige Beispiel:
1) sum = 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 = 32
-> 32 / 8 = 4 = B[0]
-> Ja.
2) sum = 2 + 3 + 3 + 2 + 2 + 1 + 2 + 3 = 18
-> 18 / 8 ≠ 2 = B[0]
-> Nr.
Ich weiß, dass es absurd ist, aber darauf bin ich gekommen.
Ich habe diesen Ansatz mit vielen verschiedenen Kombinationen von Arrays / Zahlen überprüft, und es scheint zu funktionieren. Es fällt mir schwer, einen (mathematischen) Beweis dafür zu finden, dass der Algorithmus korrekt ist. Neben dem Ergebnis der Prüfung, das ich noch nicht kenne, bin ich sehr daran interessiert zu wissen, ob es einen mathematischen Beweis / eine mathematische Erklärung gibt, die besagt, dass dieser Ansatz korrekt ist oder nicht, und deshalb brauche ich eine Hilfe.
Ich hoffe, ich habe die Frage auf der richtigen StackExchange-Site veröffentlicht. Wenn nicht, leiten Sie mich bitte auf die richtige Seite weiter.
Vielen Dank im Voraus.