首页 > 其他分享 >数据结构学习随笔chapter1_基础

数据结构学习随笔chapter1_基础

时间:2023-02-27 18:35:02浏览次数:31  
标签:随笔 递归 int double chapter1 数据结构 方法 public

这是在学习浙大陈越老师数据结构课程的时候做的笔记,第一次写博客,希望坚持下去!刚开始可能笔记记的比较笨,以后慢慢就精炼一点。看起来陈老师是用c写的,我想用java来写,但是java语法还没怎么学,如果有人看到的话,尤其是看到哪里有问题有比较笨比的地方的话,希望可以帮我指正,感谢!!!

1.1 关于数据组织

解决问题方法的效率,跟数据的组织方式有关。

1.2 关于空间使用

eg: 实现函数PrintN,传入正整数N,顺序打印1到N

方法:1.循环 2.递归

   循环需要一个虚拟变量,递归不需要;但是当输入为100,000时,递归方法罢工了...

           递归代码简洁,但是对空间占用可能比较恐怖。

解决问题方法的效率,跟空间的利用效率有关

1.3 关于算法效率

eg: 写程序计算给定多项式在给定点x处的值  f(x) = a0 + a1x +...+ an-1xn-1 + anxn 

方法:1.直接逐项计算  2.秦九韶算法

 

package Chapter1;

public class Polynomial {
    // Loop
    public static double loopmethod(double[] a, double x){
        double p = a[0];
        for(int i = 1; i<= a.length-1; i++){
            p += a[i]*Math.pow(x,i);
        }
        return p;
    }
    // 秦九韶算法
    public static double Qmethod(double[] a, double x){
        int n = a.length-1;  // n is the degree of the polynomial
        double p = a[n];
        for(int i = n; i>0; i--){
            p = a[i-1] + x*p;
        }
        return p;
    }

    public static void main(String[] args) {

        int MaxK = 100000000;  // 方法重复调用次数
        double[] a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

        long startTime = System.currentTimeMillis();
        for (int i = 1; i <= MaxK; i++) {
            loopmethod(a, 1.1);
        }
        long endTime = System.currentTimeMillis();
        double usedTime = (endTime - startTime)/1000;
        System.out.print("\nLoop method cost ");
        System.out.print(usedTime);
        System.out.print("\nThe result of loop is");
        System.out.print(loopmethod(a, 1.1));

        long startTime2 = System.currentTimeMillis();
        for (int i = 1; i <= MaxK; i++) {
            Qmethod(a, 1.1);
        }
        long endTime2 = System.currentTimeMillis();
        double usedTime2 = (endTime2 - startTime2)/1000;
        System.out.print("\nQJS method cost ");
        System.out.print(usedTime2);
        System.out.print("\nThe result of QJS is");
        System.out.print(Qmethod(a, 1.1));
    }
}


/*
1. 原本是在方法内部计算usedtime但是计算出两个方法运行时间是0,因为程序太快惹
   解决方案:可以让被测函数重复运行多次,使得测出的总的时钟打点间隔充分长,最后计算平均每次运行时间。
           哎再改一下...把测时步骤改到main里然后再加循环多运行几次,运行了1e8次,秦九韶算法果然快很多。
           计时可以用currentTimeMillis()或nanoTime()
2. 本来写的int MaxK = 1e8,结果报错 需要的数据类型为int 提供的数据类型为double;
   原来是浮点型数字才能用科学计数法表示,学到了
 */

计算机中乘法时间成本>加法

解决问题方法的效率,跟算法的巧妙程度有关。

 

chapter1未完待续...

标签:随笔,递归,int,double,chapter1,数据结构,方法,public
From: https://www.cnblogs.com/QZMshining/p/17159805.html

相关文章

  • 数据结构刷题2023.02.27小记
    单循环链表A从表中任一结点出发都能扫描到整个链表B不再需要头指针了C在进行插入、删除操作时,能更好地保证链表不断开D已知某个结点的位置后,能够容易找到它的直接......
  • JS入门随笔
    1.DOM简单实例1.通过onclick="changeImage()"调用changeImage()方法2.通过element=document.getElementById('myimage')获取id="myimage"控件的值3.element.src.match("......
  • 数据结构(借鉴408)-高阶算法的应用
    数据结构高阶算法的应用算法分析和解题的一般套路算法解法暴力解:枚举解法可行解:目标解法最优解:缘分解法算法解题得分套路结构体定义算法思想和算法步骤......
  • [数据结构] 单链表
    一、C语言实现1.1结构体定义typedefintElementType;//定义一个链表结构体structListNode{ElementTypeval;structListNode*next;};1.2相关方法......
  • 数据结构与算法概述
     一、数据结构与算法简介从广义上讲,数据结构是指一组数据的存储结构。算法是操作数据的一组方法。从狭义上讲,数据结构与算法是指某些著名的数据结构和算法,比如数组、列......
  • 02_03_Java语音进阶||day03_数据结构(集合相关)、List、Set、可变参数、Collections工具
    第一章数据结构1.1数据结构的作用Java是面向对象的语音,好似自动挡汽车,c语音手动挡,数据结构?数据结构:是变速箱的工作原理。你完全可以不懂变速箱怎样工作,就可以把自动挡车从......
  • 数据结构(借鉴408)-数组
    数据结构数组1.多维数组的存储2.特殊矩阵(数组)的压缩存储3.数组的应用定义与地址计算数组是由n(n>1)个具有相同数据类型的数据元素a1,a2,...,an组成的有序序列,且该......
  • 数据结构(严蔚敏版)——第一章《绪论》
    第一章绪论1.1、基本概念1.1.1、数据、数据元素、数据项、数据对象数据(Data):是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。数值型数据......
  • Java刷题常用的数据结构总结
    (Java刷题常用的数据结构总结)1.基础运算//int型相关操作Integer.INT_MAX;//int型最大值Integer.INT_MIN;//int型最小值longname;//注意:没有c语言里面的longlong(i......
  • 数据结构(借鉴408)-排序
    数据结构排序分冶稳定性时间复杂度空间复杂度1.插入类排序直接插入排序折半插入排序希尔排序分组(间距d--),直接插入排序2.交换类排序起泡排序快速排序......