c - 如何在没有嵌套循环的情况下实现三项式展开。

标签 c algorithm

我正在编写方程式简化程序。在这个程序中想用到二项式和三项式定理。

使用二项式展开:

(x+y)^r

求和(k -> r) x^[r-k] y^[k],

其中 k 为 0,r 为二项式的次数。

我可以这样做:

  for (k=0; k<=r; k++) {
      x_degree=r-k;
      y_degree=k;  
  } 

否则,如果我想实现三项式定理,我应该满足形式约束:

(a+b+c)^n

Sum(n 选择 i, j, k) a^i b^j c^k,

其中 n 是三项式的次数,i+j+k=n。

我想了一会儿,但我想不出比遍历所有可能的组合更好的方法,如下所示:

for (int i=0; i<=n; i++)
    for (int j=0; j<=n; j++)
        for (int k=0; k<=n; k++) {
            if((i+j+k)==n) {
                find_coefficient(i,j,k);
                set_degree_values(i,j,k);
                proceed();
            } 
        } 

所以我的问题是:如何在不遍历所有可能的度数组合的情况下实现三项式展开?

谢谢。

最佳答案

以四次为例,三个变量的幂可以列为

004, 013, 022, 031, 040, 
103, 112, 121, 130, 
202, 211, 220,
301, 310, 
400

逻辑是递减最右边的数字并递增它左边的数字。当后者到达 r 时,您将其左侧的数字递增并重置右侧数字(这是修改后的进位操作)。

这个方案可以通过n 计数器来实现,并推广到多项式定理。系数也可以递增计算,我不会感到惊讶。 (实际上,计数器将模拟嵌套循环。)

关于c - 如何在没有嵌套循环的情况下实现三项式展开。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39473742/

相关文章:

c++ - 在主要 C/C++ 编译器生成的代码中注册分配规则

algorithm - 哈希 - 它有什么作用?

algorithm - 如何使用AI找到点之间的最短路线?

c - 程序在编码之前如何进行测试?

c - 用于简单 C dll 的良好 IDE/编译器

c - 使用 GIOChannel 清空管道

对 #if 表达式感到困惑

c - 使用 "array name"和 "address-of array name"打印数组的地址

javascript - 意识到 Javascript 表示数组的独特方式的排序

algorithm - 在 Neo4j 中查找通过给定节点的所有简单循环