初识数据结构和算法

在很久很久以前,有一位敲着代码的少年,他正像往日一样,像贝多芬演奏一般敲击着那“咔咔”作响的键盘。。。紧接着!少年眉头一皱,大事不妙!程序闪退了!这背后究竟是道德的沦丧,还是人性的泯灭?小黑带你来深入这件离奇的事情!

要说到这数据结构和算法啊,从开始学习编程开始,就有所耳闻,但是一直觉得是编程界一门比较高深的技术,我这种小白就别去参和了~直到我的程序运行卡顿、闪退的时候,我才意识到,我需要对我的代码进行优化,可是怎么优化呢?从何下手呢?跟着这个问题我就慢慢开始接触并且开始学习数据结构和算法!

数据结构(Data Structure)

数据结构可以说是算法的基石了,算法可以说是在数据结构的基础上去进行一系列的运行,根据不同数据结构的特性,去进行一些列的算法,对数据结构的数据运算进行优化!

如下图,数据结构有逻辑结构物理结构,而逻辑结构又分为线性结构非线性结构两大块,在由两大块分为多种具有独特特性的类型:
在这里插入图片描述

逻辑结构

线性结构:

线性结构可以说是最简单的数据结构了,其包括栈、队(队列)、串、线性表(Hash)、数组

非线性结构:

树结构:树结构相对于线性结构就较为复杂一些,像二叉树、二叉堆等等;

图结构:图结构又是更为复杂的数据结构,相对于树结构而言,树结构只会有一对一、一对多等关系,而图结构会有多对多的复杂关系。

其他:

上面几种都属于基本数据结构,其实还有很多由这些基本数据结构而演变出来的奇奇怪怪的结构,这里就不过多赘述。

物理结构

物理结构可以说是逻辑结构的组成元素了,比如二叉树,它就可以依靠数组或者链表来实现!等等,就不讲那么细了~

算法(algorithm)

算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度时间复杂度来衡量。 ——来自百度百科

可以从上面那段话的最后那句看到,一个算法的优劣可以用空间复杂度时间复杂度来衡量。那么什么是空间复杂度时间复杂度呢?

时间复杂度

时间复杂度指的是一个算法运行的时间长短,比如两个同样功能的程序,实现一个查找功能,查找东西的时候一个用了 1S ,一个用了 2S ,那么很明显,用时短的程序会让用户体验感更佳!

空间复杂度

空间复杂度是指一个算法运行时占用的空间大小,一个程序,同样的功能,运行某个功能时占用空间越小,用户体验就越好呀!就好比你一个俄罗斯方块玩的时候需要占用别人2G内存,你说别人要是手机差一点玩个俄罗斯方块都卡,还能好好玩游戏嘛?

时间和空间的取舍

对于时间复杂度和空间复杂度,有些时候可能必须做一个取舍,那么可以想一想,到底是舍弃时间,还是空间?

答案是:舍弃空间

因为更多时候,我们更愿意程序运行速度快,宁愿多占用一些空间,也要让程序速度快,这样用户体验才会更好!

发布了43 篇原创文章 · 获赞 304 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_44720366/article/details/105180677