热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

大一学生数据结构与算法的先后取舍

【来信】在上学期,突然一天一位学长问我要选择哪个方向,指的是算法和一般的开发。我回答他算法,而他说我对语言学的太心急,太快,不像是喜欢算法的,并和我说算法玩玩就好,不要陷得太深,并建议我走

【来信】
  在上学期,突然一天一位学长问我要选择哪个方向,指的是算法和一般的开发。我回答他算法,而他说我对语言学的太心急,太快,不像是喜欢算法的,并和我说算法玩玩就好,不要陷得太深,并建议我走一般开发的路子。虽然学长学的挺好,但就比我大一岁,我还是不太相信他说的。后来在学校acm实验室纳新时,我还是按捺加不住入了。
  加入后,我开始对算法有了一点了解,并开始学习算法。本来我就是在我校oj上刷刷题。放假时借了本 《算法之道》,想在假期恶补一下,可是发现看不太懂。索性就不看了。因为acm实验室的题目在hdu上,我也转移到了hdu刷题。后来碰到不会的题,问了一下学长,他看完题告诉我该去学习动态规划了。于是我开始看博客,找动态规划的题目和讲解,后来发现一个博客上面讲的挺好,就一直在那个博客看,看到图的时候,我懵了,那时候我还不知道什么是数据结构,于是我又开始学数据结构。我想数据结构和算法同时学习。开始发现了一本很简单的书《啊哈算法》,在快看完时,我发现这本书讲的数据结构比较浅显,而且还不全,很多内容都在还没出版的下一册书上,我感觉对数据结构的讲解也有点乱,而且我对里面的数据结构看的也是模模糊糊,因为书内讲的太少,我也练的少,于是在快开学时我放弃了这本书。打算从头开始系统的系统的学习数据结构,于是找了好多书,找到了一本《大话数据结构》从头开始学习,然后去找对应的题目去练习,我也跟着实验室学长的步子,在hdu做练习,贪心,动态规划。可是我还没练熟呢,学长就切换到另一种算法了。当我意识到我的种种问题并打算从新开始时,也快开学了。开学后我在学数据结构做习题时担心我的算法学习。练习贪心和动态规划时又担心我的数据结构弄不太好。我什么都没学好。而且假期学的也因为练习过少,记住的并不太多。
  我现在不知道在学习算法和学习数据结构之间该哪个先学,哪个后学。我怕我学了数据结构,算法学习上被人拉开。可是不学数据结构,有些涉及到数据结构的题目还搞不定。我想同时学习,现在的结果就是都懂点,仅仅是懂点。我对acm也不太了解,我不知道我先学了数据结构,再去学习算法会不会有点晚。。老师给指点一下,哪个在先,哪个在后,我对这两个的先后难以做出取舍。如果同时学,我肯定都学不好,因为还要抽出大量时间学C++,补习英语。我也感觉时间有点紧。我现在可纠结了。

【回复】
  这封信看到一半的时候,我还真喜欢你东一榔头西一锤子的做法。作为一名大一的学生,就通过这样的方法去开阔视野,去到一个个未来要接触的空间中小试一把,这是很有价值的尝试。看到后面,我感觉应该和你探讨一种思路,怎样让自己的学习有序一些,有效一些。
  你所谓的算法、数据结构,大概是受了现在开课的体系,或者是某本书的影响了。实际上,这样分开看,是将这二者之间的血肉联系断开了的。在学习过程中,如果能够始终将两者融为一体看,那才是全面的学习。对于大规模的人才培养而言,必然需要用一种体系,实施专业能力的培养。要知道,我们所用的体系,是诸多可以用的体系中的一种,而不是绝对的唯一。作为你个人,在培养方案以外,自己自主地去拓展一些,抛开这些束缚,形成自己的体系,方显出更大的价值。
  实际上,我们所经历的基础教育,是人不敢也不会作个性化安排的教育。如果可能,在大学,我们可以尝试具备突破的能力。否则毕业时,都是同质的学生,说就业难,统统都难。同时,创新性也便少了许多。我希望你看到你之前学习的价值,少一些惊慌。《破除“系统学习”的情结》和《 改变学习模式,在课外学习中获得突破》两篇旧文供你参考。这两篇文章谈得范一些,而你现在有明确地目标,是在算法与数据结构这一专业中很重要的基本功方面要加强,是更简单些的问题。放弃一些束缚,按着让自己更有效的、更个性的方式学习吧。
  以上是我对你面临问题的看法。而到具体安排的层面上,我觉得你一定不能落入到简单模仿学长的轨道中去。学长比你多一年的积累,他体会过的,你尚未经历,怎么能按他的步子走?我建议你现在也不必抱着一本数据结构的书“系统地学”,没有必要。两本比较浅显的书已经看过,建议你找一本专攻竞赛的书(红书、黑书,或其他)看,这样的书中的算法与数据结构是结合在一起的。若遇到里面讲的数据结构方面有些障碍了,也可以找本数据结构的课本,将相关的内容翻一翻,不排除将某段的内容深入学一下。要知道在用一本书时,不是拿到书,就从头到尾说要细读下去。大多数书,就是用到哪儿了,就看哪儿。一本书做主线,其余的都是帮衬。
  有你信中所说的积累,C++对你不会是负担,而至于英语,以及其他的科目,做好自己的时间安排,让学习、生活的保持一定的节奏,都不是问题。
  以上是我的观点,未尽之处,我们可以继续交流。祝学有所成!


推荐阅读
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 线性Kalman滤波器在多自由度车辆悬架主动控制中的应用研究
    本文探讨了线性Kalman滤波器(LKF)在不同自由度(2、4、7)的车辆悬架系统中进行主动控制的应用。通过详细的仿真分析,展示了LKF在提升悬架性能方面的潜力,并总结了调参过程中的关键要点。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨如何设计一个安全的加密和验证算法,确保生成的密码具有高随机性和低重复率,并提供相应的验证机制。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
author-avatar
无心少年丶的诱惑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有