【问题标题】:Brute-Force polynomial algorithm in javajava中的蛮力多项式算法
【发布时间】:2013-11-29 13:06:31
【问题描述】:

我需要增强蛮力多项式评估算法。我收到了 x 的最高幂(n 的值),多项式 (a, b, c, ..) 的所有元素的系数值作为整数数组列表。但是我不能在 java 上应用这个算法: f(x) = ax^n + bx^(n-1) + cx^(n-3)+... + z 我怎样才能在 java 上应用这个多项式?它的算法是什么?有什么帮助吗?

package brute.force;

import java.util.*;
import java.util.Scanner;

public class BruteForce {

    public static void main(String[] args) {
        Scanner scan = new Scanner (System.in);
        ArrayList<Integer> coefficients = new ArrayList<>();
        int powerOfX, x;

        System.out.print("Enter integers please ");
        System.out.println("(EOF or non-integer to terminate): ");

        while(scan.hasNextInt()){
         coefficients.add(scan.nextInt());
        }

        Integer [] nums = coefficients.toArray(new Integer[0]);
        for(int i = 0; i < nums.length; i++){
            System.out.println(nums[i]);
        }
    }   
}

【问题讨论】:

  • 您是在询问算法还是如何在 java 中获取输入。
  • 您的具体问题是什么?
  • 我在问算法,我得到了上面的所有输入。

标签: java algorithm brute-force


【解决方案1】:

你需要用下面的迭代来计算它:

    double result = 0;
    Integer [] nums = coefficients.toArray(new Integer[0]);
    for(int i = 0; i < nums.length; i++){
        result = result *x + nums[i];
    }
    System.out.println(result);

它被称为霍纳法。 以四次多项式为例,这种方法的好处是:

f(x) = ax^3 + bx^2 + cx + z

转化为:

f(x) = ((a)*x + b)*x + c)*x + z

【讨论】:

  • 这很好,但你没有使用 x 值的幂。如何通过 x 的幂限制算法?实际上,您不必使用 x 的幂,因为它会根据系数继续运行,但我想使用 x 的幂进行检查。
【解决方案2】:

你是说这个吗?

double result = 0;
for(int i = 0; i < nums.length; i++) {
   result += nums[i] * Math.pow(x, i);  // nums has coefficients in increasing order
}

【讨论】:

    【解决方案3】:

    您可以使用Horner's method 以计算效率高的形式计算多项式。

    user987339 发布了一个 Java 实现。

    【讨论】:

    • 感谢您留下作者的名字!
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2012-07-27
    • 2015-06-22
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多