首页 > 代码库 > 关于数据结构(一)
关于数据结构(一)
问题:怎么学好数据结构?
回答一:
数据存储 的目的是便于数据访问,这个关系就是数据结构
算法 是计算机解题的模型:输入,输出,顺序执行,跳转,循环,分支,有限步骤
人大脑组织数据的方式有线,树,图三种逻辑结构,而计算机存储采用顺序,链式和两者混合的方式。前者是概念性的东西,后者是物理实现。
线形结构:算法是迭代算法,你只要注意规模最小的情况下不出错,则算法一般不出错。
树形结构:算法是递归算法,你只要运用递归组合的方法,将简单情形组合出复杂情形,简单情形不出错,则算法一般不会出错。
简单情形不出错,则算法一般不会出错。
图形结构:DFS:将图按照树形结构来处理,运用递归算法
BFS:将图按章线形结构来处理,运用迭代算法
必须会下面几个几个算法:
(线形两个)
1.将两个有序表合并为一个表,这个算法的变种很多,可以是链表,顺序表。涉及集合运算,
归并排序,字符串处理。
2.将一个顺序表的元素重新划分,左边的较小,右边较大。涉及快速排序,求字符串的逆串。
(树形若干个)注意:有些可以实现,有些实现不了,可以拿来思考。
3.前序线索化,递归实现,栈模拟递归,非栈式迭代实现。
4.中序线索化,递归实现,栈模拟递归,非栈式迭代实现。
5.后序线索化,递归实现,栈模拟递归,非栈式迭代实现。
(图形)注意:会画表格,写出算法的逐个步骤即可。
6.MST:prim,kruskal
7.short path:Dijkstra ,Floyd
8.AOV:拓扑排序的DFS,BFS实现
9.AOE:关键路径
严蔚敏数据结构应该怎么学习。
回答二:
Google 上关于数据结构与算法的回答:
我多次在google面试或者毕业招聘的时候看到这样的情形:学习数据结构和算法--CS课程里面几乎最重要的课程--的方式很不科学!!
到不是说大家用的书或者老师用的材料不对,而是说学生们对于这些课程本身的理解非常缺乏.
打好数据结构和算法基础的关键并不在于对于所有数据结构的细致的了解,不是记住每一个大O值或者摊余成本..((@_@;)? [不懂]).
如果这些知识你都掌握了,当然很棒并且可以给人留下很深的印象,但是你基本上用不着啊!
你的职业生涯中或许永远都不会要求你实现一个红黑树删除节点的算法.但是!你必须有能力而且手起刀落轻轻松松的识别出什么时候使用二叉树更简单更有效, 因为你十分需要这样的技巧.
所以,不要试图记住所有的东西.而是从基础开始,做两件事:
- 第一件事. 把数据结构图形化,视觉化.(突然想起来我高中竞赛老师说的一句话:数形结合千般好,一旦不做万事休啊! 就是要画图! )在直觉上感受一个数据结构是什么样子的.使用它是什么感觉,抽象上和具体实现上是什么样子的.这就是最重要的事情.并且无论是对于简单的队列,栈还是天杀的平衡树都很重要而且有效.把数据结构画出来,在你的脑袋瓜里面就能想象出来,总之,你需要做的就是,直观的去了解这些数据结构.
- 第二件事.学习什么时候用什么样的数据结构和算法.对于学生来说这很难,而且你要做作业的时候老师也没告诉你们这该怎么办.╮( ̄▽ ̄")╭ 不过没关系. 你要认识到当你真正处理到现实问题的时候或许你才能掌握某些数据结构,比如哈希表.但是即使是个学生,你也应该知道数据结构的实用性:什么时候你需要个哈希表,什么时候你需要个树,什么时候你需要个堆? 而不是一开始就陷入到追求细节中去.
我在google面试的时候,我经常会问一个可以由二叉树搜索解决的问题. 好的应聘者可以几分钟内就可以想到用二叉树来解决,而且对于我的其他问题也差不多10-15分钟就可以解决.当然,偶尔会有一个应聘者,他能直观的认识树这种结构,而且可以把我的问题形象化,图形化的描述出来.当然他或许对于某些操作的时间复杂度不甚了解,但是对于问题他却可以立马回应,因为他们脑袋里就有这样的树结构啊~所以他也能拿到工作啊.
至于书嘛,只推荐一本--- <算法导论>
如果你想要一本有很多例子并且和语言相关的书的哈u,我就推荐 <Algorithms in C++ ><Algorithms in Java> 当然我还是更推荐<算法导论>,不过这些也是很好的教辅书啦~
回答三:
给一个小小的建议:学数据结构的时候,不要陷入C语言的思维(当然,也不要陷入其他语言的思维)
- 先把你学的计算机语言忘了,然后发挥你的想象力,把各种数据结构在你的大脑中具象化,一开始不必追求过多的理论知识,也不要关心严密性,追求感性的认知;
- 当能够形象地想象出某种数据结构的时候,动手用你学的C语言实现它。记住,不要追求完备的功能,只要写一个最简单的实现,一开始就追求完美不是一个好的学习过程;
- 写完之后,回过头看那些理论上的东西,形成知识体系;
- 最后,如果还有精力,重新写一个功能更完备一点儿的实现;
通过上面几步学习,基本上就掌握的比较好了,即便过了一段时间,也不会忘的一干二净;
回答四:
对于某个数据结构,几步:
1、理解该数据结构的基本概念(定义、实现)
2、尝试理解这个数据结构的意义(为什么它会被发明)
3、用这种数据结构解决一些对应的例题(书本上的习题、Online Judge上的水题)
4、尝试用这个数据结构解决一些以往你用别的数据结构解决的问题,能否解决,为什么。
5、再次尝试理解这个数据结构的意义
6、尝试改变这个数据结构以应对各种现实的问题(Online Judge的好题)
8、学好数学,别数都不会数。
注:以上回答取材出自知乎 :http://www.zhihu.com/question/19830721