若将101.200.16.0/20划分为5个子网,则可能的最小子网的可分配I地址数是_A_
A.254 B.126
C.510 D.1022
这道题,我起先是错的,因为我把它想成是平均分配的情况,然后我得知是错的后,我又去看了下王道的视频,说实话很实用,但没有让我明白为什么是那样子做的。
于是乎我想啊想,联合之前学过的知识,并且老师在上课讲到过,划分子网需要让任何子网号都不是另一个子网号的前缀
这个图一定要看懂呀,看不懂下面就更不懂了,当然这个没有减去网络地址和广播地址(这不是重点), 从上图可以看出,子网2有一部分和子网1重叠了,那这样在路由器转发的时候,它就不能区分出是要去哪个子网了。
那怎么样才能让子网号的前缀都能满足上述的条件,并且是最节省的利用了主机地址数呢,对的!就是哈夫曼编码也叫最优前缀编码:它就是能让任何的一个字符的编码都不是另一个字符的编码的前缀。
知道这个之后,我们就要用另一个角度来看这个题了,可以把原题解析为:根结点权值为4096,有5个叶子结点,怎么构造哈夫曼树可使其中的叶子结点权值为最小。
根权值:是指主机号为12位,2的12次方为4096
五个叶子结点:因为哈夫曼树是正则二叉树,没有度为1的结点,只有度为0和度为2的结点,划分5个子网,那就是要有5个前缀编码,而我们知道前缀编码在叶子结点处产生。
解析完题目之后我们还需要知道哈夫曼树的另一个性质:
权值越大的叶子结点离根节点越近,权值越小的结点离根结点越远。而且哈夫曼树并不唯一
那么以我们聪明的大脑就可以很容易的想到,只要每个分支的最大权值结点都是叶子结点,那么分完之后最后一个肯定是最小权值的结点,换句话说就是当哈夫曼树高度最高时。
这就是题目所想构造的哈夫曼树,其中2048就是主机地址数,因为12位的主机号已经分了一个主机号出去了,此时就为2的11次方了,就是2048,其他的就是同理可得了。
然后根据哈夫曼前缀编码的生成方法:就是从根结点到叶子结点所经过的分支上的1或0串起来(左子树为0,右子树为1)
2048:0 1024:10 512:110 256:1110 256:1111
上图为划分后的结果 !可以清楚的看出没有重叠部分。
这时候有老哥就会有疑惑了,为什么非得这么画,不是说高度最高就行了吗?
是的,可以有不同的画法的,这是由于哈夫曼树的另一个性质:
哈夫曼树的任意非叶子结点的左右子树交换后仍是哈夫曼树,但是前提是wpl要相同。
2048:1 1024:00 512:010 256:0110 256:0111
上图为划分后的结果 !也可以清楚的看出没有重叠部分。
所以这么画也是可以的,就不会像王道教程那么死板,不过还是很实用,做题就没必要深究这么多了,用方法办他就完事了。
那以后遇到这种题就可以直接秒出答案的好不啦,5个叶子结点5层,6个叶子结点6层,那么就是总主机地址 / 2^k-1 (k为层数或者划分子网数)。最后不要忘了减掉网络地址和广播地址!!!