当前位置: 首页 > 科技观察

软件工程师编码面试的十大算法

时间:2023-03-23 11:09:06 科技观察

你刚从大学毕业并获得计算机科学或软件工程学位,正在寻找工作。在决定成为一名开发人员之前,您还记得喜欢做一个编码的单身汉并与您的伙伴一起从事一些很酷的项目。您开始准备工作面试,但无法弄清楚要记住哪些算法对工作评分很重要。如果您处于那个职位,并且您的面试速度足够快,那么本文将帮助您记住求职面试可能需要的所有编码算法。软件工程师的基本工作描述涉及设计、增强和实施系统和应用程序。为此,软件工程师不需要记住很多复杂的算法。相反,他们被要求结合使用工作库、框架和数据库来创建满足其软件需求的工具。据软件工程领域的专家称,了解一些高级搜索算法有助于优化它们,否则,您更有可能使用内置库。话虽如此,这里列出了一些重要的算法,您在面试时应该具备一些基本知识。动态规划动态规划是一种通过消除递归调用的需要来优化隐式函数的策略。每当我们看到一个递归函数,其中某一部分代码被多次调用时,使用动态规划可以大大改善它。通过存储先前子函数的结果来消除递归,这样它们就不必被多次调用。这将时间复杂度从指数时间降低到多项式时间。属于动态规划类别的算法示例如下:二分搜索顾名思义,搜索算法用于从称为数据结构的给定集合中搜索元素。当提供已排序的元素数组和搜索键时,二分搜索有效。二分查找的工作原理是选择中间的元素与查找的key进行比较,如果key小于中间元素的左边部分,则以同样的方式遍历。如果现在搜索右侧部分的密钥。二分查找的时间复杂度为O(logn),其中n是数组中元素的个数。排序算法排序算法用于对数组进行排序,输入包含要排序的数据类型。数据集可以按升序或降序排序。这里有一些需要记住的重要排序算法。归并排序归并排序是基于分而治之算法的原理。它指的是将问题分解成更小的部分,一个一个地解决它们,最后将它们合并在一起的做法。合并排序将数组分成两半,并在两半上调用排序函数,对两半进行排序,然后使用合并函数将它们合并在一起。归并排序的时间复杂度是O(nlogn)。快速排序与合并排序一样,快速排序也基于分而治之算法,该算法在排序功能方面与合并排序不同。快速排序的工作原理是选择最后一个元素作为基准编号,并将其放在中间,较小的数字在左边,较大的数字在右边。左右用排序函数再次调用,结果是整个数组排序完毕。快速排序的时间复杂度是O(n^2)。深度优先搜索DFS是一种搜索算法,它从一个节点开始搜索过程,并向下搜索到最左边分支的最后一片叶子。到达最左边的叶子后,算法开始回溯并遍历树的右侧,依此类推。这个DFS的问题是一个节点如果有环的话可以访问多次。DFS的时间复杂度为O(V+E),其中V和E分别表示图中的顶点数和边数。广度优先搜索BFS是一种与DFS一样从根开始的搜索算法。但是,它没有遍历左侧的所有叶子,而是搜索同一层附近的节点。遍历一级后,算法进入下一级并继续遍历,直到找到一个元素。BFS的时间复杂度和DFS一样,都是O(V+E)。自定义数据结构有时,典型的预定义数据结构无法完成工作,您需要更好、更强大的东西。自定义数据结构可以是真实的或抽象的对象,这取决于它们的数据成员的用途。数据成员可以被认为是属于给定对象的变量。哈希表哈希表是一种用于在O(1)时间内存储、访问和修改数据的数据结构。哈希数据结构使用哈希函数将给定值映射到特定键。然后使用此密钥快速访问和检索这些值,执行哈希的效率取决于所使用的哈希函数的类型。链接列表通常,数组或任何链接数据结构的组件存储在连续的内存位置中。这会占用空间,并且某些内存块将无法访问(也就是说,如果内存不足)。为了克服这个问题,使用链表数据结构,其中数据不是连续存储的,但列表中的每个项目都有一个指向下一个元素存储位置的指针。第一个元素称为head,最后一个元素称为tail。问问题软件工程师应该知道的最重要的事情就是问客户。大多数客户无法理解他们的观点,如果开发商不提出任何问题,可能会因沟通不畅而出现问题。这样,您将能够了解他们试图实现的核心问题,而不仅仅是他们面临的困难。结论有了这些基本算法的知识,就可以轻松进行面试。请记住,软件工程师通常不依赖这些算法来完成他们的工作。相反,它们被用来测试个人对他是否知道代码如何工作的理解。话虽如此,祝你下次面试好运。