天梯题集——多项式A除以B(多项式除法,递归与循环的效率比较)

2023-11-17

多项式A除以B

t1
t2


多项式除法
这里就不展开介绍多项式除法,只需将多项式看成一个整体就类似于整数除法。

(x3-1) / (x-1) = x2+x+1
多项式除法的演示图多项式除法


解题思路:模拟 A / B 多项式除法

方案一:递归
#include<bits/stdc++.h>
using namespace std;
double Q[1000010], R[1000010];
double a[1000010], b[1000010];
int q[1000010], index_b=0;

void f(int max_a, int max_b){
	double d = a[max_a]/b[max_b];
	
	for(int i=0; i<index_b; i++)
		a[q[i]+max_a-max_b] -= b[q[i]]*d;
	
	Q[max_a-max_b]=d;
	if(max_a==max_b){
		memcpy(R, a, sizeof(a));
		return;
	}
	max_a--;
	while(max_a>max_b&&fabs(a[max_a])<1e-8) max_a--;
	f(max_a, max_b);
	return;
}

int main(){
	int max_a=0, max_b=0;
	int index;
	cin>>index;
	for(int i=0; i<index; i++){
		int x, y;
		cin>>x>>y;
		a[x] = y;
		max_a = max(x, max_a);
	}
	cin>>index_b;	//主要是想剪枝
	for(int i=0; i<index_b; i++){
		int x, y;
		cin>>x>>y;
		q[i] = x;	//主要是想剪枝
		b[x] = y;
		max_b = max(x, max_b);
	}
	f(max_a, max_b);
	
	//统计个数 
	int cnt_q=0, cnt_r=0;
	for(int i=max_a; i>=0; i--){
		if(abs(Q[i])>0.0445) cnt_q++;
		if(abs(R[i])>0.0445) cnt_r++;
	}
	
	//输出 
	if(cnt_q!=0){
		cout<<cnt_q;
		for(int i=max_a-max_b; i>=0; i--)
			if(abs(Q[i])>0.0445)
				printf(" %d %.1lf", i, Q[i]);
	}
	else
		cout<<"0 0 0.0";
	cout<<endl;
	
	if(cnt_r!=0){
		cout<<cnt_r;
		for(int i=max_b-1; i>=0; i--)
			if(abs(R[i])>0.0445)
				printf(" %d %.1lf", i, R[i]);
	}
	else
		cout<<"0 0 0.0";
	
	return 0;
} 

运行结果
递归会出现超时,效率没能达到题目要求。

方案二:循环
#include<bits/stdc++.h>
using namespace std;
double Q[1000010], R[1000010];
double a[1000010], b[1000010];
const double eps = 1e-8;

void slove(int max_a, int max_b){
	for(int i=max_a; i>=max_b; i--){
		if(fabs(a[i]) > eps){
			double c = a[i]/b[max_b];   
			Q[i-max_b] = c;
			
			for(int j=max_b; j>=0; j--){
				if(fabs(b[j])>eps)
					a[i-max_b+j] -= c * b[j];
			}
		}
	}
	memcpy(R, a, sizeof(a));
	return;
}

int main(){
	int max_a=0, max_b=0, x, y;
	int index;
	cin>>index;
	for(int i=0; i<index; i++){
		cin>>x>>y;
		a[x] = y;
		max_a = max(x, max_a);
	}
	cin>>index;
	for(int i=0; i<index; i++){
		cin>>x>>y;
		b[x] = y;
		max_b = max(x, max_b);
	}
	slove(max_a, max_b);
	
	//统计个数 
	int cnt_q=0, cnt_r=0;
	for(int i=max_a; i>=0; i--){
		if(abs(Q[i])>0.0445) cnt_q++;
		if(abs(R[i])>0.0445) cnt_r++;
	}
	
	//输出 
	if(cnt_q!=0){
		cout<<cnt_q;
		for(int i=max_a-max_b; i>=0; i--)
			if(abs(Q[i])>0.0445)
				printf(" %d %.1lf", i, Q[i]);
	}
	else
		cout<<"0 0 0.0";
	cout<<endl;
	
	if(cnt_r!=0){
		cout<<cnt_r;
		for(int i=max_b-1; i>=0; i--)
			if(abs(R[i])>0.0445)
				printf(" %d %.1lf", i, R[i]);
	}
	else
		cout<<"0 0 0.0";
	
	return 0;
} 

运行结果
循环能通过全部样例。


总结

在循环和递归的比较中,循环效率更高,但我依稀记得有人曾说过递归都能用循环实现,只是会更加复杂、繁琐。
循环和递归各有所长,好好把握吧…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

天梯题集——多项式A除以B(多项式除法,递归与循环的效率比较) 的相关文章

