书接上回。
本回先厘清一些总体基础概念,为今后的进一步说明打下基础
叫牌过程的本质
从信息论角度看,叫牌过程的本质其实就是对两手牌的编码过程。
上一回我们引用香农信息量公式如下
I(x)= -\log_2 p(x)
为什么会是以2为底的对数表达?
其本质在于叫牌过程就是一个二进制编码过程。
我们先考虑无竞叫的叫牌过程(有竞叫的过程将在以后仔细展开):
由pass,1♣~7NT组成,上回我们的1💗-4💗-的叫牌序列就可如下图表示:
1♣ 1🔸 1💗 1♠ 1NT.............4💗................7♠ 7NT
0, 0 , 1, 0, 0, 1, 0, 0, 0
即此叫牌序列可以编码为0010000000000000100000000000000000
- 因为1♣~7NT一共有35位,所以很容易可以得知任意的无竞叫的叫牌过程都可以在信息论中被编码成码长为35的定长码。
无竞叫叫牌过程所需要的码长
信息论中,信源编码的概念如下:
对定长编码码长的计算公式如下:
对应到无竞叫叫牌过程时(叫牌方为南北):
信源符号集=南北两家持牌所有的可能组合
q=南北两家持牌所有的可能组合数
r=2(二进制编码)
则我们不考虑任何信源压缩,所需的码字长度为:
\begin{align}
l&=log_2q \\
&=log_2C_{52}^{13}*C_{39}^{13} \\
&=log_25.15*10^{21} \\
&≈73bit
\end{align}
也就是说,当我们对南北两手牌不做任何压缩处理,需要73位码长才能表达信源,即南北两手牌。
而我们总共可以利用的码长位35位。
- 结论:对两家牌不做任何处理,在1♣~7NT的空间中,叫牌进程无法涵盖两手牌所有组合
信源符号空间压缩后的定长码码长
由结论1可知,若我们想要在有限码长(最大35位)中表达南北两手牌,则只有减少信源符号空间,即减小q(南北两家持牌所有的可能组合数)
自然而然,对应到约定俗称的点力计算法,我们想到了,把4种花色中的A,K,Q,J16张牌保留,各种花色中T以下的牌都计算成同一种小牌x,则南北两手牌的组合数可以得到降低。
\begin{align}
l&=log_2q \\
&=log_28.357*10^{11} 注* \\
&≈40bit
\end{align}
注* 由计算机编程得到结果,Java代码片段如下:
BigDecimal s = new BigDecimal(0);
for (int m = 0; m <= 0; m++) {
for (int x = 0; x <= min(13 - m, 13); x++) {
for (int y = 0; y <= min(13, 13 - m - x); y++) {
for (int z = max(0, 0 - x - y - m); z <= min(13, 13 - m - x - y); z++) {
for (int n = 0; n <= min(0, 0 - m); n++) {
for (int a = 0; a <= min(13 - n, 13 - x); a++) {
for (int b = 0; b <= min(13 - n - a, 13 - y); b++) {
for (int c = max(0, 0 - a - b - n); c <= min(13 - z, 13 - n - a - b); c++) {
if ((13 - (13 - m - x - y - z)) < 13 - n - a - b - c) {
continue;
}
BigDecimal num = new BigDecimal(1);
s = s.add(num);
}
}
}
}
}
}
}
}
System.out.println(s);
40bit > 35bit,可知即使只保留A,K,Q,J,其他都算作小牌,信源空间也无法在35bit达到完全编码。
以此类推,计算下列信源空间压缩结果需要的bit数如下:
①只保留各花色AKQ
需要35bit
②只保留各花色AK
需要29bit
③只保留各花色A
需要24bit
④不保留各花色大牌,即各花色都只算做13张小牌
需要18bit
虽然每种结果都达到了定长码码长35bit以内,但是由于成局定约只能用到15bit(3NT),18bit(4💗),19bit(4♠),21bit(5♣),22bit(5🔸),并且还有码长更小的非成局定约。
所以最现实的叫牌体系应是在④的基础上(18bit)进行编码。
那在考虑非成局,成局,满贯的各种情况下,利用信息论如何做到合理的编码呢?
敬请期待下回