数据结构

  

   算法,解决问题之道,各行各业,各门各类均有其固有的难题,而解决问题之道大不相同,社会学,历史学,计算机学,金融学,国学,天文学问题虽不同,但其思维方式却是相通的。

古有筹策论,今有算法论,阳光底下无新鲜事,换了外套而已。那么怎么理解一个问题呢,怎么去解决一个问题呢?

一 道层面:

有大量该领域的相关知识与经验。

借鉴其他领域的思维方式。

提出一个新的问题。

二.方法层面:

1  理解问题

2  组织问题相关的信息(数学,音符,宗教语言,程序语言)

 处理信息(算法)

 

 

高手均知,答案不重要,重要的是思考方式,只有如此,才可利于不败之地。以已万变应敌之万变。知己知彼,百战不殆。

 

现在从计算机科学谈谈计算机问题的解决方式。计算机领域先驱巴贝奇,图灵,冯.诺依曼均为数学大师,由此可见数学学科对于计算机学科的重要性。关键在于借鉴数学学科组织信息的方式。

 

   在接受信息,加工信息,处理信息,重新发觉新的信息绝学必是数学,矩阵是一种信息存储方式,对其操作解决了很多科学问题,对矩阵的在处理转化为计算机语言,从而借助计算机解决问题,所以解决问题第一步,组织信息。第一步通过数学,第二步是计算机(程序语言)。其次对于信息的操作,按性质分为增量操作,存量操作。增量操作可以理解为:增加,删除。存量可以理解为查找与排序,统计,遍历。这便是操作。很多操作中有操作,存量中有增量操作。甚至组织方式决定了其操作方式。这便是方法与数据的封装。

   先从组织信息方面谈起,组织信息?思考生活中组织事物的方法,容器,至于特定的空间,比如线性表,队列,堆栈,数组,串,树,图,这些空间决定了数据的组织方式。

   试想:短暂生命的事物的信息存储方式或者消耗方式大多是堆栈,例子举不胜举,蜡烛,卫生纸,饼干,牛奶,成语有蜡炬成灰泪始干也是同理。而恒久事物大多具备队列特性,因为可以一直更新元素,络绎不绝,车水马龙。

   组织方式的结构从线性到非线性到混沌的变化逻辑也是符合自然界观察的规律的,混沌中包含非线性,非线性中包含线性,线性又有原子组成,原子又可以是数字,字符串,数组。是对事物本质的不断归纳与高度抽象。

   信息的处理方式也可称之为算法,对事物的处理和生活中的处理没有什么区别,只不过换了个领域。打开柜子,打开书,打开水壶,抽纸,打开洗衣粉,快速阅读(生活本是无字书)你能做什么?一项很重要的操作便是遍历,很多操作便是基于遍历的基础上,比如统计类操作(高斯求和可以遍历也可以不遍历,思考:公式还是算法),查找类操作,所以算法的基础实现便是遍历,在遍历的基础上会实现很多操作,但是这是解决问题的最低水平也是最好用的方法,没有对原始问题操作的任何抽象理解,求得算法的算法才是高手!

 

   数据结构,本质是结构,而不是数据,所有图形,图像,视频,音频,通信信号(信息论,香农)均可以转化为二进制文件(0,1电信号),那么图像等信息也应该具备自己的结构,所以数据结构可以广义理解成信息的结构组织,所有就可以从其他不同信息中去思考其结构组成,然后借鉴性的用到数据结构中,以加深对数据结构的理解。

   结构一词,意义深远,宇宙万物莫不具有结构,社会资源,财富呈金字塔结构,宇宙大道阴阳结构,经济分析的宏微观结构,股市的结构性行情,钢筋水泥的结构,工程图的结构,均不是结构的生活意义吗?有大结构,有小结构,化学结构,化学式更是结构的思考,研究物质的结构一门科学,怎么能不给计算机所启发?可以设计出化学反应的ADT吗?(200多个元素加三线组成有机世界的万物!!!)没发现结构的甚至可以称之为:混沌结构。连数据结构也生活化的定义成队列,堆栈,树等结构(为什么树可以作为一种结构出现?因为树叶的密集型决定他可以包含很多信息,叫草也可以,而且树的叶子与根是有一定排列规律的,正好组织了大量的叶子信息,怎么把树中叶子全部树一遍?树的遍历问题),结构之思考,才是正确的数据结构思考入门之道!!!

   计算机世界的数据结构,只有树是借鉴大自然的智慧,而其他的多是抽象出来的,在计算机中呈线性排列。一棵树的存储结构,在计算机底层竟然是线性的,图的结构也是线性的(图与树线性不线性取决于处理问题的层次,而不是本身是否线性与否,这和计算机并行处理机制一样,宏观并行,微观串行,)线性中包含非线性,非线性中包含线性才是正确的思考方式。

    结构完了就到了关系了,关系决定一定。关系可以理解成链接结构中的方式,从计算机角度,分为顺序与链式,足矣,直线由曲线组成还是曲线由直线组成,这是一种极限思考,链式可以理解成曲线,而顺序可以理解成直线。链式相当于把直线切割了,所以什么都可以组成。环形链表就是○,圆,也是□,也是长方形,更是△,足够概括所有关系,因为所有的东西都可以通过链式结构进行描述,很况数字呢?这样便能很好的理解十字链表,哈希表链式存储(存储相同余数的数据),环形链表,广义表,你可以利用基本的结构创造出更多复杂的结构,(顺序理解成阳,而链式理解成阴),也可以把复杂的结构拆解成简单的结构,从简单到复杂可以采用递归式的累进,递归无非是分形的变形而已,大的结构由简单的结构组成,而大的结构与简单的结构又是相似的,树的例子尤其明显,树的结构可以用分形算法(递归)实现。大的结构拆分最终无非是顺序(连续)与链式(离散(离散数学的思考))的组合,那么顺序链式由何尝不可???顺序链式在哈希表的设计中体现出来,顺序中嵌套链式,链式中有线性。这是结构之思。

遍历是最值得思考,遍历属于操作集合中的一个最根本操作,不仅存在于计算机世界,人类社会也是无处不在的遍历,看,一览无余,毛笔字,一气呵成(毛笔字是将宋体结构遍历的变形结构),历史的时间坐标也是遍历,回忆更是遍历(非线性的遍历),报数计数也需要遍历(COUNT不需要遍历便可以算出的例子很多,比如报数,算法便是乘法)游山玩水更是遍历,所以遍历是对事物的全局把握,你觉得键盘按着顺序按一次速度快还是乱序按快???这就是使得遍历a-z字母表时没有采取顺序排列的本质原因,而树的结构把数据打乱了,二叉排序树,还是最大堆,本质打乱顺序,重新组织数据的方式罢了,所以遍历等操作也会不同。算法之魂在于不断思考极限。

给十个数字,写出可能组合的方式。并给出遍历的方式。这才是真正的数据结构思考的起点,而不是一开始就去根据算法与操作去设计所谓的顺序还是链式结构。

0    1    2    3   4   5    6   7   8   9

组合:结构+关系

操作:遍历

思考:十个数的操作影响人类历史!影响多少学科与思维!!!

结构思考:1有序,无序

 

数据结构最大的思考,对现实世界的抽象,从而可以转化成解决问题的方法。

相关文章
相关标签/搜索