随机推荐

  • LeetCode64. 最小路径和

    题目大意 求出从网络左上角到右下角的一条代价最小的路径和 题目分析 使用动态规划 求出左上角到网络中每个点的代价最小路径和 假设当前要求的是point i j 点 那么它的值就应该是从左上角到它上面那个点point i 1 j 的路径和 与
  • 【技术应用】Qt Creator使用体会与小技巧

    Qt Creator是Qt官方的IDE 这个IDE为Qt编程人员提供了一个完整的开发环境 当然了 这个IDE是用Qt写的 也是免费的 这个IDE真正的编译部分使用了MinGW gcc compiler 也就是说 这个IDE主要的作用是协助开
  • 教务管理系统(免费源码获取)

    项目介绍 本系统使用springboot mybatis plus shiro lombok等技术 使用json传递数据 使用加盐加密对数据进行保存 前端页面使用vue搭建并打包放在static文件夹中 使用token保存当前用户 当用户登
  • chrome浏览器network报错:ERR_CERT_AUTHORITY_INVALID

    转载请注明作者 独孤尚良dugushangliang 出处 https blog csdn net dugushangliang article details 85275319 在访问局域网的某网址时 提示 您的连接不是私密连接 错误代码
  • 算法在ros中应用_烟火检测算法——中伟视界人工智能算法AI在智慧工地、石油中的应用_腾讯新闻...

    烟火检测算法功能说明及实现原理等 一 软件概述 视频智能分析基于目前先进的深度学习算法 通过大量的项目现场素材训练模型 通过本站大量采集的工作服素材 高精度的识别人 安全帽 工作服等识别 本项目主要两方面的算法 一是识别类的 二是行为分析
  • WPF中Datagrid其中一列使用图片显示

    实现效果 实现遇到的问题 当时想要实现如图所示 合格率 所示的效果 我的第一个想法就是使用wpf的转换器 可是接下来问题来了 我这个是通过数值来判断是否合格 什么控件可以做到既可以绑定图片类型的 又可以绑定数值类型的 还有此时的当值绑定肯定
  • 段、页、页框、页表、页表项

    段 页 页框 页表 页表项 分页式虚拟内存 页 页框 页表 页表项 段页式虚拟内存 分段 分页 段 段表 段表项 页 页框 页表 页表项 分页式虚拟内存 页 页框 页表 页表项 页 进程中的块 进程被分成许多大小相同的块 页号 页框 内存中
  • TS2769: Property 'xxx' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttribute...

    用TypeScript开发React项目 在父子组件间传值时发生错误提示 class Page extends React Component render return div div
  • vue组件利用css var(--变量)实现动态修改伪类属性(::before、::after)

    如图所示 1 我们可以利用此属性实现vue组件动态传值 修改例如 before after等 伪类的背景色 背景图等属性值 因为vue利用无法直接在css中使用data里的变量 利用var 变量名 以及style中定义变量 其实此步是模仿
  • Coordinate attention,SE,CBAM

    1 SE 因为普通卷积难以建模信道关系 SE考虑通道的相互依赖关系增强模型对信息通道的敏感性 同时全局平均池化可以帮助模型捕获全局信息 然而SE只考虑了内部通道信息而忽略了位置信息的重要性 输入X首先经过全局平均池化 然后经过全连接层来捕获
  • 静态类和动态类的区别和使用

    1 静态类中的静态方法可以通过类名直接调用静态方法 不需要实例化对象 但是无法和Spring容器中的bean进行交互 例如 Slf4j public class ExcelUtil public static
  • 动态链接

    动态链接 命令 gcc static 产生静态库 shared 产生共享库 readelf d 查看 dynamic段的内容 ldd 查看一个程序主模块或一个共享库依赖于哪些共享库 一 静态链接和动态链接的优缺点 静态链接 空间的浪费 静态
  • Arduino结合HX711实现8路信号采集称重

    说明 使用两块Arduino实现8路Sensor同时采集 并输出控制信号 写作目的主要是为了作为学习笔记 Arduino Sensor接线图 1 双机通讯连线图 2 HX711和Sensor的连线图 3 将8个Sensor的SCK全部接到r
  • 键盘输入_bp

    依据惯例 仍然感谢出处 来自程序员的暴击 https space bilibili com 128373173 学习了下 这个说了个什么呢 人到达灯附近 显示提示文字 按F键开灯和关灯切换 远离灯时 提示文字消失 不能切换灯的切换开关状态
  • QT编译报错无法解析的外部符号

    QT编译报错无法解析的外部符号 特征 头文件 有几个槽函数 提示有多少个无法解析的外部符号 注释掉宏Q OBJECT 可以编译通过 可能原因 1 对应的cpp文件没有加入项目中 2 cpp文件 右键属性 为 自定义工具 没有进行编译 修改为
  • 华为、华三、锐捷、飞塔、山石的抓包命令

    一 华为的抓包命令 1 基本概念 华为的抓包行为称之为镜像端口 也就是说将需要抓取的接口上 称为镜像端口 的流量复制一份到另一个接口上 工程师进行流量观察的端口 称为观察端口 如下图所示 2 华为镜像端口分类 1 本地镜像端口 也就是观察端
  • Django框架:优缺点、实用场景及与Flask、FastAPI的对比

    Django是一个使用Python语言编写的高级Web框架 它提供了快速开发 可重用和可维护的Web应用程序所需的一切组件 在本文中 我们将探讨Django的get和post请求 优缺点 实用场景以及与Flask FastAPI的对比 Dj
  • windows中如何将收藏夹里的下载链接加入到开始

    windows中如何将收藏夹里的下载链接加入到开始 以windows 7为例 设置方法如下 1 右击工具栏 属性 2 开始菜单 自定义 下拉至下载 点中显示为链接 确定 3 可以看到 下载已经看到了
  • C# 泛型详解(泛型类,方法,接口,委托,约束,反射 )

    目录 一 什么是泛型 二 为什么要用泛型 三 泛型和Object类型的区别 四 泛型类 五 泛型方法 六 泛型接口 七 泛型委托 八 泛型约束 九 泛型配合反射 结束 一 什么是泛型 先看一段介绍 泛型 Generic 是将不确定的类型预先
  • 天梯题集——多项式A除以B(多项式除法,递归与循环的效率比较)

    多项式A除以B 多项式除法 这里就不展开介绍多项式除法 只需将多项式看成一个整体就类似于整数除法 x3 1 x 1 x2 x 1 多项式除法的演示图 解题思路 模拟 A B 多项式除法 方案一 递归 include