DAG优化
Problem Description
大家都学过了代码优化,其中有一个DAG优化,这次我们就练习这个操作。
Input
输入第一行为一个整数n(n < 100),表示该组输入的表达式的个数
之后n行为表达式,每个变量为一个字母,表达式仅包括二元运算 + - * /
例如:A=B+C
Output
通过构造DAG图,进行代码优化,只需要保留AB,删除无用变量,删除变量时,尽量保留最早出现的变量。
PS:保证AB的值不同
Sample Input
3 A=B+C B=B+B A=C+C
Sample Output
B=B+B A=C+C
Hint
Source
#include <bits/stdc++.h>
using namespace std;
int n;
int cnt;
struct Node
{
char id;
int left = -1, right = -1;
vector<char> var;
} node[110];
bool find_var(int i,char c)
{
for(char j : node[i].var)if(j == c)return 1;
return 0;
}
int add_node(char c)
{
for(int i = cnt-1; i >= 0; --i)
if(node[i].id == c || find_var(i,c))return i;
node[cnt].id = c;
return cnt++;
}
void add_operator(char c,char op,int l,int r)
{
for(int i = cnt-1; i >= 0; --i)
if(node[
DAG图优化在代码改进中的应用

本文探讨了DAG(有向无环图)优化在代码优化中的实践。通过对输入的表达式构建DAG图,我们可以删除无用变量并保留最早出现的变量,以实现代码的精简。示例展示了如何处理包含加减乘除运算的表达式,确保在优化过程中保持变量AB的值不变。
最低0.47元/天 解锁文章
846

被折叠的 条评论
为什么被折叠?



