跳到主要内容

数据结构和算法分析

一般来说,用计算机解决一个具体问题时,大致需要经过下列几个步骤:

首先要从具体问题抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编出程序,进行测试,调整至得到最终解答.寻求数学模型的市值是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述.。用数学的语言加以描述.

气球梁架结构中应力的数学模型为线性方程组,预报人口增长情况的数学模型为微分方程,然后更多的非数值计算问题无法用数学方程加以描述。

数据结构和算法介绍

算法

比如一些常见的鸡兔同笼问题,顺风逆风行驶问题,这些问题,都需要一个解决方案,这个解决方案就是算法。

算法是解题方案的准确而完整的描述,是一系列解决问题的清晰指令;算法代表着用系统的方法描述解决问题的策略机制。就是说,能够对一定规范的输入,在有限的时间内获的想要的输出。如果一个算法有缺陷,或者不适合某一个问题,那么执行这个算法就永远不会得到正确的结果。 不同的算法可能用不同的时间、不同的空间(计算机中指代内存或者硬盘【交换文件】)来完成同一件任务,解决同一个需求。

所以说,一个算法是否优秀,总是要考虑两个方便,占用时间和占用的空间。他有一个专业概念,叫做时间复杂度或空间复杂度。

算法总的来说,是一个独立存在的一种解决问题的方法和指导思想。

对算法而言,怎么实现一点都不重要,重要的是指导思想。

就编程算法而言,算法可以用很多门语言去实现,比如大家熟悉的Java,C,JavaScript等等,不过一般尽可能的用具有引用指针等一类的语言时间,这句话可以慢慢体会。

数据结构

数据结构就是把数据组织起来,为了更方便的使用数据,为了解决某个问题,需要把数据存起来,然后根据数据的存储方式不同通过设计不同的算法进行处理,那么也就证明了,数据的存储方式不同,那么也就需要不同的算法设计,如果我们需要算法越来越快,指的是时间越少,空间越少,那么就需要设计考虑数据怎么存储最为合适,这就是数据结构。

说了这么说,其实就是数据结构在乎的实际,能够摸得着,看得见的。比如一块机械硬盘或者固态,你把数据存上去后,如果用电子显微镜观察,能够看到具有不同的划痕或者芯片位移,这些特定的改动,就是存储存进来的表现,不同的存储方式,就会具有不同的划痕或者位移改动。

总之,数据结构就是计算机存储,组织数据的方式。数据结构是指相互之间存在一种,或者多种特定关系的数据集合。

为什么去学习

  • 提升代码性能,结省空间复杂度和时间复杂度;
  • 算法锻炼自己的逻辑思维;
  • 你会不自觉的考虑你写的代码处理的数据量级是多少,会考虑你的代码是否能处理大量数据的情况
  • 更好的理解应用软件和框架,很多知名软件和框架中都大量用了数据结构算法,比如mysql的索引用了b+树,redis的list底层用了跳跃表,理解这些数据结构能更好的帮助我们理解使用这些软件。
  • 掌握了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。
  • 一流的程序员搞算法,二流的程序员搞架构,三流的程序员搞业务;

数据结构和算法的关系有何渊源

在计算机里面流传着这么一句话, 程序 = 数据结构 + 算法

很多人听到,但是真正的愿意深入为什么这样的,却很少。这里来讨论,其实在这里想要说明的问题是,数据结构和算法是相辅相成的。比如解决一个问题,要考虑问题怎么处理,那么就要知道具体的要处理的实际能够看到的事务,看到之后,然后对其进行包装处理,这个处理一定是有指导思想,如果没有指导思想,那么人的大脑是怎么思考的呢?

总之,数据结构是算法要出的基础,是一切的源,没有数据结构就不存在算法处理。

但是同时,只有数据,没有总结归奶,那么这些数据就是垃圾数据,垃圾数据是没有意义的。

因此,数据结构和算法是相辅相成的,数据结构是算法的基础,数据结构是为算法服务的,但是同时算法也是为数据结构服务的,数据的处理又依靠特定的算法,算法处理特定的数据结构。

最后,数据结构和算法就像鱼儿离不开水。有水才有鱼,有鱼水才活。

数据结构的分类

线性结构

线性结构是最常用的数据结构,特点是数据元素之间存在一对一的关系。

线性结构有两种不同的存储结构,即顺序存储结构(一般是数组)和链式存储结构(一般是链表);

顺序结构存储的结构叫做顺序表,链式存储的结构叫做链表。

  • 顺序表在物理空间上是连续的
  • 链表在物理空间上是非连续的,每个元素的结构上均会记录数据元素和数据元素相邻关系的节点地址信息。

线性结构的常见应用一般有: 数组,队列,链表,栈。

JAVA里面比如常见的ArrayList属于数组,属于顺序表。

非线性接口

望名知意,就是某一个节点之间的关系把有一种以上的特定关系。无法产生数据的一对一关系。

如: 二维数据,多维数组,广义表,树结构,图结构。

总结

算法是一种解决问题的方法和思想,无形不可视,但是却真真实实的存在。

数据结构是计算机存储,组织数据的方式,是一个集合,是相互之间存在一种,或者多种特定关系的数据集合。有形可视,但是关系却很复杂。