c - 按最大次数顺序生成多项式

标签 c algorithm

我无法找出执行以下操作的简洁方法(我正在使用 C):

给定多个变量 n 和最大次数 d,我想生成相应的多项式。

例如,如果 n = 4,并且 d = 3,我想生成以下内容: x4 x3 x2 + x4 x3 x1 + x4 x2 x1 + x3 x2 x1 + x4 x3 + x4 x2 + x4 x1 + x3 x2 + x3 x1 + x2 x1 + x4 + x3 + x2 + x1

每个 xn 都是一个不同的变量。多项式从最大次数 3 开始,遍历所有这些单项式,然后遍历所有二次项,最后是线性项。这应该适用于任何正 n 和 d。

我可以使用一些嵌套的 while 循环和整数来对其进行硬编码,以跟踪每个变量,这样我就可以使其工作。但我需要概括,而且我不知道如何做到这一点,至少在没有大量 while 或 for 循环的情况下是这样。

所以,我的问题是,以一种非常通用的方式以正确的顺序生成这些变量数字的好方法是什么?谢谢。

最佳答案

您似乎需要 power set 的过滤子集(所有子集的集合)变量,按程度过滤。

Rosetta Code有两个 C 示例来生成幂集。应该很容易修改它以将其限制为给定顺序的子集。 (我假设您不想要重复的术语,例如 x2x4^2。)

对于您的示例,起始集是 {x1, x2, x3, x4},多项式的项由 3 阶或更低阶的子集形成。

这个问题类似于How to find all possible subsets of a given array?

关于c - 按最大次数顺序生成多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4824095/

相关文章:

c - 在最坏的情况下,在排序的链表中搜索一个元素需要进行多少次比较?

c - 段错误——无法理解错误的原因

c - 如何在 C 中将一个字符串的最后 n 个字符与另一个字符串进行比较

arrays - 排序数组中的最低成本路径

c++ - (C++) K-Means 聚类问题

algorithm - 基数排序 : LSD versus MSD versions

c - 拆分字符串并存储到数组中(在 C 中)

c - 如何检索结构数组的地址?

java - 如何使用以下代码基于实例变量按升序对对象数组进行排序

algorithm - 如何检测文件是否已更改?