noip上海地区初赛有推荐的教程吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了noip上海地区初赛有推荐的教程吗?相关的知识,希望对你有一定的参考价值。

rt
注意是初赛(貌似初赛考题海战术吗?)

初赛的话,我这里有几套模拟题。主要是把

这些内容弄懂了,还有多读读程序就行了。


你留邮箱,我发过去。

追问

我只是想要书,不方便上电脑。。。。。

参考技术A 有一本紫色的大约语文课本大小,名字我忘了==
基础知识还是比较重要的啦,我今年选择题都是蒙的,勉勉强强一等奖,靠推荐名额才去复赛的
注意时事也要看看的
参考技术B 理论上只要拿程序员的书看就可以

NOIP初赛 之 哈夫曼树

哈夫曼树

  种根据我已刷的初赛题中基本每套的倒数第五或第六个不定项选择题就有一个关于哈夫曼树及其各种应用的题,占:0—1.5分;然而我针对这个类型的题也多次不会做,so,今晚好好研究下哈夫曼树;

 概念:

 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。

                                                              ————维基百科

自己结合维基百科和dalao的博客大致理解了下概念:就是一颗最优的二叉树,从根节点到需要到达的节点的权值之和最小,即为最优,举个例子:

一个很简单的程序,根据输入的分数判断等级,一共有五个等级,其主要的判断算法是这样的:

if(score<60)  
    cout<<"E"<<endl;  
else if(score<70)  
    cout<<"D"<<endl  
else if(score<80)  
    cout<<"C"<<endl;  
else if(score<90)  
    cout<<"B"<<endl;  
else  
    cout<<"A!"<<endl;  

用一个二叉树来表示是这样的:

【原谅我;灵魂画师】

可以很明显得看出,这种方式的效力是非常低下的,N的最差情况要比较四次,如果等级划分更严密的话【比如划分100000000000个等级】,这种方式明显TLE;

因此,我们可以采用哈夫曼树的思想:

 

这两种方式,显然后者的判定过程的效率要比前者高。在也没有别地判定过程比第二种方式的效率更高。

 

我们称判定过程最优的二叉树为哈夫曼树,又称最优二叉树

 哈夫曼树的几个概念:【来自于百度百科】
1、路径和路径长度【PL】
在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长
 度为L-1。
2、结点的权及带权路径长度
若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。
3、树的带权路径长度【WPL】
树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL。

注:哈夫曼算法采用的是贪心的思想; 问题求解题也有可能会让你求PL或WPL,如下图例:

 

 

                               

 例如例1,构造哈夫曼树的WPL为35是最小的。具体比较如下图:

 

 

以上是关于noip上海地区初赛有推荐的教程吗?的主要内容,如果未能解决你的问题,请参考以下文章

noip初赛问题求解的方法

noip初赛题解

noip2009初赛答案

noip初赛题解

noip2010初赛模拟题

关于NOIP复赛,