Median von 3 Elementen optimal?
-
Mahlzeit,
ich muss den median von 3 Elementen möglichst optimal lösen. Entgegen der naiven Implementierung (if-else-Kaskade) ist meine aktuelle Implementierung:
int median3 (int a, int b, int c) { return max(min(a, b), min(max(a, b), c)); }
Dies sieht prinzipiell wunderbar aus, da der Controller die Instruktionen min/max direkt kennt (und der Compiler das auch kapiert). Assembler output (reduziert auf das wesentliche):
median3: max %d15, %d5, %d4 min %d2, %d5, %d4 min %d6, %d6, %d15 max %d2, %d6, %d2 ret
Frage: Kann ich das beruhigt als optimale Lösung bezeichnen? Oder fällt jemandem noch was besseres ein?
edit: Instruction set des Controllers, falls es interessiert: http://www4.informatik.uni-erlangen.de/Lehre/SS11/V_EZL/Doc/pdfs/hardware/Infineon/TC1_um_Vol2_InstructionSet_v135b.pdf
-
Schwer zu sagen, da ich irgendwie die Angabe von Latenzen vermisse.
-
Mal ne Frage aus Neugier:
Wo ist das Problem bei diesem Code?return max(min(a, b), min(b, c));
EDIT: Um mich klarer auszudrücken: Bei dieser gekürzten Fassung sehe ich kein Problem, da hier m. A. n. die Transitivität eingreift und somit die Max-Prüfung im zweiten Argument wegfallen kann.
-
knivil schrieb:
Schwer zu sagen, da ich irgendwie die Angabe von Latenzen vermisse.
Finde ich jetzt irgendwie nicht.
Steffo schrieb:
Mal ne Frage aus Neugier:
Wo ist das Problem bei diesem Code?return max(min(a, b), min(b, c));
Funktioniert nicht wenn b das min-Element ist.