非推移的比較でソートアルゴリズムを使用することは可能ですか?はいの場合、なぜコンパレーターをソートするための要件として推移性がリストされていますか?
バックグラウンド:
ソートアルゴリズムは、通常、コンパレータ関数C(x、y)に従ってリストの要素をソートします。
私が理解している限り、このコンパレータの要件は次のとおりです。
- 再帰的:
- 反対称:
- 推移的:
- C(x、y)はすべてのxとyに対して定義され、結果はxとyのみに依存します
(これらの要件は、実装ごとに常に異なるようにリストされているため、それらがすべて正しいことを確信していません)
今、私は「寛容な」コンパレータ関数について疑問に思っています: \ begin {array} {ll} C(x、y)= \ begin {cases} -1&{\ text {if}} \ x \ lt y-1 \\ 0&{\ text {if }} \ | x-y | \ le 1 \\ +1&{\ text {if}} \ x \ gt y + 1 \\ \ end {cases} \ end {array}C (X 、Y )= { - 1 であれば、X < Y - 1 0 なら| x − y | ≤ 1 + 1 であれば、X > Y + 1
例:両方[ 1, 2, 3, 4, 5]
と[1, 4, 3, 2, 5]
は、寛容なコンパレータに従って昇順で正しくソートされますリスト内でxがyの前に来る場合はC(x、y)\ le 0)
が[1, 4, 2, 3, 5]
、C(4,2)= 1でないため、そうではありません
このトレラントコンパレータは、反射的で非対称的ですが、推移的ではありません。
すなわち、C(1,2)= 0、c(2,3)= 0ですが、C(1,3)= -1、推移性に違反します
しかし、このコンパレータとランダムリストを指定したときに「正しくソートされた」出力を生成できないソートアルゴリズムは考えられません。
したがって、この場合、推移性は必要ありませんか?そして、推移性の緩いバージョンが存在している仕事にソートするために必要では?
関連する質問:
- 比較ソートに反対称性が必要なのはなぜですか?(反対称について)
- ランダムコンパレータ(ランダムC(x、y)について)を受け入れるソートアルゴリズム
- 非推移的なIComparerを使用したOrderBy(私によるc#ソートアルゴリズムについて)