数据结构和算法——学习数据结构的经验

简介: 数据结构和算法——学习数据结构的经验

最近开始学习数据结构和算法,看到一位前辈分享的学习经验,特地做了记录!

有时候我们埋头苦学,天真的以为照着书多敲代码就可以掌握知识点;其实并不然,在学习中往往出现照着书上敲代码,但敲完了并不知道那是干嘛的情况。这就是一些初学者很大的误区。所以当我们拿到代码时,可以先跟着作者思路走一遍,上手敲代码之前最好先在草稿纸上把代码一行行分析一遍,看看是不是作者的思路。往往书上的代码不会很长,而且里面会有一些编程技巧值得学习。最后再按照思路来编程,这时候你会发现一些前面两个步骤中没注意的问题。这些对我们的思维方式都有很大帮助。


数据结构虽然解决的是数据存储问题,但是在使用的层面上,我们不仅仅时因为存储数据而使用。更重要的时当我们使用某些特殊的数据结构存储数据后,将可以帮助我们更加高效的解决某些算法问题,甚至对于某些问题来说,如果某有这些数据结构我们根本无从解决!


1、记住数据结构,记住算法思想(是什么)


我觉得这个是数据结构与算法学习最基础的部分。学完之后,你至少得能给人说明白,什么是”堆栈“,什么是”平衡二叉树“等等等吧。我之所以说”记住“,是希望这些能够形成长久记忆,存储到你的”硬盘“里,而不仅仅在学习的时候过了一遍你的”内存“。还有一个问题,什么才叫”记住数据结构“。

我觉得,第一步,数据结构最直观的东西你得记住吧(如标题背景图,来自数据结构和算法动态可视(Chinese))。这种直观的记忆可能在不知不觉中就完成了,但为了更好的记住,还需去刻意记忆和偶尔的复习。


第二步,你得记忆该数据结构的定义与性质与特点等等等吧。例如,学习哈夫曼树的时候。哈夫曼树的定义:WPL(带权路径长度)最小的二叉树;哈夫曼树的特点:(1)没有度为1的结点(2)n个叶子结点的哈夫曼树共有2n-1个结点(3)哈夫曼树的任意非叶节点的左右子树交换后仍是哈夫曼树。关于”数据结构“,需要记忆的内容也需要自己在其中慢慢领悟。


至于”记住算法思想“,举个例子,思考我们如何构造一个”哈夫曼树“。当然,在知道它的定义后,我们可以自己去设计一个算法。如果,自己可以想出来,恭喜你。如果自己没想到,再看到先人的解决办法后,不是仅仅“惊叹”一声,更要去理解,去记住它。


2、用编程语言去实现某一数据结构上的算法(怎么办)


很多时候,理解一个算法很容易,很容易在纸上去模拟一个算法的实现过程。但,具体实现,则是另一回事。一定得先自己思考,然后再去看书中给的编程语言实现。在我看来,这一过程已经不属于“数据结构与算法”的内容了。

而是你综合素质的体现,如何真正理解问题和用编程技巧实现,很考验自己。这一过程,很难靠记忆。而在不断敲代码的过程中去体会一些直觉上的东西。如何用递归解决问题,如何使用循环,如何使用"哨兵”等等等等。当然,敲完后需要去思考总结,看看能不能总结出一些”小套路“并记住。


3、”记住“特定情景下,利用某一特定的数据结构,去解决问题


每介绍一种数据结构,浙大数据结构与算法的MOOC课程都会有一个实际问题来作为“引子”,回答了“这种数据结构为什么会出现”。有的是为了实现特定的操作,有的是为了时间和空间上(大部分考虑的是时间复杂性)效率的更高(所以,没事的时候,分析一下算法的时间复杂性)。这些东西,我们也须理解记忆。每一数据结构都有其特性,去解决某一类问题,我们需要去记忆,去感悟。

最后,在学习过程中,如何形成一个属于自己的知识体系(准备在“印象笔记”中单开一个“数据结构与算法”的笔记本);如何去“记住”(记好笔记,多多复习);在学习过程中,遇到挫折,产生挫败感该如何处理(这个是必然会发生的,总有难以理解不会的地方);如何进行心态方面的调整(欲速则不达,不过也有”敏捷学习“的概念)。


目录
相关文章
|
27天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
24天前
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】基于多轮课程学习的大语言模型蒸馏算法 TAPIR
阿里云人工智能平台 PAI 与复旦大学王鹏教授团队合作,在自然语言处理顶级会议 EMNLP 2024 上发表论文《Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning》。
|
27天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
28天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之顺序表【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找等具体详解步骤以及举例说明
|
27天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
27天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
27天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
28天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
28天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构的基本概念;算法的基本概念、特性以及时间复杂度、空间复杂度等举例说明;【含常见的报错问题及其对应的解决方法】
|
2月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
35 4