程序员必备:实用数据结构和算法基础指南

发表时间: 2022-04-18 01:30

你觉得编程问题欺负你吗?

别担心,我的朋友,这篇文章将为您提供一个全面的主题列表,无论您想在一家以产品为基础的公司进行面试,还是成为一名根据您创建的产品获得报酬的自由职业者,您都应该了解这些主题。


数组

这简直是世界上最常用的数据结构,没有数组的知识,程序员肯定会嘲笑你。


对于阵列技能,您应该关注的是:

搜索:线性搜索和二分搜索绝对是必不可少的知识。

排序:学习一些排序算法以及它们之间的权衡。 您可以从冒泡排序和选择排序等简单的排序开始,但绝对应该具备插入排序、归并排序和快速排序的知识。

多维数组:不要只局限于一维数组,你也可以使用二维数组,俗称矩阵,但你很少超越二维数组(除非你在数据科学领域)。


链表

如果您试图进入实际编程,链接列表并不是那么有用,让人们可以安全地跳过它。 但对于试图进入 FANG(MANG、MIMANNG 或其他任何你想称呼他们)的人来说,这是一项必备技能。

从单链表开始,然后转到双链表和循环链表。

您还应该练习有关遍历、相交链表、合并链表和反转链表的问题。

尽管链表的使用很少见,但它们的一个很酷的应用是在创建缓存时


堆栈、队列和双端队列

有时它们也被称为伪数据结构,因为它们不需要严格的排序,例如数组中的连续内存块或链表的指针结构。

堆栈、队列和双端队列可以使用数组和链表来实现。 唯一的要求是遵循 LIFO、FIFO 和 Deque 范式(尽管链表比数组更适合实现)。

在大多数情况下,对这些数据结构有一些实践经验就足够了。


哈希映射和哈希列表

哈希映射可能是地球上使用最多的数据结构,仅次于数组。 它们被广泛用于高效搜索。 从 JavaScript 对象到 Python 字典,它们无处不在。

哈希列表的使用并不常见,但它们也有小众应用。 在大多数语言中,它们被称为集合。

使用散列算法的知识不是必需的,但它确实可以为您带来额外的布朗尼积分。 对于这些,您也可以掌握一些基本的实践知识。

有了这些,你就有足够的经验称自己是一个体面的程序员……只是不要太自大,历史不会善待自大的人。

让我们继续讨论列表中的其他项目……


树木

树是非常有用的数据结构,尤其是在存储分层数据时。

有一些常用的特定类型的树:

二叉树:二叉树是一棵树,其中每个节点最多有两个孩子。

二叉搜索树:二叉搜索树是一棵二叉树,其中所有节点的排列方式是节点的左子树只包含键小于节点键的节点,右子树包含键大于节点的节点 比节点的密钥。

Trie:trie,也称为前缀树,是一种树数据结构,通常用于预处理一组字符串。

对于树,您应该学习遍历、搜索和节点插入。

很少需要通用树的知识,但如果您是 Web 开发人员,这将是您武器库中的重要资产。 它将帮助您了解 DOM 的操作方式,甚至以编程方式创建复杂的嵌套 UI,而无需对其进行硬编码。


图表

图也是很少用于面试和实际编程的数据结构。 它们通常用于数据分析和可视化。

地图软件和社交媒体分析师等一些高级应用程序广泛使用图表。

遍历、搜索和最短路径(尤其是 Dijkstra 算法)是图领域所需的最关键技能。


算法

除了特定于数据结构的算法之外,需要熟悉的一些关键范例是:

递归:递归是一种解决计算问题的方法,其中解决方案取决于同一问题的微小实例的解决方案。

贪心:贪心算法是一种通过选择当前可用的最佳选项来解决问题的方法

动态规划:动态规划是一种将问题分解为子问题并保存结果以备将来使用的技术,这样我们就不需要再次计算结果。

回溯:一种递归技术,用于逐步构建解决方案,一次一个,删除那些在任何时间点无法满足问题约束的解决方案。