如何学习数据结构?(纯干货)

我是自动化专业的应届研究生,最终拿到了tplink、华为、vivo等公司的ssp的offer,分享自己学习过的计算机基础知识(C语言+操作系统+计算机网络+linux)以及数据结构与算法的相关知识,保证看完让你有所成长。
欢迎关注我,学习资料免费分享给你哦!还有其他超多学习资源,都是我自己学习过的,经过过滤之后的资源,免去你还在因为拥有大量资源不知如何入手的纠结,让你体系化学习。
在这里插入图片描述
经历找工作前的数据结构的学习,在加上最近疫情期间在家的复习,才发现之前学的数据结构真的没有学到点子上,导致觉得算法难。我这里把数据结构作为算法的基础,很多其实都是把数据结构和算法放在一起来说的,我觉得算法和数据结构的学习方向是不同的,所以感觉分开来看比较好,后面在来说算法的学习,这篇文章先来谈一谈数据结构的学习。
这里补充一点,作为非计算机专业的学生,其实转到软件岗位需要学什么,就是听了听师兄说该学什么,他们都说学数据结构,但是只学数据结构完全不够,数据结构只是算法的基础,一定还要去学习算法的设计思想,下一篇如何学习算法在详细来总结。(不知道大家有没有被误导过)如果只是学完数据结构就去刷题,当时真的把我难到想放弃。

数据结构是什么?

数据结构我的理解其实就是对于数据的一个组织形式,通过这种组织形式,让你能够按照你的需求来方便的获取想要获得的数据。比如说我想在线性时间查询一个元素是否存在,那么就可以使用哈希表;每一次都从一个集合的数据中取出集合中的最小值元素,就可以使用优先队列(堆)。这些就是前人在编程实现各种需求的时候,总结出来的一些方便使用的数据组织形式,能够满足你的一定需求。其实这也是面试笔试中各种题目的考查点,很大一部分题目其实就是数据处理或者字符处理之上赋予数据一定的实际意义。比如LeetCode 239题滑动窗口最大值,其实就是数组中一段中的最大值。如果你能将表面的实际意义去掉,可以看到就是一个双端队列的数据结构。所以说数据结构可以看作是算法的基础,任何算法其实就是对数据处理,这就是需要借助数据结构来实现。所以数据结构学好是非常重要的,那么该学什么呢?

数据结构学什么?

我觉得数据结构学的是各个数据结构的特点,一定要熟记于心,能够灵活运用,一看到这个题目的需求,比如LeetCode 第1题两数之和,使用暴力法就是两次遍历数组,那么如何快速查询数组中是否出现过target-nums[i],就是使用哈希表记录i之前出现的数字,然后就可以快速查询了。所以数据结构的学习重点是学习各个数据结构的特点和缺点,在需要使用的时候能够灵活选择。我觉得只要掌握这些数据结构的特点,然后在题目中能够准确选择相应的数据结构,就能比较轻松的解决问题。在比如对于去年秋招腾讯的笔试题LeetCode 394字符串解码,其实就是需要与之前出现的括号匹配,这种对于需要访问之前出现数据的情况,就可以考虑栈来实现了,对于这些数据结构的具体如何实现,我觉得其实可以不必要完全会实现,因为大家一般都是使用高级语言,c++、java、python都有相应的库函数,学会如何调用就可以。

数据结构学习路线

我的数据结构学习就是看了一门mooc和几本书,首先对于数据结构的入门,我觉得看浙江大学的mooc非常好,讲解的比较基础,而且后面有相应数据结构的习题,对于掌握这种数据结构非常有利。这门mooc的数据结构都是C语言底层实现的,你可以自己编写每种数据结构如何实现的,加深理解。
https://www.icourse163.org/course/ZJU-93001
书籍的话,推荐大话数据结构
在这里插入图片描述

数据结构与算法分析,个人感觉前面一部分还不错,后面算法设计思想部分不建议看,有C语言和java还有python版本可以按照自己需要来看。

在这里插入图片描述

(图片来源互联网,侵权删)
在掌握这些基础数据结构的特点,能够灵活应用之后,就可以更进一步的学习算法了,将两个部分结合在一起,对于面试笔试中的算法题目就会得心应手。

好的,很高兴为您解答这个问题。 在深度学习中,数据增强是一种常用的技术,它可以通过对原始数据进行变换、裁剪、旋转、翻转等操作,来扩充训练集,从而提高模型的泛化能力和鲁棒性。在图像领域,常用的数据增强方法包括随机裁剪、随机旋转、随机翻转、色域变换等。下面,我将为您介绍如何使用 Python 对图像进行随机数据增强。 1. 随机裁剪 随机裁剪是一种简单而有效的数据增强方法,它可以通过对原始图像进行随机裁剪,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机裁剪。 ```python from PIL import Image import random def random_crop(img, crop_size): w, h = img.size left = random.randint(0, w - crop_size) top = random.randint(0, h - crop_size) right = left + crop_size bottom = top + crop_size return img.crop((left, top, right, bottom)) ``` 2. 随机旋转 随机旋转是一种常用的数据增强方法,它可以通过对原始图像进行随机旋转,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机旋转。 ```python from PIL import Image import random def random_rotate(img, angle_range): angle = random.uniform(-angle_range, angle_range) return img.rotate(angle) ``` 3. 随机翻转 随机翻转是一种简单而有效的数据增强方法,它可以通过对原始图像进行随机翻转,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现随机翻转。 ```python from PIL import Image import random def random_flip(img, flip_prob): if random.random() < flip_prob: return img.transpose(Image.FLIP_LEFT_RIGHT) return img ``` 4. 色域变换 色域变换是一种常用的数据增强方法,它可以通过对原始图像进行色彩变换,来扩充训练集。在 Python 中,我们可以使用 PIL 库中的 Image 模块来实现色域变换。 ```python from PIL import Image import random def random_color(img, color_range): r, g, b = img.split() r = r.point(lambda i: i + random.randint(-color_range, color_range)) g = g.point(lambda i: i + random.randint(-color_range, color_range)) b = b.point(lambda i: i + random.randint(-color_range, color_range)) return Image.merge('RGB', (r, g, b)) ``` 以上就是使用 Python 进行随机数据增强的一些常用方法,希望对您有所帮助。如果您有任何问题,请随时联系我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值