数据结构(3) -- 关于算法效率

简介: 数据结构(3) -- 关于算法效率

例子:


1dc618a0ed9580ce8bfa6facb208c08f.png

有2种写法:


最容易想到的方法:

//方式1: 比较low的写法
    private static double getF1(int n, double[] a, double x) {
        int i;
        double p = a[0];
        for (i = 1; i <= n; i++) {
            p += (a[i] * Math.pow(x, i));
        }
        return p;
    }


秦九韶算法

5d4c6812c8535adbb050f4ddf2e1bce8.png

//方式2: f (x) = a0 + x(a1 + x(…(an-1 + x(an))…))
    //秦九韶算法 结合律 从里往外算
    private static double getF2(int n, double[] a, double x) {
        int i ;
        double p = a[n];
        for (i = n; i > 0; i--) {
            p = a[i - 1] + x * p;
        }
        return p;
    }


测试:假设 n=9,x=1.1,a为10个数字的数组,存储的是0-10:


public static void main(String[] args) {
        int n = 9;
        double x = 1.1;
        double[] a = new double[10];
        for (int i = 0; i <= n; i++) {
            a[i] = (double) i;
        }
        long startTime = System.currentTimeMillis();
        System.out.println(startTime);
        double f1 = 0;
        for (int j=0;j<100000;j++){
             f1 = getF1(n, a, x);
        }
        System.out.println(f1);
        long endTime = System.currentTimeMillis();
        System.out.println(startTime);
        System.out.println(endTime - startTime);
        System.out.println("------");
        long startTime2 = System.currentTimeMillis();
        System.out.println("startTime2==" + startTime2);
        double f2 = 0;
        for (int j=0;j<100000;j++){
             f2 = getF2(n, a, x);
        }
        System.out.println(f2);
        long endTime2 = System.currentTimeMillis();
        System.out.println(endTime2);
        System.out.println(endTime2 - startTime2);
    }


因为我的是固态硬盘,执行一遍代码看不出来效果,循环执行100000遍,可以看到时间差别,差了一个数量级:

46a9d80a6e05e4e3b19d57a0ee70bcdf.png


这个例子说明:

46a9d80a6e05e4e3b19d57a0ee70bcdf.png



相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
25 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
30天前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
32 4
|
1月前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
19 0
数据结构与算法学习十四:常用排序算法总结和对比
|
1月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
29 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
1月前
|
机器学习/深度学习 存储 算法
【数据结构与算法基础】——算法复杂度
【数据结构与算法基础】——算法复杂度
|
1月前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
1月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
19 0
|
1月前
|
存储 算法 Java
数据结构和算法--分段树
数据结构和算法--分段树
16 0
|
1月前
|
算法
计科一二班算法数据结构实验9答案
计科一二班算法数据结构实验9答案
14 0