DAG优化

DAG 任务调度实现以及优化 DAG Task 任务调度算法 实现 github:https://github.com/smartxing/algorithm 1 有向图的构建 DAG dag = new DAG(); dag.addVertex("A"); dag.addVertex("B")... 阅读详情

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

code:

#include <bits/stdc++.h>

using namespace std;

int n, cnt;
struct Node
{
    char id;
    int left = -1, right = -1;
    vector<char> var;
}node[200];

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[i].left == l&&node[i].right == r&&node[i].id == op)
        {
            node[i].var.push_back(c);
            return ;
        }
    }
    node[cnt].id = op;
    node[cnt].var.push_back(c);
    node[cnt].left = l;
    node[cnt].right = r;
    cnt++;
}

char s[10];
char ans[110][10];
bool flag[110];
void dfs(int x)
{
    if(node[x].left != -1)
    {
        flag[x] = 1;
        dfs(node[x].left);
        dfs(node[x].right);
    }
}

int main()
{
    cnt = 0;
    scanf("%d",&n);
    for(int i = 0;i<n;++i)
    {
        scanf("%s",s);
        int l = add_node(s[2]);
        int r = add_node(s[4]);
        add_operator(s[0],s[3],l,r);
    }
    for(int i = 0;i < cnt;++i)
    {
        if(node[i].left!=-1)
        {
            ans[i][0] = node[i].var[0];
            ans[i][1] = '=';
            Node ll = node[node[i].left],rr = node[node[i].right];
            ans[i][2] = ll.var.size() > 0 ? ll.var[0] : ll.id;
            ans[i][3] = node[i].id;
            ans[i][4] = rr.var.size() > 0 ? rr.var[0] : rr.id;
            ans[i][5] = 0;
        }
    }
    for(int i = cnt-1; i >= 0; --i)
    {
        if(ans[i][0] == 'A')
        {
            dfs(i);
            break;
        }
    }
    for(int i = cnt-1; i >= 0; --i)
    {
        if(ans[i][0] == 'B')
        {
            dfs(i);
            break;
        }
    }
    for(int i = 0; i < cnt; ++i)
    {
        if(flag[i])
        {
            puts(ans[i]);
        }
    }
    return 0;
}

 

n - dag优化_编译原理学习笔记(七):优化代码 优化代码一、优化概述1.1 基本概念「优化」对程序进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。等价:不改变程序的运行结果有效:目标代码运行时间短,占用存储空间小「遵循的原则」等价原则:优化不应改变程序运行的结果有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小合算原则:应尽可能以较低的代码取得较好的优化效果「优化的级别」局部优化、循环优化、全局优化1.2 优化... 阅读详情

相关推荐

Spark DAG优化的解读

一,Spark专业术语的解析 1,Application基于Spark的用户程序,包含了driver程序和集群上的executor 2,Driver Program运行main函数并且新建SparkContext的程序 3,Cluster Manager在集群上获取资源的外部服务(例如standalone,Mesos,Yarn) 4,Worker Node是集群中任何可以运行用代码的节点 5...

IT影风的博客 2400

DAG优化 SDUT 【编译原理】 C++

目录 Description 代码: 分析: Description 大家都学过了代码优化,其中有一个DAG优化,这次我们就练习这个操作。 Input 输入第一行为一个整数n(n < 100),表示该组输入的表达式的个数之后n行为表达式,每个变量为一个字母,表达式仅包括二元运算 + - * / 例如:A=B+C Output 通过构造DAG图,进行代码优化,只需要保留AB,删除无用变量,删除变量时,尽量保留最早出现的变量。PS:保证AB的值不同。 sam...

zhangzhaolin12的博客 6411

编译原理DAG的优化

编译原理的课设,DAG的优化,内有源代码

DAG代码优化

本文章转载于https://blog.youkuaiyun.com/roger_ranger/article/details/78830679,感谢博主的文章!!! DAG构建的流程如下 对基本块的每一四元式,依次执行:   1. 如果NODE(B)无定义,则构造一标记为B的叶结点并定义NODE(B)为这个结点;   如果当前四元式是0型,则记NODE(B)的值为n,转4。   如果当前四元式是1型...

小旺仔的博客 3563

OpenResty无损升级内嵌nginx版本0DAY漏洞

OpenResty无损升级内嵌nginx版本,nginx

qq1071643762的博客 6904

用Python+PyTorch实现DQN无人机避障:从环境搭建到实战训练(附完整代码)

本文详细介绍了如何使用Python和PyTorch框架,基于深度强化学习中的DQN算法,实现一个无人机自主避障系统。内容涵盖从自定义环境搭建、DQN智能体核心算法实现,到完整的训练流程与超参数调优,并提供了可视化演示与进阶优化方向,为开发者提供了从理论到实践的完整指南。

