最小树形图
一.
最小树形图
最小树形图,就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T,并且T中所有边的总权值最小。最小树形图的第一个算法是1965年朱永津和刘振宏提出的复杂度为O(VE)的算法。
判断是否存在树形图的方法很简单,只需要以v为根作一次图的遍历就可以了,所以下面的算法中不再考虑树形图不存在的情况。
在所有操作开始之前,我们需要把图中所有的自环全都清除。很明显,自环是不可能在任何一个树形图上的。只有进行了这步操作,总算法复杂度才真正能保证是O(VE)。
首先为除根之外的每个点选定一条入边,这条入边一定要是所有入边中最小的。现在所有的最小入边都选择出来了,如果这个入边集不存在有向环的话,我们可以证明这个集合就是该图的最小树形图。这个证明并不是很难。如果存在有向环的话,我们就要将这个有向环缩成一个人工顶点,同时改变图中边的权。假设某点u在该环上,并设这个环中指向u的边权是in[u],那么对于每条从u出发的边(u, i, w),在新图中连接(new, i, w)的边,其中new为新加的人工顶点; 对于每条进入u的边(i, u, w),在新图中建立边(i, new, w-in[u])的边。为什么入边的权要减去in[u],这个后面会解释,在这里先给出算法的步骤。然后可以证明,新图中最小树形图的权加上旧图中被收缩的那个环的权和,就是原图中最小树形图的权。
上面结论也不做证明了。现在依据上面的结论,说明一下为什么出边的权不变,入边的权要减去in [u]。对于新图中的最小树形图T,设指向人工节点的边为e。将人工节点展开以后,e指向了一个环。假设原先e是指向u的,这个时候我们将环上指向u的边 in[u]删除,这样就得到了原图中的一个树形图。我们会发现,如果新图中e的权w'(e)是原图中e的权w(e)减去in[u]权的话,那么在我们删除掉in[u],并且将e恢复为原图状态的时候,这个树形图的权仍然是新图树形图的权加环的权,而这个权值正是最小树形图的权值。所以在展开节点之后,我们得到的仍然是最小树形图。逐步展开所有的人工节点,就会得到初始图的最小树形图了。
如果实现得很聪明的话,可以达到找最小入边O(E),找环 O(V),收缩O(E),其中在找环O(V)这里需要一点技巧。这样每次收缩的复杂度是O(E),然后最多会收缩几次呢?由于我们一开始已经拿掉了所有的自环,我门可以知道每个环至少包含2个点,收缩成1个点之后,总点数减少了至少1。当整个图收缩到只有1个点的时候,最小树形图就不不用求了。所以我们最多只会进行V-1次的收缩,所以总得复杂度自然是O(VE)了。由此可见,如果一开始不除去自环的话,理论复杂度会和自环的数目有关
学了不少算法,终于第一次学会了以中国人的名字命名的算法,最小树形图的朱-刘算法。前几天看过书、ppt和网上相关的blog,在收缩环关键的那块总看得稀里糊涂。昨晚终于在威士忌的blog上看到了一幅最小树形图的构造流程图,登时大彻大悟。有时一张恰当好处的图表的确胜过万千文字解说。早上起来把它实现了,调试到现在,进一步把各种模糊的细节处理弄清楚了,也终于AC了POJ3164。呵呵
网上关于算法的描述有一些,我总结成bin3版。
有固定根的最小树形图求法O(VE):
首先消除自环,显然自环不在最小树形图中。然后判定是否存在最小树形图,以根为起点DFS一遍即可。
之后进行以下步骤。
设cost为最小树形图总权值。
0.置cost=0。
1.求最短弧集合Ao (一条弧就是一条有向边)
除源点外,为所有其他节点Vi,找到一条以Vi为终点的边,把它加入到集合Ao 中。
(加边的方法:所有点到Vi的边中权值最小的边即为该加入的边,记prev[vi]为该边的起点,mincost[vi]为该边的权值)
2.检查Ao中的边是否会形成有向圈,有则到步骤3,无则到步骤4。
(判断方法:利用prev数组,枚举为检查过的点作为搜索的起点,做类似DFS 的操作)
3.将有向环缩成一个点。
假设环中的点有(Vk1,Vk2,… ,Vki)总共i个,用缩成的点叫Vk替代,则在压缩后的图中,其他所有不在环中点v到Vk的距离定义如下:
gh[v][Vk]=min { gh[v][Vkj]-mincost[Vkj] } (1<=j<=i)而Vk到v的距离为gh[Vk][v]=min { gh[Vkj][v] } (1<=j<=i)
同时注意更新prev[v]的值,即if(prev[v]==Vkj) prev[v]=Vk
另外cost=cost+mincost[Vkj] (1<=j<=i)
到步骤1.
4.cost加上Ao的权值和即为最小树形图总权值。
如要输出最小树形图较烦,没实现过。
找环O(V),收缩O(E),总复杂度O(VE)。
二.
学了不少算法,终于第一次学会了以中国人的名字命名的算法,最小树形图的朱-刘算法。前几天看过书、ppt和网上相关的blog,在收缩环关键的那块总看得稀里糊涂。昨晚终于在
威士忌的blog上看到了一幅最小树形图的构造流程图,登时大彻大悟。有时一张恰当好处的图表的确胜过万千文字解说。早上起来把它实现了,调试到现在,进一步把各种模糊的细节处理弄清楚了,也终于AC了POJ3164。呵呵
网上关于算法的描述有一些,我总结成bin3版。
有固定根的最小树形图求法O(VE):
首先消除自环,显然自环不在最小树形图中。然后判定是否存在最小树形图,以根为起点DFS一遍即可。
之后进行以下步骤。
设cost为最小树形图总权值。
0.置cost=0。
1.求最短弧集合Ao (一条弧就是一条有向边)
除源点外,为所有其他节点Vi,找到一条以Vi为终点的边,把它加入到集合Ao中。
(加边的方法:所有点到Vi的边中权值最小的边即为该加入的边,记prev[vi]为该边的起点,mincost[vi]为该边的权值)
2.检查Ao中的边是否会形成有向圈,有则到步骤3,无则到步骤4。
(判断方法:利用prev数组,枚举为检查过的点作为搜索的起点,做类似DFS的操作)
3.将有向环缩成一个点。
假设环中的点有(Vk1,Vk2,… ,Vki)总共i个,用缩成的点叫Vk替代,则在压缩后的图中,其他所有不在环中点v到Vk的距离定义如下:
gh[v][Vk]=min { gh[v][Vkj]-mincost[Vkj] } (1<=j<=i)而Vk到v的距离为
gh[Vk][v]=min { gh[Vkj][v] } (1<=j<=i)
同时注意更新prev[v]的值,即if(prev[v]==Vkj) prev[v]=Vk
另外cost=cost+mincost[Vkj] (1<=j<=i)
到步骤1.
4.cost加上Ao的权值和即为最小树形图总权值。
如要输出最小树形图较烦,没实现过。
找环O(V),收缩O(E),总复杂度O(VE)。
那幅对我有莫大帮助的流程图如下,
对于不固定根的最小树形图,wy教主有一巧妙方法。摘录如下:
新加一个点,和每个点连权相同的边,这个权大于原图所有边权的和,这样这个图固定跟的最小树形图和原图不固定跟的最小树形图就是对应的了。
查字典技巧口诀及三种方法
小学生查字典口诀 学查字典并不难,偏旁部首看端详。 没有部首查起笔,形声字儿查形旁; 头底两层是部首,要让字头当偏旁; 左右两边是部首,取左去右有保障; 内心外壳是部首,舍去里边查外框; 整个字儿是部首,此字本身是偏旁; 一字头上生“二角”,取其下底把“角”砍; 下底如果不成部,左上角当此字旁; 有些生字较特殊,顶天立地当偏旁; 多查多想抓规律,相同部首不能忘。 查字典常用的三种方法是: 音序查字法、部首查字法和数笔画查字法。 ?如果很容易确定部首,但不确定读音就可以用部首查字法;?如果知道读音,但不会写这个字,就用音序查字法; ?如果是独体字就用数笔画查字法。
字、词典是无声的老师,这位老师随时会帮你解决疑难,扫除 学习中的“拦路虎”。你会只花少量的时间,非常方便地得到 较多、较全面、较准确的知识。熟练查字、词典,首先要学会 检字。下边以《新华字典》为例介绍这几种查字法。 一、音序查字法 音序检字法是按字音查字词的一种方法。很多字典或词典是按汉语拼音字母的顺序编排的。根据一个字的汉语拼音第一个字母,就可以在“汉语拼音音节表”中找到这个字的拼音音节在正文中的页码,再按照这个字的声调到那一页中去找。凡是要查只知道读音而不知道写法或意义的字,都可以用这种方法,但必须熟悉汉语拼音字母顺序和汉语拼音音节。 运用条件: ①字音要读得正确; ②准确无误地了解这个字的声母、韵母; ③掌握字母的写法。 知道了这个字的读音,不知道它的写法,或不知道它的意思, 就必须运用音序查字法查字。 查字步骤: ①确定音部。按要查字的读音确定音节的第一个字母——音部。
②查音节索引。在《汉语拼音音节索引》中所确定的音部栏里,找出要查字的音节,并看准该音节后面所标的正文页码。 ③翻阅正文。按页码翻阅正文,找出要查的字。 在学习中遇到不理解的字或不会写的字,只要能读准字音,就可以运用音序检字法去查检。 下面的歌诀,可以帮助同们掌握这种检字法: 音序检字须认真,读准字音很要紧。 打头字母定音部,再找音节看《索引》; 按照例字找同音,对照页码翻正文; 根据声调找汉字,字形字义记在心。 部首检字法:部首检字法属于按形查字中的一种方法。它是根据汉字的部首去查检的。凡字典正文中的单字是按部首归类进行排列的,都可以运用部首检字。 部首检字的基本步骤? ⑴确定出部首。先对所要查的字确定出查什么部。 ⑵查《部首目录》。在《部首目录》中查出该部首在《检字表》中的页码。 ⑶查《检字表》。按照页码在《检字表》中这个字的余画(即除去部首还余几画)里查出这个字在字典正文中的页码。
用树状图求概率
用树状图求概率 【学习目标】 1.掌握用“树状图”求概率的方法. 2.会画“树状图”并利用其分析和解决有关三步求概率的实际问题. 【学习重点】 用“树状图”求概率的方法. 【学习难点】 画“树状图”分析和解决有关三步求概率的实际问题. 情景导入生成问题 旧知回顾: 1.小颖将一枚质地均匀的硬币掷一次,正面朝上的概率是;小颖将一枚质地均匀的硬币连续掷了两次,你认为两次都是正面朝上的概率是;连续掷三次正面朝上的概率是多少呢? 2.掷一枚硬币一次,这是一步试验,可用直接计算法求概率;掷两枚硬币(或一枚硬币掷两次),这是两步试验,可用列表法求概率;那么掷三枚硬币(或一枚硬币掷三次),这是三步试验.那么如何求三步试验的概率呢? 带着这个问题进入今天学习吧! 自学互研生成能力 【自主探究】 阅读教材P138~P139例3,完成下面的问题: 范例:“红灯停,绿灯行”是我们在日常生活中必须遵守的交通规则,这样才能保障交通顺畅和行人安全,小刚每天从家骑自行车上学都经过三个路口,且每个路口只安装了红灯和绿灯,假如每个路口红灯和绿灯亮的时间相同,那么小刚从家随时出发去学校,回答以下问题: 解:(1)补全下列“树状图”: (2)他遇到三次红灯的概率是多大?P(三次红灯)=. 归纳:当试验存在三步或三步以上时,用树状图法比较方便, 【合作探究】 变例:甲,乙,丙三人之间相互传球,球从一个人手中随机传到另外一个人手中,共传球三次. (1)若开始时球在甲手中,求经过三次传球后,球传回甲手中的概率是多少? 解:画树状图如图:
可看出:三次传球有8种等可能结果,其中传回甲手中的有2种. 所以P(传球三次回到甲手中)==. (2)若乙想使球经过三次传递后,球落在自己手中的概率最大,乙会让球开始时在谁手中?请说明理由. 解:由(1)可知:从甲开始传球,传球三次后球传到甲手中的概率为,球传到乙、丙手中的概率均为,所以三次传球后球回到乙手中的概率最大值为.所以乙会让球开始时在甲手中或丙手中. 交流展示生成新知 1.将阅读教材时“生成的问题”和通过“自主探究、合作探究”得出的“结论”展示在各小组的小黑板上.并将疑难问题也板演到黑板上,再一次通过小组间就上述疑难问题相互释疑. 2.各小组由组长统一分配展示任务,由代表将“问题和结论”展示在黑板上,通过交流“生成新知”. 知识模块树状图法求概率 当堂检测达成目标 【当堂检测】 1.中考体育男生抽测项目规则是:从立定跳远、实心球、引体向上中随机抽一项,从50米、50×2米、100米中随机抽一项,恰好抽中实心球和50米的概率是(D) A.B.C.D. 2.学校团委在五四青年节举行“感动校园十大人物”颁奖活动中,九(4)班决定从甲、乙、丙、丁四人中随机派两名代表参加此活动,则甲乙两人恰有一人参加此活动的概率是(A) A. B. C. D. 3.在四边形ABCD中,①AB∥CD;②AD∥BC;③AB=CD;④AD=BC,在这四个条件中任选两个作为已知条件,能判定四边形ABCD是平行四边形的概率是多少? 解:画树状图如下: 由树状图可知,所有等可能的结果共12种,满足条件的结果有8种.所以能判定四边形ABCD是平形四边形的概率是=. 【课后检测】见学生用书 课后反思查漏补缺 1.收获:________________________________________________________________________ 2.存在困惑:________________________________________________________________________
2枚举法中的字典排列
第2次课枚举法中的字典排列 小热身 体会一下,“分给两个人”和“分成两堆”有什么区别呢? (1)把5个苹果全部分给两个人,共有多少种不同的分法? (2)把5个苹果分成两堆,共有多少种不同的分法? 例题1:卡莉娅、墨莫、小高三个人去游乐园玩,三人在藏宝屋中一共发现了4件宝物,三人找到的宝物数量共有多少种不同的可能?(可能有人没有发现宝物) 练习1:老师准备了6个笔记本奖励萱萱、小高、墨莫三人,每人至少得到1本笔记本,请问:老师有多少种不同的奖励方法? 例题2:老师要求每个同学写出3个自然数,并且要求这3个数的和是8。如果两个同学写出的3个自然数相同,只是顺序不一样,则算是同一种写法。试问:同学们最多能得出多少种不同的写法? 练习2:三个大于0的整数之和(数与数可以相同)等于10,共有多少组这样的三个数?
例题3:如下图所示,有7个按键,上面分别写着1、2、3、4、5、6、7这七个数字。请问: (1)从中选出2个按键,使它们上面的数字的差等于2,一共有多少种选法? (2)从中选出2个按键,使它们上面的数字的和大于9,一共有多少种选法? 练习3:有一次,著名的探险家大米得到一个宝箱,但是宝箱有密码锁,密码锁下面有一行小字,密码是和大于11的两个数,而且这两个数不能相同,不用考虑数的先后顺序,你知道密码共有多少种可能吗? 例题4:如图,数一数图中包含星星的长方形(包括正方形)有多少个? 练习4:如图,数一数图中包含星星的正方形有多少个?
作业: 1、有4支完全相同的铅笔要分给3位同学,每位同学至少分1支,共有多少种不同的分法? 2、有面值分别为1元、10元和50元的纸币若干,每种面值的纸币张数都大于 3、如果从中任意取3张,那么能组成的钱数共有多少种? 3、从1、2、3、 4、 5、6这六个数字中选出2个数字,使它们的数字的差等于2,一共有多少种选法? 4、数一数,下图包含星星的长方形(包括正方形)有多少个? 5、在下图中,一共能找出多少个含“☆”的三角形。
概率树形图
33.2 概率树形图一、复习提问巩固旧知 问题1.用列举法求概率的基本步骤是什么? (1)列举出一次试验的所有可能结果; (2)数出; (3)计算概率. 问题2.列举一次试验的所有可能结果时,学过哪些方法? 直接列举、列表法. 本节课是用列举法求概率的第三节课,对前两节课所学方法的步骤进行归纳,温故以利知新. 二、创设情境探究学习 2006年6月5日是中国第一个“文化遗产日”,我校承办了“责任与使命——亲近文化遗产,传承文明火炬”的活动,其中有一项“抖空竹”的表演.已知有塑料、木质两种空竹,甲、乙、丙三名学生各自随机选用其中的一种空竹.求甲、乙、丙三名学生恰好选择同一种空竹的概率. 学生利用学过的知识,自主探究解决上述问题.学生在探究学习活动中会有不同的表现,针对可能出现的情况设计教学预案如下: 教学预案1:直接列举法的指导 具体到抽象: 有的学生用“木质”“塑料”来直接列举;有的学生用字母、数字、符号来表示“木质”“塑料”进行列举.及时对学生不同的方法给予肯定,对那些进行简化的同学更要给予表扬,在简化过程中培养学生抽象思维能力. 无序到有序: 及时肯定学生的参与意识.对于列举不完全或重复的同学,引导他们进行有序地列举,同时请学生思考如何做到不重不漏;对于列举完全的同学,启发他思考能否更直观地展现列举过程. 教学预案2:列表法的指导
用这个方法时,如何把一次试验的三个步骤同时反映在一个表格中,学生会遇到困难.此时引导学生思考:为什么这个问题用列表的方法不容易解决呢?还有没有其它更好的列举方法呢? 教学预案3:画树形图的指导 少数学生也有可能画出树形图,表扬使用这种方法的学生,并请学生阐述这种方法的优越性,及如何实施这种方法.如果没有学生画出树形图,由于学生在小学或其它学科接触过树形图,引导列举完全的学生画出树形图. 以我国第一个“文化遗产日”为背景提出问题,激发学生学习兴趣和参与意识. 设计探究学习活动,有利于展示学生对问题解决的不同策略,真正体会问题解决的过程,培养学生的创新精神和克服困难的勇气.探究活动前的教学预案使课堂的指导更有针对性. 把发现新方法的机会留给学生,增强学生学习的自信心和成就感.三、交流展示引出新知 请有序列举的同学板书探究结果,并进行简单说明. 塑料—A 木质—B 方法1:方法2: (甲、乙、丙三名学生恰好选择同一种空竹为事件). 点评:两种方法各有优点,尤其方法2借助图形来计数,当一次试验要经过多个步骤才能完成时,方法2比方法1更能直观地展示思维的过程. 教师指出方法2画出的图形称为“树形图”,今天我们的课题是画树形图求概率. 教师板书:画树形图求概率 问题:如何根据题意画出树形图列举一次试验的所有可能结果? 师生归纳总结: (1)明确完成一次试验要经过几个步骤; (2)根据一次试验中几个步骤的顺序直接画出树形图. 由两位学生板书展示他们的思维过程,引导大家对两种方法进行比较,并和自己的方法也进行比较.通过生生互学感受思维的条理性和实施的有序性,为后续的教学做好准备.
高斯小学奥数含答案三年级(上)第02讲枚举法中的字典排列
枚举法中的字典排列 我明天先吃什么呢?先吃汉堡,不不,还 是 先吃玉米,哎,还是先吃饼干 吧!到底 先吃什么呢?共有多少种不同的吃 法? 基础例题: 在上一讲中我们学习了简单的枚举法一一直接把所有情况一一列举出来. 接枚举很有可能产生重复或者遗漏, 这时就需要有一些特别的方法来帮助我们枚举出所有情况. 本讲就 但如果问题较为复杂,直 如果我把这三个东西都带回去, 天吃1个,还可以再吃3天呢?
主要介绍两种枚举的方法:字典排列法和树形图法. 首字母相同的单词都在一起 同学们可以翻一下英汉字典,不难发现字典中单词排列的规律:整本字典按首字母从 a 到z 排列, 在首字母相同的单词中, 再按照第2个字母从a 到z 的顺序排列, 然后是
个字母,第4个字母所谓“字典排列法”,就是指在枚举时,像字典里的单词顺序那样排列出 3各一次可以组成多少个不同的三位数?用字典排列法枚举时,每个位置都勒* 按从小到大排列,枚举的顺序是:123, 132, 213, 231 , 312, 321 .下面我们用字典排列法来解决几个 问题. 例题1 .卡莉娅、墨莫、小高三个人去游乐园玩,三人在藏宝屋中一共发现了5件宝物,三人找到 的宝物数量共有多少种不同的可能?(可能有人没有发现宝物) 分析:每个人最少找到几件宝物?最多呢? 练习: 1.老师准备了6个笔记本奖励萱萱、小高和墨莫三人,每人至少得到1本笔记本,请问:老师有 多少种不同的奖励方法? 例题2 ?老师要求每个同学写出3个自然数,并且要求这3个数的和是8 ?如果两个同学写出的3 个自然数相同,只是顺序不一样,则算是同一种写法?试问:同学们最多能得出多少种不同的写法? 分析:注意顺序不同算一种写法,也就是三个数分别为(1、2、5)、(2、5、1 )和(5、1、2)都 算同一种写法. 练习: 2.三个大于0的整数之和(数与数可以相同)等于10,共有多少组这样的三个数? 用字典排序法枚举的时候,判断题目要求到底是“交换顺序后算作两种”还是“交换顺序后仍然是同一种”非常关键?往往题目中要求“交换顺序后仍然是同一种”,那么枚举的每个结果里就没有明确 的顺序关系;反之,那么枚举时要注意每个结果中应该都符合一定的顺序关系. 在求解计数问题时,审题非常关键?往往一字之差就会有天壤之别. 枚举法是解决计数问题的基础,但是对于比较复杂的问题,如果直接枚举很容易出现重复或者遗 漏.这时就需要预先把所有情形分成若干小类,针对每一小类进行枚举. 例题3 如下图所示,有7个按键,上面分别写着:1、2、3、4、5、6、7这七个数字?请 问: (1)从中选出2个按键,使它们上面的数字的差等于2, 一共有多少种选法? ftp f 1ft 0
排列的字典序问题
算法分析与设计实验报告 第 2 次实验
这次的实验和上一次的字典序问题有一些相似,主要不同的地方在于要写出下 附录:完整代码 #include