前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我的学习之旅:从数据结构入门到算法

我的学习之旅:从数据结构入门到算法

原创
作者头像
Nimyears
修改2024-10-24 10:03:56
1380
修改2024-10-24 10:03:56
举报
文章被收录于专栏:JetpackCompose M3玩转全栈

我的职业生涯始于2021年,从体力劳动到数据分析,再到如今成为一名Android软件开发工程师,这一路的转变不容易,但是职业规划发展很顺利。在编程学习的过程中,我真正意识到了,掌握数据结构和算法是成为一名优秀程序员的非常关键。在这篇文章中,我想分享我如何从零开始学习数据结构,再深入理解算法的经验和心得,希望能为那些和我一样想要在编程道路上不断进步的人提供帮助。

1. 初识数据结构

在2021年,我刚开始学习Java编程时,我主要关注的是如何实现基本的功能,可是随着开发经验的积累,我意识到,代码不只是能运行就好。数据结构是处理数据的基础,理解它可以让我写出很高效、很优雅的代码。在2022年,我决定从基础的数据结构开始学习,比如数组、链表、栈、队列和树等。

2. 认识树和图

当我对基本的数据结构有了一定了解后,我开始接触更复杂的结构,比如树和图。树是一种递归结构,经常在文件系统和数据库中使用;而图在社交网络、地图导航等应用中有广泛应用。首先,这些结构让我感到困惑,但通过不断的实践,我慢慢掌握了它们的特点和用途。

例如,在学习二叉树的过程中,我编写了一个小Demo,模拟文件系统中的层级关系。这种方式让我深入理解了树的递归特性,以及在数据存储和查询中的实际应用。对于图结构,通过实现简单的深度优先搜索(DFS)和广度优先搜索(BFS)算法,加深了对遍历和路径查找的理解。

3. 学习算法:从简单到复杂

在对数据结构有了一定了解后,我开始学习算法。算法是处理数据的核心,数据结构是核心的基础。对于初学者来说,算法可能听起来很复杂,但是其实它们本质上是解决问题的一种思路,排序算法和搜索算法是我接触的最基本的算法类型,例如冒泡排序、快速排序和二分查找等。

在实际学习中,我遇到的一个问题是如何理解算法的时间复杂度。起初,我对“大O”符号表示的复杂度很模糊,但通过一遍遍地用不同的数据量测试代码运行时间,我慢慢理解了不同算法在效率上的差异。比如,在数组较小的情况下,冒泡排序和快速排序差异不大,随着数据量的增加,快速排序的效率明显高于冒泡排序。

4. 深入学习:动态规划和回溯算法

在我掌握了基本算法之后,我决定挑战自己,开始学习更复杂的算法,比如动态规划(Dynamic Programming)和回溯算法。这些算法需要对问题进行分解和递归处理,对于初学者来说确实很难度,但它们在解决复杂问题时非常有用。

在学习过程中,我以理解能力去处理了一个 “分解问题—递归求解-结果” 的思路。例如,在解决背包问题(Knapsack Problem)时,我试着把问题分解成多个子问题,用动态规划的方式求解。这个过程让我慢慢体会到,算法学习的关键在于理解解决问题的思想,要多手动写代码,反复练习,而不是一味地背代码。

5.LeetCode刷题:制定目标要做到了二年的坚持不懈

在数据结构和算法的学习过程中,我深刻意识到光有理论知识是不够的,还需要通过大量的实际练习巩固这些知识。所以,我决定把其他练习平台、LeetCode、算法秘籍书籍、程序员面试金典书籍作为我的主要练习,给自己制定了一个目标:每周完成至少10道题目,慢慢增加难度。从最初的简单题目开始,到中等题目,我在这个过程中体会到了不同算法的巧妙之处。

例如,有些题目可以通过暴力解法解决,但时间复杂度不理想。通过优化代码、使用合适的数据结构,我发现效率可以提升很多。让我对算法的优化有了更深刻的理解,让我更清晰地认识到在实际开发中,高效的算法和数据结构对性能的重要性。

刷题是个需要耐心和坚持的过程。在这二年里,我完成刷题了600+道题目,还在其他平台上挑战了一些经典题目。每一次解题都让我感受到成就感,不过我有意识到,编程不只是写代码,更是一个解决问题的过程。通过不断地分析问题、寻找最优解,再到实现高效的代码,每一步都在锻炼我的逻辑思维和问题解决能力。这种坚持让我在面对复杂的项目需求时很自信,让我在技术上得到了快速的提升。

有幸收到了Google的正式面试邀请,经过三轮技术面试,我学到了很多东西。面试官还向我反馈了一些改进建议,我根据这些结论进行了很多优化,进一步提升了我的技术水平。今年我又投递了其他外企的简历,在面试中也涉及到了算法和算法实践。这时,我第一次用Kotlin语言进行题目解答,顺利完成了代码实现。

6. 实践应用

学了那么多数据结构和算法,我开始尝试把它们应用到实际项目中。在开发安卓应用时,很多时候需要优化UI和数据处理的效率,比如在展示一个大型列表时,我会选择使用树或图管理数据结构。

例如,我开发了一个复杂的App,需要处理大量用户数据的展示和排序。在这个过程中,我使用了堆排序优化数据排序的效率,这让我感受到,学习算法不是纸上谈兵,而是实实在在能提升工作效率和项目质量的工具。

7. Google专家的推荐:一本改变我的书

这是多么的幸运的一件事是,我非常感谢Google专家的推荐,阅读了一本叫《算法秘籍》的书。这本书全面系统性介绍了各种数据结构和算法,还通过生动的例子帮助我理解了它们的应用场景。它让我意识到,学习编程和算法不是简单学习语法和概念,而是要从思维方式上有所突破。

书中的内容让我学会了如何用一种结构化的思维去拆解问题,再寻找解决方案。比如在开发应用时,如果遇到复杂的数据处理需求,我会首先想到分析复杂度的优点和缺点,使用哪种数据结构存储数据,再思考该用哪种算法提高处理速度。这种思路上的提升,使得我在编写代码时,很快速反应找到最优的解决方案。思考该用哪种算法提高处理速度。这种思路上的提升,使得我在编写代码时,可以快速反应找到了最优的解决方案。

8. 持续学习与总结

在学习数据结构和算法的过程中,我最大的感悟就是编程不只是代码的实现,而是一种思维方式的培养。我坚持每天学习一点新的内容,哪怕是短短的半小时。这种持续的学习,让我在解决问题时更自信。

我通过线上LeetCode和一本程序员面试金典书籍选择题目检验自己的学习成果。实践让我意识到,学习算法和数据结构是一个持续更新的过程,只有不断尝试和总结,才能真正理解它们的精髓。

9. 结语

从数据结构入门到深入理解算法,这个过程对于我来说,就像打开了一扇新的大门。它让我在编程的道路上,不再感到迷茫和困惑,而是有了更多的信心和动力。我相信,学习数据结构和算法,能帮助我们写出高效的代码,让我们在解决问题时拥有更广阔的思路和更强大的能力。

希望这篇文章能够激励更多初学者去探索数据结构和算法的世界。只要有足够的耐心和实践,每个人都能在编程的道路上走得更远。

祝大家程序员节快乐,谢谢大家的阅读 )

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 初识数据结构
  • 2. 认识树和图
  • 3. 学习算法:从简单到复杂
  • 4. 深入学习:动态规划和回溯算法
  • 5.LeetCode刷题:制定目标要做到了二年的坚持不懈
  • 6. 实践应用
  • 7. Google专家的推荐:一本改变我的书
  • 8. 持续学习与总结
  • 9. 结语
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档