Jeśli min
i max
są używane tylko w zestawach uporządkowanych, wszystkie rozsądne definicje są równoważne.
W praktyce jednak w zestawach wstępnie zamówionych używane są: min
i max
: zestawy, w których można uzyskać dwa elementy, które sortują to samo bez identyczności. Na przykład, można być manipulacyjny:
struct student {
char *name;
int grade;
};
i zdefiniować s1 < s2
gdy strcmp(s1->name, s2->name) < 0
. Następnie dwóch uczniów o tej samej nazwie, ale o różnych stopniach będzie sortować to samo. Takie dwa elementy są uważane za równoważne dla relacji (wstępnego) porządkowania.
W zbiorze przedpremierowym argumentem jest, że min
dwóch równoważnych elementów powinno zwrócić pierwszy parametr, a max
powinien zwrócić drugi parametr. Definicja ta zachowuje kilka właściwości, które można oczekiwać, zwłaszcza
- para (
min(x,y)
, max(x,y)
) jest albo (x
, y
) lub (y
, x
)
i
- jeśli
x
i y
są różne, to min(x,y)
i max(x,y)
są odrębne,
i
- funkcja, która odwzorowuje (
x
, y
) do (min(x,y)
, max(x,y)
) jest stabilną funkcją sortowania na zestawy dwóch elementów.
To nie jest nowy pomysł, a znajdziesz dużo lepsze wyjaśnienia niż moje w wielu standardowych tekstach dotyczących programowania. Rozdział 7 z Stepanov Papers, cytowany już przez Mat i juanchopanza, jest dobrym źródłem jeśli lubisz składnię C++.
IIRC dla niektórych argumentów porządkowych bardziej sensowne jest zwracanie drugiego argumentu w przypadku, gdy oba są równe. – juanchopanza
@juanchopanza Interesujące, czy mógłbyś pokazać przykład? Dzięki! – P0W
To przychodzi (jak sądzę) z "Notatek o programowaniu" Aleksandra Stiepanowa - prawdopodobnie ma tam racjonalne uzasadnienie. – Mat