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第一单元优化博客的更多相关文章

  1. OO第二单元优化博客

    OO第二单元优化博客 第五次作业没有性能分,但是,我在这一单元的宗旨就是写一个日常生活中 最常见的那种电梯,所以第五次我没有写傻瓜电梯,而是直接写了个\(look\),和第六次基本相同. 总计一下lo ...

  2. BUAA_OO第一单元总结性博客作业——表达式求导

    一.程序设计思路 在我的三次作业中都采用了类的分层结构,采用逐项匹配,分层求导的思路. (一). 第一次作业中构建了Polynimial(多项式)类,在类的构造器中就完成了对非法空格的判断并对合法表达 ...

  3. OO第4次博客作业

    OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...

  4. 【作业1.0】OO第一单元作业总结

    OO第一单元作业已全部完成,为了使这一单元的作业能够收获更多一点,我回忆起我曾经在计算机组成课设中,经常我们会写一些实验报告,经常以此对实验内容反思总结.在我们开始下一单元的作业之前,我在此对OO第一 ...

  5. OO 第一单元

    OO第一单元总结 前言 第一单元 OO 作业的主题是求导,从最简单的幂函数求导,到添加三角函数求导,再到最后添加嵌套规则.(对熬夜有了新体验,OO 作业比较适合晚上写,OO 博客也是一样 doge) ...

  6. OO第一单元(前四周)作业总结

    OO第一单元(前四周)作业总结 OO第一单元(前四周)作业总结要求(第四次作业) 0.前言 本次博客针对的是本人学习Java的第一阶段的三次作业的作业总结 第一次作业的内容是:7-1 计算税率 (20 ...

  7. OO第一单元作业总结

    oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...

  8. OO第一单元总结

    OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...

  9. OO第一单元(求导)单元总结

    OO第一单元(求导)单元总结 这是我们oo课程的第一个单元,也是意在让我们接触了解掌握oo思想的一个单元,这个单元的作业以求导为主题,从一开始的加减多项式求导再到最后的嵌套多项式求导,难度逐渐提高,编 ...

随机推荐

  1. BOM 浏览器对象模型_当前窗口的浏览历史 history 对象

    当前窗口的浏览历史 window.history 对象 保存了当前窗口访问过的所有页面网址 由于安全原因,浏览器不允许脚本读取这些地址,但是允许在地址之间导航 history.back() 相当于 h ...

  2. vscode插件安装失败的解决方案

    在vscode中点击对应插件的install按钮安装,安装失败,软件提示手动安装(manually install). 手动下载vsix安装包,然后点击install from VSIX...,选择v ...

  3. Python基础之列表深浅复制和列表推导式

    一.列表深浅复制: 浅拷贝内存图如下: 深拷贝内存图如下: 二.列表推导式: 实例: """ 列表推导式 练习:exercise01 """ ...

  4. 一个简单的分布式session框架

    该代码只是用来学习原理的,有很多不完善之处. 代码:  git@github.com:sicw/EasySpringSession.git 一. 整体设置 1. 实现Filter,封装新的reques ...

  5. DocX Xceed.Words.NET操作Word,插入特殊符号

    x 传送门,我们走... DocX的Github传送门 介绍一 介绍二 写入特殊符号 开始... 自己做一个工具,要导出Word的,当时刚开始想使用Xceed.Words.NET.dll第三方插件进行 ...

  6. 新装的centos怎样显示中文界面

    默认的显示英文界面,即使各种配置中都选择的chinese也没用,默认显示的还是英文. 要在终端输入 vim ~/.bashrc 编辑本用户配置文件 打开后最后一行加入 export LANG=&quo ...

  7. 《Redis 命令操作》

    一:Redis 的启动与关闭 - 关闭指定端口的 Redis - redis-cli -p 9200 shutdown - 开启 Redis - redis-server redis.config 二 ...

  8. npm 使用指南参考

    [阮一峰npm scripts基本教程] [rimraf 跨平台删除文件] [ts-loader 安装问题] [nvm 安装使用] [npm镜像的问题] [webpack 如何引入jquery]web ...

  9. 8、D8: Default interface methods are only supported starting with Android N (--min-api 24): void

    1.错误信息 升级完 Android N 后,有些项目运行起来报错信息大致如下: Default interface methods are only supported starting with ...

  10. 剑指offer-扑克牌顺子

    题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...