基于Python的顺序表实现一元多项式相加

2023-11-15

具体代码: 

from operator import itemgetter


class PolyList:
    def __init__(self):
        self.data = []

    def Add(self, e):
        self.data.append(e)

    def CreateList(self, fname):
        # 从fname文件中读取多项式数据并添加到data
        fin = open(fname, "r")
        n = int(fin.readline().strip())
        for i in range(n):
            p = fin.readline().strip().split()
            self.data.append([float(p[0]), int(p[1])])
        fin.close()

    def getsize(self):
        return len(self.data)

    def __getitem__(self, i):
        return self.data[i]

    def getdata(self):
        return self.data

    def Sort(self):
        self.data = sorted(self.data, key=itemgetter(1), reverse=True)

    def PolyAdd(self, B):  # 当前多项式和多项式B的相加运算
        C = PolyList()  # 新建结果多项式顺序表
        m = len(self.data)  # 多项式A的项数
        n = B.getsize()  # 多项式B的项数
        i, j = 0, 0
        while i < m and j < n:
            p, q = self.data[i], B[j]
            if p[1] > q[1]:  # 将较大指数的p项添加到C中
                C.Add(p)
                i += 1
            elif q[1] > p[1]:  # 将较大指数的q项添加到C中
                C.Add(q)
                j += 1
            elif q[0] + p[0] == 0:
                i += 1
                j += 1
            elif q[1] == p[1]:
                k = p[0] + q[0]
                C.Add([k, p[1]])
                i += 1
                j += 1
            else:
                while i < m:  # 将A余下的项添加到C中
                    p = self.data[i]
                    C.Add(p)
                    i += 1
                while j < n:  # 将B余下的项添加到C中
                    q = B[j]
                    C.Add(q)
                    j += 1
        return C


if __name__ == "__main__":
    fout = open("abc.out", "w+")

    p = PolyList()
    p.CreateList("abc1.in")

    print("第1个多项式:", end=" ", file=fout)
    print(p.getdata(), file=fout)

    p.Sort()

    print("排序后结果:", end=" ", file=fout)
    print(p.getdata(), file=fout)

    q = PolyList()
    q.CreateList("abc2.in")

    print("第2个多项式:", end=" ", file=fout)
    print(q.getdata(), file=fout)

    q.Sort()

    print("排序后结果:", end=" ", file=fout)
    print(q.getdata(), file=fout)

    r = p.PolyAdd(q)
    print("相加多项式:", end=" ", file=fout)
    print(r.getdata(), file=fout)

    fout.close()

读取文件abc1.in 和 abc2.in

abc1.in:

4
2 3
3.2 5
-6 1
10 1

abc2.in

6
6 1
1.8 5
-2 3
1 2
-2.5 4
-5 1

 最后输出文件abc.out

第1个多项式: [[2.0, 3], [3.2, 5], [-6.0, 1], [10.0, 1]]
排序后结果: [[3.2, 5], [2.0, 3], [-6.0, 1], [10.0, 1]]
第2个多项式: [[6.0, 1], [1.8, 5], [-2.0, 3], [1.0, 2], [-2.5, 4], [-5.0, 1]]
排序后结果: [[1.8, 5], [-2.5, 4], [-2.0, 3], [1.0, 2], [6.0, 1], [-5.0, 1]]
相加多项式: [[5.0, 5], [-2.5, 4], [1.0, 2], [5.0, 1]]

 解释:例如abc1.in中的“2 3”就是2X^3 ,前面的“2”是系数,后面的“3”是X的指数

参考的是李春葆教授写的《数据结构教程》,在复现的过程中发现书上的案例代码貌似有误 ,总是得不到案例的结果,程序会进入死循环,最后改动了PolyAdd()函数里有关判断的部分。

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

基于Python的顺序表实现一元多项式相加 的相关文章

