• 数据结构


    数据结构和算法之间到底是什么关系?

    编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构和算法的人也能编程。但是如果一个开车的人懂变速箱的原理,比如降低速度来获得更大的牵引力,或者通过降低牵引力来获得更快的行驶速度。那么爬坡时使用1档,便可以获得更大的牵引力;下坡时便使用低档限制车的行驶速度。回到编程而言,比如将一个班级的学生名字要临时存储在内存中,你会选择什么数据结构来存储,数组还是ArrayList,或者HashSet,或者别的数据结构。如果不懂数据结构的,可能随便选择一个容器来存储,也能完成所有的功能,但是后期如果随着学生数据量的增多,随便选择的数据结构肯定会存在性能问题,而一个懂数据结构和算法的人,在实际编程中会选择适当的数据结构来解决相应的问题,会极大的提高程序的性能。

    我自己的理解是:算法是解决问题的方法,而使用不同的数据结构导致不同的解决方法,对于特定的问题使用特定的数据结构的算法有更好的效率,学数据结构和算法就是为了指导在面对不同问题时,能找到最佳的数据结构实现最优算法。衡量算法的好坏用时间和空间复杂度表示(O记法),数据结构影响的就是时间复杂度和空间复杂度。

    结合我自己的经验慢慢地理解数据结构,可能会有不完备的地方,望不断完善

    1. 从宏观角度/单纯使用数据结构角度/JAVA已经写好了的数据结构角度来看:

    单纯地考虑使用数据结构编程时,只需要了解不同数据结构的特点,适合的使用场景就足够了,Java中已经定义好了这些数据结构的方法,直接调用就行。

    此处接下来要讲不同数据结构的特点和使用:

     HashMap的基本原理:https://www.cnblogs.com/yuanblog/p/4441017.html

    “字典”这一概念,hashcode相当于给value加了个索引,拿着索引去查速度很快,就像通过字典最前面的索引去查字一样方便。

    2. 从最基本的数据结构来实现其他数据结构的角度/自主构建数据结构(一般限于基础的几个数据结构)

    数组Arrays本身就是一种最简单的线性数据结构,可以根据需要改造成其他任何高级数据结构,比如Arraylist,链表,堆(二叉树),栈,队列,hashmap等等

    然后又了解可以用链表更快地实现栈和队列。

    这个角度更多的是从最基本的数据结构数组出发实现其他数据结构,考察的是基础的编程思想和能力,经常在算法考试题中出现。

  • 相关阅读:
    一个iOS程序员眼中的跨域问题
    web 大规模并发访问的解决方案
    修改Capfile,在正式环境不再使用migration修改数据库
    关于 CAS 不能登录的问题
    老项目占地比较大的原因是release文件夹里有.git 目录
    capistrano3.4.0部署不能自动登录
    capistrano/blob/v3.4.0部署
    私有方法的查找方式
    开启关闭功能没有生效的原因
    找不到Settings
  • 原文地址:https://www.cnblogs.com/xuhaojun/p/9119779.html
Copyright © 2020-2023  润新知