OO第一单元优化博客
OO第一单元优化博客
第一次作业:
合并同类项+提正系数项+优化系数指数0/1=满分
第二次作业:
初始想法
一开始是想以\(sin(x)\)和\(cos(x)\)的指数作为坐标,在图上画出来就可以发现,两个坐标分别为\((a,b+2),(a,b+2)\)的点能够合成\((a,b)\)的点。
现在我们推广开来,假设有系数分别为为1,2,1的三个点\((a,b+4),(a+2,b+2),(a+4,b)\)即可合成一个\((a,b)\),即,若一排连续的\(n\)个点系数满足杨辉三角第\(n\)行也即组合数,那么他们就能合成一个点。
当坐标即指数和比较小时,可以将所有点先反向拆分到坐标和最大那一排,再用若干次组合数去凑,次数小于\(n-1\)次,项数就会减少。
但这种算法局限性太大,不好实现,面对指数较大的数据只能分局部做。
自暴自弃
既然无法贪心,只好搜索。
dfs,每次找到可合并的两个项去合并,然后回溯,不断记录最短答案,其中,两个项合并的次数(即合并之后的系数)要满足至少要用完其中一个项。
改完dfs发现要T(爆栈),就把每次dfs前的答案扔进set判重,即记忆化。
合并的话一开始只考虑了\(sin(x)^2+cos(x)^2=1\)然后用\(1-sin(x)^2=cos(x)^2\)以拆分常数项 和不含\(sin(x)\)或\(cos(x)\)的项来体现。后来发现速度很快但效果不好。
在队友丁总对我的指导下,我把\(1-sin(x)^2=cos(x)^2\)放进了dfs,成为合并两个项的新选择。
关于极端数据爆栈,卡住dfs次数和程序运行时间即可。最终性能分满分。
正常随机数据或项数不多的数据可以随便跑完,评论区里面的数据应该都能搜完。
欢迎大佬们批评指正,本数学弱鸡,码力选手只能想到这种暴力做法,写了快10k的优化类,累死。
第三次作业:
使用前面的架构,用一个三元组表示一个乘积项,分别表示系数、x的指数、一个常量String。对于每个表达式,在求导结束后,对它的原函数和导函数的set做一次\(O(n^2)\)的合并,合并x的系数和常量String都相等的项。原本输出就不含系数指数为0/1的,而且没有一个多余的括号。
实际测试发现,对于随机出来的含嵌套的数据表现非常好,一般能达到不合并的15%左右,比其他一些架构的优化更有效,性能分几乎满分。无奈此次强测数据过于水,无法体现此架构的优势,惜拿96.2分。
OO第一单元优化博客的更多相关文章
- OO第二单元优化博客
OO第二单元优化博客 第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同. 总计一下lo ...
- BUAA_OO第一单元总结性博客作业——表达式求导
一.程序设计思路 在我的三次作业中都采用了类的分层结构,采用逐项匹配,分层求导的思路. (一). 第一次作业中构建了Polynimial(多项式)类,在类的构造器中就完成了对非法空格的判断并对合法表达 ...
- OO第4次博客作业
OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...
- 【作业1.0】OO第一单元作业总结
OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...
- OO 第一单元
OO第一单元总结 前言 第一单元 OO 作业的主题是求导,从最简单的幂函数求导,到添加三角函数求导,再到最后添加嵌套规则.(对熬夜有了新体验,OO 作业比较适合晚上写,OO 博客也是一样 doge) ...
- OO第一单元(前四周)作业总结
OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...
- OO第一单元作业总结
oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...
- OO第一单元总结
OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...
- OO第一单元(求导)单元总结
OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...
随机推荐
- 在页面上获取web项目信息
获取协议名称:request.getScheme() 获取域名:request.getServerName() 获取项目名称:request.getContextPath() 使用EL表达式获取项目名 ...
- Solve Error: node postinstall sh: node: command not found
When install the yeoman using the following command: npm install -g yo You might have the following ...
- 总结-shell脚本
执行脚本从 svn 检出项目 vi ace.sh #!/bin/bash svn export svn://127.0.0.1/ace/demo /ace/demo 设置脚本可执行 chmod +x ...
- Idea使用说明
快捷键 ctrl + alt + b : 查找接口的实现类 ctrl + h : 查找类或接口的继承关系 double shift : 搜索任何地方 ctrl + shift + n : 查找文件 c ...
- day28:hashlib
1,继续上一小节,讲解双下内置方法,双下getitem,setitem,delitem方法,是对象可以像字典一样的来访问属性 # 普通的字典是像下面这样操作的 dic = {'k' : 'v'} di ...
- 滴滴出行基于RocketMQ构建企业级消息队列服务的实践
小结: 1. https://mp.weixin.qq.com/s/v6NM3UgX-qTI7yO1QPCJrw 滴滴出行基于RocketMQ构建企业级消息队列服务的实践 原创: 江海挺 阿里巴巴中间 ...
- MGR
单主模式 参数修改 server_id=1 gtid_mode=ON enforce_gtid_consistency=ON binlog_checksum=NONE log_bin=binlog l ...
- LeetCode 653 Two Sum IV - Input is a BST 解题报告
题目要求 Given a Binary Search Tree and a target number, return true if there exist two elements in the ...
- numpy/pandas时间互相转换
一图看懂互相转换:
- iOS 代码混淆
一般做了防调试的话,被调试进程会退出的,是防动态分析措施. 代码混淆加花这些是防静态分析措施. 反调试是防动态分析措施. 混淆的方法方法名混淆其实就是字符串替换,有2个方法可以,一个是#define, ...