排序算法的传递性

排序算法的传递性


如果有{甲, 乙, 丙} 三个对象, 规定:
甲>乙
乙>丙
丙>甲
则: 这种排序没有传递性

排序算法的传递性证明

如果
a.b<=b.a\Large a.b <= b.a, 则a\Large a放在前面, 否则 b\Large b放在前面

则, 根据排序算法的传递性:
数组中的元素根据字典序排序以后:
[…前…后…]
任何两个元素结合, 则应该有:
前.后 <= 后.前

证明

已知:
{a.b<=b.ab.c<=c.b\Large \begin{cases} a.b <= b.a \\ b.c <= c.b \end{cases}

求证:
a.c<=c.a\Large a.c <= c.a

字符串"ks" 拼接 字符串 “te” 组成新串 “kste”, 我们认为字符串就是K进制的正数, "kste"是一个四位数, "ks"占据高位, "te"占据低位, 则:
kste=ks262+te\Large kste = ks * 26^2 + te

认为是k进制数:
ab=akb的长度+b\Large a* b = a * k^{b的长度} + b

定义:
kx长度=m(x)\Large k^{x长度} = m(x), 则:

{a.b<=b.aam(b)+b<=bm(a)+ab.c<=c.bbm(c)+c<=cm(b)+b\Large \begin{cases} a.b <= b.a \Rightarrow a*m(b) + b <= b* m(a) + a & ① \\ b.c <= c.b \Rightarrow b*m(c) + c <= c* m(b) + b & ② \end{cases}

①两边同时 b\Large-bc\Large*c则有:

am(b)c<=bm(a)c+acbc\Large a* m(b)* c <= b* m(a) *c + a*c -bc

②两边同时 b\Large-ba\Large*a则有:

bm(c)a+caba<=cm(b)a\Large b* m(c)* a + c*a - b*a<= c* m(b) *a

由上面两式, 可以得到:
bm(a)c+acbc>=bm(c)a+caba\Large b* m(a) *c + a*c -b*c >= b* m(c)* a + c*a - b*a

\Large \Rightarrow

bm(a)cbc>=bm(c)aba\Large b* m(a) *c -b*c >= b * m(c)* a - b*a

\Large \Rightarrow

m(a)cc>=m(c)aa\Large m(a) *c -c >= m(c)* a - a

\Large \Rightarrow

a.c<=c.a\Large a.c <= c.a

任何一个在前的跟一个在后的交换不会得到更大的字典序

[...a...b...]\Large [... a ... b...]

假设a,b\Large a,b中有两个字符串, m1,m2\Large m_1, m_2, 即:

[...am1m2b...]\Large [... a m_1 m_2 b...],则任何一个在前的a\Large a,跟在后的b\Large b交换顺序, 拼起来的新的字符串的字典序一定比之前要大

[...bm1m2a...]\Large [... b m_1 m_2 a...]

证明

原序列中顺序为am1m2b\Large am_1 m_2 b, 我们把a\Large am1\Large m_1交换顺序得到:

[...m1am2b...]\Large [... m_1 a m_2 b...]

即: a.m1<=m1.a\Large a.m_1 <= m_1.a, 后面没有改变,则有:

[...m1am2b...]>=[...am1m2b...]\Large [... m_1 a m_2 b...] >= [... a m_1 m_2 b...]
我们继续交换a\Large am2\Large m_2,

即: a.m2<=m2.a\Large a.m_2 <= m_2.a
则有:

[...m1m2ab...]>=[...m1am2b...]\Large [... m_1 m_2 a b...] >= [... m_1 a m_2 b...]
我们继续交换a\Large ab\Large b,
则有:

[...m1m2ba...]>=[...m1m2ab...]\Large [... m_1 m_2 b a...] >= [... m_1 m_2 a b...]

将b跟m2,m1\Large m_2, m_1依次交换, 由上相同可得:

[...bm1m2a...]>=[...am1m2b...]\Large [... b m_1 m_2 a...] >= [... a m_1 m_2 b...]


排序算法的传递性
https://blog.isle.ink//archives/pai-xu-suan-fa-de-chuan-di-xing
作者
Administrator
发布于
2022年08月05日
许可协议