数据结构背后的生活哲理

本文的思维导图。
请添加图片描述
对于这个真的想不到更多了,就此搁笔吧。终于水完了

绪论

1. 数据结构
对于数据结构本身,它是运用计算机解决问题过程中对问题的抽象与分解的产物。很多数据结构是 协同使用的。在需要的时候就去调用相应的数据结构。如在图的广度优先遍历中,就是对图这种数据结构的操作需要了队列这样一种辅助的数据结构。而对于图的深度优先遍历,则是利用了系统给我们提供的栈,我们才能去实现递归调用的程序。
即我们对许多问题,是可以分开来考虑的。将每步运用上自己学习的知识,对它进行解决。最后每步的解决导致了整个看起来很大的问题的解决。这样的处理是先见森林,再见树木。例如对于未来的规划,看起来是一个很宏大的处理,但我们如果先将其落实到每一年,再在每一年落实到每个月,每个月到周,周到日,日到小时,小时到分钟。如此,一头牛也就轰然倒塌。长跑亦是如此。只能看见1km的人是悲哀的。如果每迈出一步,你就能在心中告诉自己——我又迈出了一步。那么你的心中会有一种荣耀感。这种荣耀感能激励你继续向下跑。

2. 数据结构的存储结构与逻辑结构
数据结构还需注意的一点是它的逻辑结构与物理结构并不是一体的。存储可以和具体的逻辑分开。不是说我想表达的是树的逻辑结构,就非得采用二叉链表的形式去存储。而对于链式关系来说,仍然可以采取顺序存储的方式去做到。总而言之,不能在我们脑中将逻辑结构与物理结构捆绑在一起。
即不要带有偏见或者固有的立场去处理事情。要能看到事物的多样化发展。并不是说玩游戏就会阻碍正常成长,加以适当引导也能收获不少。成功的途径也并非只有赚钱一条路,达到自己的自我价值实现也是一种成功。考试失利并不意味着你人生就完了,你只是需要换个方向去实现自己的价值罢了。如浙大的一位学生,他之前努力学习,门门满绩,但是有次考试,他因为前一天学的太累,而错过了考试。但是他在思考后,大彻大悟。决定只把时间花在自己喜欢做的事情上面,其他的及格就行。他喜欢的事情是打游戏和ICPC。他为了通关日本游戏,自学日语,翻译了一本日语算法书并出版;他打ICPC打到了世界冠军。故事中本人的描述 陈越姥姥的描述生活是一条小径分岔的花园,但不管你如何选择,终究能欣赏到花园中的美景。

3. 算法
和数据结构紧密相连的就是算法。算法的英语名称的来源是数学家花刺子模的名字(al-Khwarizmi)。 对于算法来说,算法是必须正确的,是针对规定的问题的可以在我们忍受的时间内得出解答的方法,步骤。因此其必须正确,高效。算法是将人脑中抽象的思想应用于问题后的解决方案。它终究是写给人看的。过于的抽象,别人根本理解不来。那就像说我有好想法,但是我没办法简单的表达出来,也是用处不大的。同时,算法也不能过于死板。生活中是充满着变化的。问题不是一成不变的,它的信息会发生变化,如果你的算法还能应对变化的情况,按照数理统计中对估计量的评判标准,我们可以近似的说算法的有效性高。用计算机的术语来说,就是算法的健壮性好。
更近一步,现在对于算法的描述都不够量化,都是定性的说明。而对于算法来说,可读性,健壮性并不适合量化,这些设计到个人的感受。当一件事情参杂了个人感受后,它就不够客观。剩下的就是算法的运行效率。但是算法的运行效率和输入是有关的。算法总能找到能让它运行效率高的数据。这样的比较是没有什么意义的。我们应当考虑最坏的情况,未雨绸缪,在事情还没发生之前就预料到它的发生,这样才能让事情在掌控范围内。也就是说,通过提高预测的范围,增大置信区间,去提高可信程度。
运行时间并不是所有。如果有算法能在1秒中得出答案,但是需要超级大的电脑内存。那它的用处也是不大的。因此,除去时间,空间也是在我们的考虑范围内。空间的评价和时间是类似的,只不过将单位进行改变。

基本线性结构

  1. 栈和队列
    最开始学习栈和队列的时候,总是不懂,为什么要去限制它们的操作?我用数组明明能更方便,不止能读取队首,队尾,栈顶,实现各种操作,我为什么还要做更深层次的封装呢?
    现在勉强能回答自己的疑问了。虽然我丧失了我更方便读取数据的能力。但是我的栈和队列使用上更方便了。它是变成了我们内化于心的一种数据结构,就像数组一样。我们并不需要去考虑这些数据结构是怎么实现的,我们只要用就好了。
    当我们将数组的运用视为当然的时候,我们的程序设计也就入门了。当我们将栈和队列视为当然的时候,我们的数据结构也就入门了。
    这样来说,对数据读写的限制反而方便了它的使用。这不得不说是塞翁失马焉知非福了。这也蕴含着更深刻的哲理,我们失去了一些东西的同时,我们也获得了一些东西;同样的,我们获得了一些东西,也失去了一些东西。世界是无私的,也是公平的。可能暑假花费时间看的一部电影激发了我们的灵感,从而提出了一个新想法,新项目。也可能在获得游戏游玩的快感,去失去了我们学习的时间。

线性结构的扩展

  1. AVL树
    不知大家想过没有,为什么AVL树非得在每次插入一个结点就去调整,而不是等插入结点结束之后才去调整?
    首先,树作为一种动态的数据结构,我们并不能确定哪个时候才是输入的终结。可能就真的是从1到无穷大了。因此在所有数据插入结束后,再去调整不是太现实。其次,在插入后调整,能保证下次的树就能满足平衡的要求。这警示我们如果发现了错误,就要即使改正,而不是等到已经改不掉再去懊恼当时为啥没改正。勿以善小而不为,勿以恶小而为之。

  2. B-树

对于B树这种数据结构来说,累了,睡觉,明天上完课再说。

查找

排序

猜你喜欢

转载自blog.csdn.net/SDDHDY/article/details/121796081