加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 随机搜索lambda表达式

发布时间:2020-12-15 01:09:17 所属栏目:Java 来源:网络整理
导读:感谢您的帮助和分享. 我的问题是关于随机搜索.该技术用于通过一般数学计算中的规定量的cicle进行数据的近似.请参阅以下代码,我尝试将其降至最低.我的期望是将此代码设置为lambda表达式,for循环,我希望它具有最佳性能.我有一些想法,但我不确定我是否充分利用

感谢您的帮助和分享.

我的问题是关于随机搜索.该技术用于通过一般数学计算中的规定量的cicle进行数据的近似.请参阅以下代码,我尝试将其降至最低.我的期望是将此代码设置为lambda表达式,for循环,我希望它具有最佳性能.我有一些想法,但我不确定我是否充分利用它.

package stochasticsearch;
import java.util.Random;
public class StochasticSearch {
    public static double f(double x) {
        return -(x - 1) * (x - 1) + 2;
    }
    public static void main(String[] args) {
        final Random random = new Random();
        double startPointX = 0;
        double max = f(startPointX);
        long begin = System.currentTimeMillis();
        for (int i = 0; i < 1000000000; i++) {
            double index = 2 * random.nextDouble();
            if (f(index) > max) {
                max = f(index);
            }
        }
        System.out.println("Elapsed time: " + (System.currentTimeMillis() - begin));
        System.out.println("Maximum value y=f(x) is " + max);
    }
}

谢谢,祝你有愉快的一天.

最佳答案
你的代码在我的系统上在23秒内完成,我能够修改它,所以它需要不到2秒.这是我发现的:

>当你可以使用ThreadLocalRandom时,你正在使用Random;此开关导致相对较大的加速.
>在某些情况下,你应该在你的for循环中计算两次f(索引),而每次迭代只计算一次.
>因为您正在迭代大范围的值,所以您可以使用并行流;这导致相对大的加速.
>您在f中为每个结果添加2,因此最好在计算最大值后一次添加它.

public static double f(double x) {
    double y = x - 1;
    return -y * y;
}

public static void main(String[] args) {
    final ThreadLocalRandom random = ThreadLocalRandom.current();

    long begin = System.currentTimeMillis();

    double max = IntStream.range(0,1_000_000_000)
                          .parallel()
                          .mapToDouble(i -> f(random.nextDouble() * 2))
                          .max()
                          .orElse(f(0)) + 2;

    System.out.println("Elapsed time: " + (System.currentTimeMillis() - begin));
    System.out.println("Maximum value y=f(x) is " + max);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读