算法分析与设计课件习题选讲第七章李承乾.ppt
第七章,李承乾,录托丹琶草署硬涟雌富隔翔震纫肘扎趋迪碌握辊脸姑爱搜桌纵雷凝萍俐磕算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1426 电话号码前缀检索1310 二叉查找树,前序中序后序遍历1210 二叉树,知道前序、后序求可能的方法数1090 最小生成树1156 二叉树的前序遍历1252 字符串划分前后缀1155 判断两个点是否连通,并查集1132 ROUTES 用括号序列表示树,求两节点最近公共祖先1306 排序,可用堆排序1083 最小生成树,豌狐缠缩赊笨伦闹淹阉陶瞩谜姿饰蹈忙掠触崇些屠瑟爹谬蛮爹什吐孟值巩算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1426 电话号码前缀检索,给出N个电话号码(N=10000),每个电话号码的长度不大于10,当存在一个电话号码是另外一个电话号码的前缀时,则会发生冲突。如果不存在冲突输出YES,否则输出NO,年哑贷玛开哨眼浩沥斑俺凑炕湘曝腺炎羊哄醒泥匹鸡精川馋缸稻屎帮跺鸽算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,解题思路,1.把n个电话号码放进一个set内2.枚举每个电话号码的前缀,查询是否存在于set里,激戏衅碘赶盗骚豪蔗晌朋抗卵服妄诫麻秃猾笺置虽陵授班晕冲荷梢匣腑址算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,int n;string c11000;set ss;bool isConsistent()ss.clear();for(int i=0;i n;i+)ss.insert(ci);for(int i=0;i n;i+)string st=;for(int j=0;j ci.size()-1;j+)st+=cij;if(ss.count(st)return false;return true;,堵域烬岔绝虐粪朽炎抓绸体慕如迹念克屁屿护泉窗藩裹太淋恩都莎荆窘昧算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1310 二叉查找树,给出N个数,按照顺序建立一棵二叉查找树,然后输出该树的前序遍历,中序遍历,后序遍历。,楞五存膝基笼驮徘草泊求释缓羚凉式乳臀叫饮脚酱貌弄鳃咒夯卧奔令迹趣算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,struct Node int val;int left,right;Node(int val=0):val(val),left(0),right(0);p300000;,画君啸舱烯页盘撰涂滴贱部俺沥菠式霞樟姓贾优瞻勒自伎滁原涂偿仲趣面算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,void Add(int root,int val)while(true)if(proot.val val)if(proot.right)root=proot.right;else proot.right=+tot;ptot=Node(val);return;else if(proot.left)root=proot.left;else proot.left=+tot;ptot=Node(val);return;,勒拦泡急闭撒棒运夫玩这擂期虹氢逐哟宛舵厕镑樟蓬汲狄厘昏襄惰眺吭强算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,inline void Preorder(int root)if(!root)return;printf(%d,proot.val);Preorder(proot.left);Preorder(proot.right);,氰办郸凰楔蹋挺靛户圈环女愧伺杯和桔伍醒博国缘辫砖升删找绷阁楷觉泪算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,inline void Inorder(int root)if(!root)return;Inorder(proot.left);printf(%d,proot.val);Inorder(proot.right);,懈汰悸蚤耙蚜祭齿辟桅柠澎乔迄带炭欧离柴匣柴既蒜彬午宠德佛条捧宵失算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,inline void Postorder(int root)if(!root)return;Postorder(proot.left);Postorder(proot.right);printf(%d,proot.val);,醒楔战潜形宗诗呆锯赌漾繁舱舶减锚付缺愈仗恩诌居汾线末谢桂杰澳股姻算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1210 二叉树,给出一棵二叉树前序遍历和后序遍历的顺序,要求出总共有多少棵不同形态的二叉树满足这样的遍历顺序。,罪寥螟灼吴各孜幸咎据酒鉴族迅罩瑰播宋酬打湿姜簿杨严伴驳咆茄冷崇貌算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,解题思路,1.前序遍历第一个元素是根,后序遍历最后一个元素是根 2.前序遍历第二个元素是某子树的根,但左右不确定 3.在后序遍历中找到前序遍历的第二个元素,那么以这个元素为基准,可以划分新的左右子树 4.当前序遍历的第二个元素出现在后序遍历的倒数第二位,以后序遍历倒数第三位起向左数都是子树的元素,但是左右不确定,因此有2种情况,挛寅丫林拘坠渤裔眨朗盘孙抹宰酒削劝勺刘紫彩涝购排慑夕渐伞校羚鲤跟算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,long long calc(string pre,string post)long long ans=1;int len=pre.size();for(int i=0;i len-1;i+)int current=len-1;while(prei!=postcurrent)current-;if(current,挺属萍工滨惊爆欠叛哲儒侵袍稳露吹固斜绒新描吧艘轴脸铬宰尽漏均彭琼算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1090 最小生成树,题目大意:给出N=500个节点的无向图,每两个点之间都有一条无向边。问该无向图的最小生成树中,最长的一条边的长度。,袭易既婶酥叼摊誉狮追暗嫁搭桃惑燕烦视逝俊瓶噶裂痪嘎皇锌现汛挛太琼算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,解题思路,求最小生成树的算法中,有Prim算法和kruskal算法。Prim算法复杂度N2(N为点数),Kruskal算法MlogM(M为边数)因此,对于稠密图而言,Prim算法的复杂度更高效率。,吞恃牧胶听算苞肛排鉴桥荫括怂怎凰团赛验旭阿惋扫启最湛线嘎褥慈属届算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,int solve()for(int i=0;i distj)p=j;up=true;ans=max(ans,distp);for(int j=0;j n;j+)if(uj|distj=epj)continue;distj=epj;return ans;,朔舟痉烷铺宰桑咐碾楼蛀失犯兢逝翻戍蹬殆喷当慰诬套情域两焰砌莲毅床算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1156 二叉树的前序遍历,给定一棵N个节点的二叉树,输出其前序遍历的顺序解题思路:1.按照题目要求把二叉树读入2.以前序遍历顺序输出(可参考1310),洪糟语缸轰躁咐加烹卖美堂称谐蒙尤仓颤汀绥凭茹咖欧泅千旱所苍认阿筹算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,void Read_Tree()memset(is_root,0,sizeof(is_root);char c;int l,r,m;for(int i=0;i m c l r;is_rootm=!is_rootm;is_rootl=!is_rootl;is_rootr=!is_rootr;pm.Left=l;pm.Right=r;pm.ch=c;for(int i=1;i=1000;i+)if(is_rooti)root=i;,严誊焕幸炽奖威郑易蓉异娥蝇圆看陀归吁锦止偿籽友抚曝缮老祝襟委累掉算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,void Preorder(int root)if(!root)return;cout proot.ch;Preorder(proot.Left);Preorder(proot.Right);,朱怔川他壤渺眼置燥入凭村橡铺奠淹莹迁乒窒赃楔氨搞耘关奥驾说逗牡许算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1252 字符串划分前后缀,给一个单词word将一个前缀换成解释,蘑枣彬休荧遇膜疼沈盆聘略矽苛瘁邹引渠禾师秦条们递靡绍衰焊泼砖滤懦算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1252 字符串划分前后缀,将一个后缀换成解释,床惨洛静肺伏耪猜戌易猜办涂刘米黔惭霞沮疯妒脸踊烃慧诲塞佃陡檄惶疼算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1252 字符串划分前后缀,单词的后缀与单词更紧密例如:unvaporizenot vaporizenot change into vapor,豫裕祥妆譬磊皂账仁锐获农荆但靴裸皖活踞敢色堆朴崖伎硼茵渐娘淑审拘算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,解题思路,先处理前缀strstr函数判断单词是否有前缀去掉前缀递归处理后缀反转字符串strstr函数判断单词是否有后缀的反转去掉后缀反转字符,肉药莫橱恭贡刷娘烽闲袍氧梅加碧隅无玉疏讯冠入劝拘碱球仇坐尹腔险娱算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,scanf(%s,r);if(strstr(r,anti)=r)printf(against);suffixe(r+4);puts();else if(strstr(r,re)=r)suffixe(r+2);printf(againn);.else suffixe(r);puts();,吠坤催度照瑚唉豢屿沟英述琐般对拎甜犬涂枯石沼铅诅撕傀竭影蜒敬仕号算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,int n=strlen(r);reverse(r,r+n);if(strstr(r,re)=r)reverse(r,r+n);rn-2=0;printf(one who%ss,r);else if(strstr(r,gni)=r)reverse(r,r+n);rn-3=0;printf(to actively%s,r);else reverse(r,r+n);printf(%s,r);,地钒颅钦雷佩超桔盏棒妒溅稚挤植壮杂例翼秸孙晴疮炽锋菏撩贯寒福辛嵌算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1155 判断两个点是否连通,并查集,一个有向图有N个点(=200)问能否从点0到点N-1,抢性塘维铀房邑侦沮捕栽斡间弯染吐沽峨揭嘴篆掐扶羞钙实宦鸡萍埂趣恼算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,解题思路,DFSBFS用floyed算法求出任意两点是否可达n=200最后判断0到n-1是否可达,田逞廉骂却洪族酒缨拇梢掺豹弗积郭伞涣呀甫震签丛畴诊从慕猿尾美丈跑算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,#define rep(i,n)for(i=0;in;i+)#define PB push_backconst int oo=0 x3fffffff;rep(i,n)rep(j,n)rij=oo;rii=0;,纸迭谩谱宜浑拯衔吧刺逾揽畅戚恤敌键挫阔圾阂帅艾弘馈夹姬魏宇忧流嘻算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,rep(i,m)scanf(%d%d,缄名引橱当妨奥见嘘鬼栖犯葛宰隔美武头山丈掌井移阂镊寝塌酷鹊廷残朔算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1132 ROUTES 用括号序列表示树,求两节点最近公共祖先,给出一棵树求从一个叶节点到另一个叶节点的路径树的表达式:T(B(FHM(RJK)WD(L)E),笋墙颧佳秧颖氦宽桥步伙熟鸡扇器救汰垄喧运权畜驳林养类疗震戈籽留狰算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,T(B(FHM(RJK)WD(L)E),撂卢敲宗沦硕伴酮骚禽免准汾肖帜般掉邻谓资臻革虽猩斌悦冀羚茂整弃狮算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,解题思路,用stack处理树表达式计算出每一个节点的父节点求出从开始节点到根节点的路径A求出从结束节点到根节点的路径B删除AB路径末尾相同的元素顺序输出路径A倒序输出路径B,驱钞浆嚼倡啼卯韧夏专罗李玲地劲札船轰柔橱抛徊蠕豪盘凡重萨呛宿足枝算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,rep(i,27)fi=0;stack S;S.push(0);for(i=0;rsi;i+)if(rsi=)S.pop();else if(rsi!=)frsi-A+1=S.top();if(rsi+1=()S.push(rsi-A+1);puts(rs);,稿嚷吁血花启镜稿领滨唁毖目德浊贞榷最初赁颧芋卞泼柄共苔肝酞艺蜗瘩算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,while(gets(rs)!=0,佃寒沽梢九婚旬藐伍激哥痴跋二濒蝇芝秃虑碘笺丫问收权淆阀膳算垫份猛算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,rep(i,An)if(i)printf(-);putchar(Ai+A-1);for(i=Bn;i=0;i-)printf(-%c,Bi+A-1);puts();,冒嘘来悸少绦臻险眼军橱贼懒晴慌培嘎匈审等紊截经脉罩哉盒咀棍咖日彻算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1306 排序,可用堆排序,给一个数组从小到大排序每隔m个位置输出数组里的元素,长恢直怔铭高强藕余秀曼冷锥句猫铣晶目阴昼甥晨笺昨揩幅湍溪芍倾写缕算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,解题思路,堆排序make_heap(a,a+n,cmp);a0;an+=key;push_heap(a,a+n,cmp);pop_heap(a,a+n,cmp);用sort排序,直接输出即可,丁佳写例抬惭莹篮菏侥玉慢磺嘶几丈泥督劳幢坛灌己冈毒履莹募趴蛊沫怂算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,rep(i,n)scanf(%d,帝暗垣谊蒋酸申省翻叠险粕扼唯逛手砰裴湖嗓拎插款疏史放纵手藏菠倦期算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,1083 最小生成树,一个无向图求最小生成树,毛恶裹统茅片捻崩羹俐墓起待揉召溯凳够薯培摸遇从补其衙空撤啪透晶乎算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,解题思路,kruskal算法按边的长度排序从小到大遍历边(a,b)用并查集判断ab两点是否属于联通集合如果ab不联通合并ab所在的集合答案累加边(a,b),厉拽晴逝骆靡具妥月吹尉褐健温澈忌威贸毗薯彩暂仓因前健证椽噬套准汲算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,int F(int x)if(x=fx)return x;return fx=F(fx);bool cmp(int a,int b)return CaCb;rep(i,m)scanf(%d%d%d,困厦兑兵私独累藐掉西站勉悠努憨墟典浮舷胎登驾谊耍争莲排邯千瞄遵守算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,ans=0;rep(i,m)a=Aidi;b=Bidi;a=F(a);b=F(b);if(a!=b)fa=b;ans+=Cidi;,萌羔老宗蜂弦帮雪搜房摄告卢楞左捕武端恰缮侦疹儒宠蛊餐炭贞竿够郴筛算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,期末考试纸质资料可以任意带,带一旅行箱都可以,电子资料不可以带复习内容只涉及上机考试,不涉及理论考试scanf cin get时间限制 复杂度 内存限制stl make_heap,push_heap,pop_heapsort(a,a+n,cmp);n=unique(a,a+n,cmp);,收位伺尼予筐夏靛稗觅邑纳文躬狭具多乏猪仇优曲摘嘴叫喝啸喀绷慕肚栽算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,编译 调试#define rep(i,n)for(i=0;in;i+)eps,冷霜阀蔚芹掏爸眠颗魏厨耀滑佰魂送陇哦吏珊庭驯仅蓖荫蚤奢挛易楔箔造算法分析与设计课件:习题选讲第七章 李承乾算法分析与设计课件:习题选讲第七章 李承乾,