每个程序员都应该知道的算法_算法

每个程序员都应该知道的算法

介绍

大家好,今天我要开始一个名为“每个程序员都应该知道的算法”的系列。在本系列中,我们将研究各种算法,例如搜索,排序,图形,数组等。

今天从搜索算法系列的第一部分开始。我们将研究每个程序员都应该知道的4种搜索算法。现在开始。


线性搜索

在计算机科学中,线性搜索或顺序搜索是一种用于在列表中查找元素的方法。它顺序检查列表中的每个元素,直到找到匹配项或搜索了整个列表。

每个程序员都应该知道的算法_算法_02

在线性搜索中,我们从列表的第一个元素到最后一个按顺序依次搜索列表中的目标元素。

最佳情况:目标值位于列表的第一位

最坏的情况:目标值是列表的最后位置

何时使用:

  • 列表未排序时
  • 当清单很小的时候

二进制搜索

在计算机科学中,二进制搜索(也称为半间隔搜索,对数搜索或二进制chop)是一种搜索算法,用于查找排序数组中目标值的位置。二进制搜索将目标值与数组的中间元素进行比较。如果它们不相等,则消除目标不能位于其中的那一半,并在剩余的一半上继续搜索,再次使中间元素与目标值进行比较。

每个程序员都应该知道的算法_线性搜索_03

在“二进制搜索”中,列表必须按某种排序的顺序。我们通过从列表中间选择一个值并进行比较来搜索目标值。如果不匹配,则如果目标值小于中间元素,则起始一半将被丢弃,否则终止一半将被丢弃。该过程将继续直到找到目标值。

最佳情况:目标值位于列表的中间位置

最坏的情况:目标值位于列表的第一个或最后一个位置

何时使用:

  • 列表排序时
  • 当清单很大时

深度优先搜索(DFS)

深度优先搜索(DFS)是用于遍历或搜索树或图形数据结构的算法。该算法从根节点开始(在图形的情况下,选择一些任意节点作为根节点),并在回溯之前尽可能沿着每个分支进行探索。

每个程序员都应该知道的算法_数组_04

在DFS中,我们选择图,树或数据结构的根,然后按顺序浏览每个分支。选择一个分支后,它将在更改为另一个分支之前先浏览其所有子分支。

最佳情况:目标值位于树的根位置

最坏的情况:目标值位于最后一个有序分支的子分支的顶端

何时使用:

  • 当树很宽的时候
  • 当目标值位于树的深处时

广度优先搜索(BFS)

广度优先搜索(BFS)是一种用于遍历或搜索树或图数据结构的算法。它从树的根部(或图的某个任意节点,有时称为“搜索关键字”)开始,并在移至下一个深度级别的节点之前先探索当前深度的所有邻居节点。

每个程序员都应该知道的算法_搜索_05

在BSF中,与在DFS中一样,我们选择图,树或数据结构的根节点。在节点之后,我们移至其所有相邻节点,然后移至下一层,即与分支相邻的所有节点。

最佳情况:目标值位于树的根位置

最坏的情况:目标值位于树的最长分支的顶端

何时使用:

  • 当目标值离树的根不远时
  • 当树很深时,目标值很少。

感谢您阅读本篇博客文章,希望您也喜欢。我很快将更新系列的下一部分。