kubernetes8ctl的博客 640

DAG图优化

Problem Description 大家都学过了代码优化,其中有一个DAG优化,这次我们就练习这个操作。 Input 输入第一行为一个整数n(n < 100),表示该组输入的表达式的个数 之后n行为表达式,每个变量为一个字母,表达式仅包括二元运算 + - * / 例如:A=B+C Output 通过构造DAG图,进行代码优化,只需要保留AB,删除无用变量,删除变量时,尽量保留最早出现的变...

DuChunfeng的博客 1002

JavaScript 书签脚本实战:腾讯/优酷/爱奇艺等5大视频站m3u8链接一键提取

本文详细介绍了如何使用JavaScript书签脚本一键提取腾讯视频、优酷、爱奇艺等五大视频平台的m3u8流媒体链接。通过分析播放器内部对象结构,开发者可以高效获取视频源文件,避免录屏画质损失。文章包含各平台适配方案、实战增强功能开发及企业级解决方案设计,帮助用户快速掌握这一实用技术。

weixin_27945229的博客 609

DAG优化-详解

DAG优化 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 大家都学过了代码优化,其中有一个DAG优化,这次我们就练习这个操作。 Input 输入第一行为一个整数n(n < 100),表示该组输入的表达式的个数 之后n行为表达式,每个变量为一个字母,表达式仅包括二元运算 + - * / 例如:A=B+C Outp...

rwlvjj的博客 3151

RK3588平台-ES8388音频驱动调试与设备树配置实战

本文详细解析了在RK3588平台上调试ES8388音频驱动的实战过程。内容涵盖Linux音频驱动的三层架构(Machine、Platform、Codec),并重点提供了设备树(DTS)的完整配置示例,包括I2C节点、声卡节点及音频路由设置。文章还分享了驱动加载验证、amixer调试命令以及常见问题(如无声、变调)的排查思路,旨在帮助开发者快速完成RK3588与ES8388的音频系统集成。

mango的博客 806

第五章:转矩脉动的成因与抑制技术:从根源到解决方案

本文摘要: 转矩脉动是电机运行中的关键问题,涉及电磁、机械和控制三大因素。电磁因素包括谐波、齿槽转矩和磁饱和;机械因素涵盖动平衡和轴承缺陷;控制因素涉及测量误差和死区效应。解决方案采用多层面优化:硬件上通过斜极设计和死区补偿(提供算法代码)降低脉动70%;控制上采用扰动观测器和谐振控制器进行动态抑制;针对齿槽转矩开发离线学习+在线查表补偿方案。测试环节建立振动噪声量化评价体系,包括加速度计测量和A计权声学评估。最终形成从设计到控制的系统化抑制策略,显著提升电机静音性、平顺性和寿命。

汽车软件开发 339

N - DAG优化SDUT

N - DAG优化 Description 大家都学过了代码优化,其中有一个DAG优化,这次我们就练习这个操作。 Input 输入第一行为一个整数n(n < 100),表示该组输入的表达式的个数 之后n行为表达式,每个变量为一个字母,表达式仅包括二元运算 + - * / 例如:A=B+C Output 通过构造DAG图,进行代码优化,只需要保留AB,删除无用变量,删除变量时,尽量保留最早出现的变量。 PS:保证AB的值不同 Sample Input 3 A=B+C B=B..

°渐行渐远っ的博客 4773

无刷电机FOC硬件电路设计

本文先对MIT无刷电机FOC硬件电路分析做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章软件程序在我另外一个博客【嵌入式–伺服电机】MIT无刷电机FOC驱动程序分析。

qq_35635374的博客 574

N - DAG优化

N - DAG优化 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 Output

weixin_44040169的博客 1169

第十二天:Python字典(Dict)详解

字典(Dictionary)是Python中最强大的数据类型之一,它是一种可变的、无序的键值对(key-value)集合。字典中的元素是通过键(key)来存取的,而不是通过偏移量(如列表中的索引)。 字典的核心特性包括: 键值对结构:每个元素由一个键和一个值组成,中间用冒号(:)分隔 无序性:字典中的元素没有固定的顺序(Python 3.7+版本中字典会保持插入顺序,但不应依赖此特性进行顺序操作) 可变性:可以动态地添加、修改或删除键值对 键的唯一性:字典中的键必须是唯一的,如果重复,后面的键值对会覆盖

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1677

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

上一篇: LL(1)文法系列(一)first集和follow集
下一篇: LL(1)文法系列(三)预测分析程序
shadowam
博客等级 码龄10年 62粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值