(一)数据结构与算法--前篇

来源:互联网 发布:od矩阵模型 编辑:程序博客网 时间:2024/05/16 15:40

数据结构

1.概念

  数据:在计算机里面,数据基本上可以理解为信息,无论是人和事物,或者是对人和事物的描述(比如数量,颜色,大小等),都可以当作数据;
  而计算机主要是完成对数据存储和运算的功能,那么也就可以理解为,凡是计算机所要存储和运算的东西,都能称之为数据。
  
  结构:百度百科中对结构的解释是,组成整体和各部分的搭配和安排。
  一般情况下,如果用到结构这个概念,那么绝对不会是单个存在的事物,而是多个事物共同存在,那么这些事物如果之间有一定的关系,那么所有事物之间的整体上的这种关系就可以理解为结构。
  大体上的关系分为一对一、一对多和多对多的关系。
  
  数据结构:简而言之就是计算机所要存储的多个数据之间的关系。常见的数据结构有队列、栈、树等等
  
2.举例
  (1) 队列:这种结构就是现实生活中的排队,比如排队买火车票,每一个人就是一个数据,人和人之间是排队的关系,它的特点是,先来先买,先买先走,后来后买,后买后走
  (2) 栈:这种结构最形象的就是手枪的弹匣里的子弹,子弹与子弹之间的关系就是栈结构,这种结构的特点是先压进去的子弹最后射出,后压进去的子弹,最早射出,这个也是和队列结构的区别
  (3) 树形结构:日常生活中,一家公司的人员与人员之间的上下级关系,就是树形结构。董事长下面有副董事长、副董事长下面有各部门经理、各部门经理下面有各个组长、组长下面有一些员工。树形结构由很多种,左斜树、右斜树、二叉树、平衡二叉树等等。
  除此之外还有其它结构,比如链表结构、图状结构等等,
  另外,如果数据和数据之间没有关系,那么也能称之为结构,比如说高中数学中学到的集合的概念,在集合中的数据和数据之间,可以说是除了在同一集合里存储之外,没有任何的关系,但也是一种数据结构
 
  但总的来说,可大致分为线性结构非线性结构

算法

1.概念
  算法理解起来非常简单,就是解决问题的方式方法,在计算机里面,并且在数据结构里面,算法就可以理解为操作数据的方法。
  计算机不仅要存储数据,还要操作数据,比如添加、删除、修改。
  
2.举例
  之前玩过一个小游戏,从1~100之间随机抽取一个数字,然后来猜测这个数字是几,每猜测一次会提示是偏大还是偏小,5次机会。
  常用的方法就是先猜50,然后看提示是大还是小,无论大小,第二次猜就取剩下的一半,一直猜到第五次,如果还没猜出,那么就会说出心里觉得可能性最大的数字。
  这种折半猜的方法,就是一种算法。
  不同的数据存储方式,会有不同的算法
  比如在一堆书中找一本书,如果这堆书是非常散乱的扔在一起,那么找书就要一本一本的拿起来看,直到找到位置,虽然效率慢,但也是一种算法;
  也可以首先把书分类,比如学习的一类、小说的一类、漫画的一类,然后找书时就去符合所要找的书的分类中查找,那么效率就会提高很多,这也是一种算法。
  
3.评判标准

  (1) 时间复杂度
  时间复杂度并不是该程序所要执行的时间,而是所要执行的次数。
  因为,不同的计算机,不同的操作系统,会造成同一种算法执行时间不同,比如拿一个算法运行在windows95系统,286处理器上,那么执行的时间就会比较长,但不能说这个算法就不好。
  而执行的次数也不是单位时间内大概需要执行几次,而是该算法的最核心功能部分大概需要执行几次,也可以理解为大概需要执行几次,才能达到目的。很难非常精准的测出次数,所以用大概次数
  用刚才找书的例子,比如有100本书,如果一个一个找,那么就完全有可能找到第100本才是所要找的数,那么该算法就要执行100次,
  如果先把100本书分类,比如学习类的有60本,小说类的有30本,漫画类的有10本(我是不是特别爱学习 @_@!),那么如果所要找的书是学习类的,该算法要执行60次,如果是小说类的就要找30次,如果是漫画类的,就要找10次。
  用这个执行次数的标准来衡量,就会比较准确。
  拿一个算法A来用在一个配置比较高的机器上执行了100次才达到结果,用了10秒钟,和另一个的算法B在一个配置非常低的机器上执行了1次就达到结果,用了30秒钟,那么明显的B算法比较好。
  
  (2) 空间复杂度
  该算法在执行时大概占用的最大内存
  
  (3) 难易程度
  如果有一个非常非常牛逼的算法,全世界就他一个人会,其他人怎么学也学不会看不懂,那么这个算法也就一般
  
  (4) 健壮性
  一个算法执行次数少、占用内存小、并且简单易懂,但如果一个人给了个非法的数据,造成程序崩溃,那么这个算法就不是那么好
  
  大概的评判标准是这么四种,但主要的是前两种。

原创粉丝点击