随机推荐

  • 数据类型与printf,scanf函数

    printf与scanf函数 printf函数是一个格式化输出函数 scanf 函数则是一个输入函数 其一般的调用格式 scanf 格式控制 地址列表 其中格式控制一般是双引号中间加一些字符 由 与格式符组成 用于控制输入的格式 比如 d
  • 内存条 udimm rdimm 等和 ECC 功能

    RDIMM registered DIMM Registered Dual In line Memory Module 带寄存器的双线内存模块 表示控制器输出的地址和控制信号经过Reg寄存后输出到DRAM芯片 控制器输出的时钟信号经过PLL
  • MySQL 查询语句大全

    目录 基础查询 直接查询 AS起别名 去重 复 查询 条件查询 算术运算符查询 逻辑运算符查询 正则表达式查询 模糊查询 范围查询 是否非空判断查询 排序查询 限制查询 分页查询 随机查询 分组查询 HAVING 高级查询 子查询 嵌套查询
  • vs显示行号

    工具 gt 选项 gt 文本编译器 gt 然后选择对应的编程语言 gt 在右侧 行号前的对勾打上确定即可
  • 【知识分享】Modbus通信协议详解

    一 协议 这里分两部分 Modbus和协议 首先什么是协议 百度解释下就是 意思是共同计议 协商 经过谈判 协商而制定的共同承认 共同遵守的文件 比如大学毕业找工作的时候 一般要签一份叫 三方协议 的 三方指自己 校方 企业 这份协议里规定
  • kali学习4——使用msfvenom制作exe木马

    使用msfvenom制作exe木马文件 1 msfvenom msfvenom是msfpayload msfencode的结合体 使用msfvenom制作木马的思路是 木马在目标机上执行后 向本机发送信息 而本机则需要开启监听状态 收到信息
  • 2021级新生个人训练赛第38场

    问题 A chicken 题目描述 小 x 非常喜欢小鸡翅 他得知 NSC 超市为了吸引顾客 举行了如下的活动 一旦有顾客在其他超市找到更便宜的小鸡翅 NSC 超市将免费送给顾客 1000g 小鸡翅 小 x 为了尽可能的省钱 走遍了各大超市
  • java Unreachable错误

    Unreachable code 错误 不可达代码 比如在循环的break或者return后面的代码就是不可达代码 因为执行它们之前就已经跳出循环了 只要把这段代码移到break return之前就好了 参考https blog csdn
  • np.mean()和np.std()函数

    一 np mean 函数定义 numpy mean a axis dtype out keepdims mean 函数功能 求取均值 经常操作的参数为axis 以m n矩阵举例 axis 不设置值 对 m n 个数求均值 返回一个实数 ax
  • kibana启动问题:Kibana server is not ready yet

    第一点 KB ES版本不一致 网上大部分都是这么说的 解决方法 把KB和ES版本调整为统一版本 第二点 kibana yml中配置有问题 通过查看日志 发现了Error No Living connections的问题 解决方法 将配置文件
  • Vue3通透教程【八】获取DOM、操作组件

    文章目录 写在前面 Vue2 ref 的使用 Vue3获取DOM Vue3操作组件 写在最后 写在前面 专栏介绍 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章 应粉丝要求开始更新 Vue3 的相关技术文章 Vue 框架目前的地位
  • 【Linux】计算机操作系统和软硬件体系结构

    目录 1 冯诺依曼体系结构 1 1 中央处理器 CPU 2 操作系统 OS 2 1 操作系统的概念 2 2 操作系统的作用 2 3 操作系统如何进行管理 2 3 1 操作系统通过分级管理的方式 实现对整体的管理 2 3 2 管理的本质是对数
  • 如何使用chrome 浏览器自带截屏?

    1 ctrl shift c 2 ctrl shift p 3 输入 capture 4 选择capture full size screenshot 实现截取整个网页
  • enscape各种材质参数_它来了!Enscape专属素材库!

    ENSCAPE素材库 近两年风靡整个设计的渲染器 一款实时渲染软件Enscape 凭借入门低 成效快 效果逼真 从渲染界脱颖而出 用其他渲染器1 的时间渲出VRAY等老大哥级别90 的效果 作为建筑师的你会怎么选择呢 简单的分析了下渲染界最
  • MySQL connector/C++ 连接mysql效率低下解决

    这个问题 说解决也不算是被解决了 只能是让数据库插入的时候不会有像直接插入一样有那么多的问题了 我的解决方法是 开启mysql的事务 开始我也不知道是不是我的mysql配置优化的问题 WAMP统一安装 无限默认下一步的 在用PHP测试的时候
  • int与byte[]之间进行转换

    如何将int与byte 之间转换 int类型在内存中占4个字节 采用补码方式存储 而一个byte占一个字节 下面有两种方法进行转换 package cn fh vertxboot utils description int与Byte数组转换
  • 苹果app上架流程之傻瓜式教程剖析

    iOS开发者开发好一款APP之后 进行内测后没问题 下一步就是要上架AppStore了 一些开发者不知道该如何上架AppStore 下面 我们来说说iOS上架流程 以及如何快速上架AppStore 工具 1 iOS开发者账号 2 App U
  • Linux内存泄露案例分析和内存管理分享

    一 问题 近期我们运维同事接到线上LB 负载均衡 服务内存报警 运维同事反馈说LB集群有部分机器的内存使用率超过80 有的甚至超过90 而且内存使用率还再不停的增长 接到内存报警的消息 让整个团队都比较紧张 我们团队负责的LB服务是零售 物
  • Xamarin.Forms(移动应用)轮盘抽签软件(Android)

    该文章由我前面的文章https blog csdn net dabo 520 article details 129760956 spm 1001 2014 3001 5501改编而来 它是程序的核心 具体详细可自行前往观看 1 软件开发准
  • 基于Python的顺序表实现一元多项式相加

    具体代码 from operator import itemgetter class PolyList def init self self data def Add self e self data append e def Create