数据结构与算法初学者_初学者学习数据结构和算法的终极指南

数据结构与算法初学者

深入了解算法和数据结构的工程师将能够做出明智的设计选择,并编写性能更高且更易于更改的程序。

心态

数据结构和算法对于任何程序员都是必不可少的。

我坚信,这两个主题的全面知识和技能是成为更好的程序员的关键。

我来了,我看到了,我征服了

作为初学者,您可能会对这些概念感到沮丧和沮丧。 术语数据结构和算法听起来既抽象又晦涩难懂。

不过不要担心。 对于初学者来说,这是正常的React。

当我开始学习这个主题时,我有同样的React。 您之所以有这种感觉,是因为您没有找到正确的方法来让您刻意研究该主题。 我将向您展示我的路线图,并分享我的建议。 继续阅读,耐心等待,并始终保持前进。

不要被数学吓到

数据结构和算法的确包含一些数学推理和证明,尤其是在分析算法的时间和空间复杂性时。

能够执行big-O复杂性分析当然很重要,但是您不必太担心它。 您不需要很高的智商或抽象的数学知识。
只要您了解高中数学,就拥有了解数据结构和算法所需的工具。

您现在看来不太可能。 在本文中,我将另当别论:经过几个月的定向学习和练习,您将可以放心地研究该主题。

本质上是什么数据结构和算法?

一般而言,数据结构是组织数据的一种方式,而算法是解决问题的方法或模式。

为了说明这一点,假设您要在图书馆中找到一本特定的书。

举个例子

您如何从图书馆中找到一本特定的书?

Method #1 :您可以先逐一检查书架,直到找到有问题的书。

Method #2 :您可以先根据相关书籍的类别找到书架。 您确定主题是否是人文,科学,计算机科学等,然后仅搜索该特定书架。

这些方法都是算法。 这是算法的定义: 一种可以通过编程实现的解决问题的方法

以此类推,书籍,书架及其排列方式都是数据结构。

具体来说,当我们谈论数据结构时,我们所指的是队列,堆栈,堆。 当我们说算法时,我们说的是二进制搜索,动态编程等等。

数据结构和算法共同代表了经过尝试和测试的抽象和问题解决模式。 它们是由该领域的先驱发明的。 他们做了艰苦的工作,我们可以利用它们来解决许多常见的开发问题。

数据结构和算法如何关联?

数据结构和算法是相辅相成的。 该算法存在数据结构,并且算法通常适合特定的数据结构。

例如,数组是连续的。 二进制搜索算法适用于直接访问连续内存,因此使用数组存储二进制搜索算法的数据。

相反,如果我们想使用其他数据结构(例如链表),则二进制搜索算法将无法工作,因为链表数据结构不支持直接访问。

步骤

选择一些好书和资源

关于数据结构和算法,有几本经典著作。 它们是有用的资源,但对于初学者来说可能很难。 首先,最好使用使用已知语言的资源。

C: 算法是您的选择

Java:Java的数据结构和抽象

Python: 使用Python解决算法和数据结构的问题

可视化将帮助您了解数据结构和算法的工作方式。 您可以从以下站点找到这种很棒的动画: visualgo.net。

学习基本数据结构

一些数据结构和算法(例如二部图,最大流等)不那么直观。 所有通用算法都是有用的工具,但是您很少需要在日常开发中使用它们。

如果您首先坚持学习更直观,更通用的算法,那么您最终将能够掌握更多困难的利基技术。

我建议从以下11种基本数据结构开始:

array , linked list , stack , queue , hash table, 
map , heap, binary tree, trie tree, 
graph, skip list

了解它们如何工作,如何实现,它们的通用API以及它们在big-O复杂性方面的表现。

此外, GeeksforGeeks具有使用数据结构的许多良好实践。

学习基本算法设计模式

根据我的经验,在研究算法时,尝试记住步骤和实现细节通常不是最佳策略。

如果您不了解它的工作原理,那么您可能永远也不会记得这些细节。 当涉及到算法时,通常的理解才是最重要的。

不要试图记住您所阅读的实现的每一个细节。 相反,尝试自己重新发明,推理和重新实现该算法。

这是我学习算法的首选工作流程。 反复遵循它会产生实质性结果。

重复此过程将使您更有效地学习。

这些基本算法是最常用的算法。 通过遵循故意练习的原则,您应该一次专注于一种特定的算法类别,并尝试按顺序理解它们。

还有一些更难的问题需要调整,或者需要您结合使用几种算法才能找到可行的解决方案。

通过实践学习

多个网站可以帮助您精心设计数据结构和算法。 我推荐这两个,它们都有出色的在线评审系统:

Leetcode 详细列出大公司(例如Facebook,Google,Amazon)提出的几乎所有常见面试问题; 一个非常有用的面试资源。

HackerRank 其中的数据结构和算法类别非常简洁,并提供数学,数据库和安全性课程。 它还使您可以参加编程竞赛,很有趣。

另一种实践的好方法是创建使用一个特定数据结构或算法的琐碎项目。

例如, 该项目使用联合集数据结构创建迷宫,并尝试实现寻路算法。 完成此类小型项目将增强您的信心,并教会您使用它来创建实际的应用程序。

更深入

更多书籍

《算法导论》第三版是进行深入研究的绝佳选择。 关于算法推理的部分很棒,它还提供了有关复杂性分析和数学工具的更多详细信息。

我推荐的另一本书是《计算机编程的艺术》 。 很少有程序员从头到尾阅读它,但它仍然可能是该主题的最终权威性深入参考。 它涵盖了编程的几乎所有方面,并且其关于数据结构和算法的部分首屈一指。

向真实的项目学习

知识和技能仅在应用于有形产品时才重要。

例如,您可能会对Google的搜索建议在数据结构或算法方面的工作方式感到好奇。

您还可以从现有代码中学到很多东西。 著名的开源项目可能是非常有用的教学工具。

Redis演示了许多常用数据结构的用法,并进行了许多与性能相关的优化。 Linux内核严重依赖于链表,红黑树,哈希等数据结构,并以各种方式微调其实现。

您不应立即掌握这些内容。 但是经过多年的实践,您会发现数据结构已经成为您选择的抽象工具,并且将数据结构适合于自定义算法已成为解决问题的简便方法。

*保持好奇心并继续练习!*

相关文章:

Quicksort:历史和实现

成为优秀的程序员:心态和学习策略

翻译自: https://hackernoon.com/how-to-learn-data-structures-and-algorithms-an-ultimate-guide-for-beginners-jy2532z8

数据结构与算法初学者

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值