https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3371 题意: 可以用表达式树来表示一个表达式。在本题中,运算符均为二元的,且运算符和运算数均用1~4个小写字母表示。 例如,a(b(f(a,a),b(f(a,a),f)),f(b(f(a,a),b(f(a,a),f)),f))...
【uva 12219】Common Subexpression Elimination(图论--树+自定义比较器+映射+递归) 题意:如题,用表达式树来表示一个表达式,且消除公共的部分,即用编号表示。编号 K 定义为表达式第 K 个出现的字符串。 解法:先构造表达式树,给每棵子树用(string,left_son,right_son)-->(哈希值,...,...)编号。由于最多...
UVA 12219(公共表达式消除---模拟二叉树)紫书 Let the set Σ consist of all words composed of 1-4 lower case letters, such as the words “a”, “b”, “f”,“aa”, “fun” and “kvqf”. Consider expressions according to the grammar with the two rulesE → fE → f(E, E)for eve...
UVa 12219 公共表达式消除 题意: 用表达式树来表示一个表达式。 思路: 用map来记录出现过的子树。如(b,3,6)表示这棵子树的根为b,左子树为编号为3的子树,右子树为编号为6的子树。 AI检测代码解析 1#include<iostream>2#include<string>3#include<cstring>4#include<algorithm>5#include6usingnamespacestd;78c...
UVA12219 //by Rujia Liu /* 字符串的对比是缓慢的。 鉴于这道题最多只有四个小写字母, 也就是最多26*4种情况, 我们完全可以用整数来代替字符串。 一种比较简单的做法是把字符串看成一个四位的27进制数, 并抛弃0,因为0和0000相等。 */ #include<cstdio>...
};map<Tree,int> treeMap;map<int,Tree> nodeMap;intsolve(){stringcur;while(isalpha(str[k])) cur.push_back(str[k++]);//这个贼鸡儿强,实现了一遍的遍历。想不到string类也能push_back...intid=++cnt; Tree& t=nodeMap[id]; t.op=cur; t.ls=0;t.rs=0;if(str[k]=='(') ...
Common Subexpression Elimination UVA - 12219 题目大意:给出一段表达式,并让其中的重复部分用序号来代替 思路:首先针对表达式构建出表达式树,对于出现过了的子树用map储存,再在打印时用一个vis数组来记录这个序号的子树是否打印过了,如果已经打印过了,那么就打印其序号。
map<string,int>smp; map<string,int>::iterator sit; vector<string>scache;#definePB push_backstructNode {intl,r;intsid;intHash;booloperator< (constNode& x)const{returnsid<x.sid || (sid==x.sid && (l < x.l || (l == x.l && r <x.r) )); ...
公共表达式消除(UVa 12219) 紫书354页的题,将表达式树进行公共表达式消除,化为等价的图。因为需要判断某一个是否出现过,所以需要快速比较,采用哈希表的形式,将a~b与1~27一一对应,不采用0,因为0与0000是相同的,对于每一个树,都预先给予其一个编号,然后将其所表示的字符串化为27进制的数,然后递归建造其左右...
UVA 12219-Common Subexpression Elimination 原题链接:点击此处 觉得这题好难呀!方法在紫书上,十一节公共表达式消除那小节(没带书回来,具体页数不清楚啦~) 这题树中的结点对应的子树都是二叉树,不存在只有一个儿子的情况。输入的字符串中也只有两种情况,结点名字后面紧跟一个左括号的,和不跟括号的。