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

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

介绍


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


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


线性搜索


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

20210218100355499.gif


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


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


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


何时使用:


列表未排序时

当清单很小的时候


二进制搜索


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


20210218100425489.gif

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


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


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


何时使用:


列表排序时

当清单很大时


深度优先搜索(DFS)


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


20210218100540571.gif

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


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


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


何时使用:


当树很宽的时候

当目标值位于树的深处时

广度优先搜索(BFS)


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

20210218100636262.gif


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


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


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


何时使用:


当目标值离树的根不远时

当树很深时,目标值很少。

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


目录
相关文章
|
2月前
|
负载均衡 监控 算法
每个程序员都应该知道的 6 种负载均衡算法
每个程序员都应该知道的 6 种负载均衡算法
234 2
|
3月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
62 1
|
4月前
|
算法 搜索推荐 程序员
程序员常用算法详细讲解
每一种算法都有其适用场景,了解并熟悉这些常用算法的策略和实现,对于解决实际编程问题具有重要的意义。需要注意的是,理论知识的重要性虽然不言而喻,但真正的理解和掌握,还需要在实践中不断地尝试和错误,以达到深入理解的目的。
42 1
|
4月前
|
机器学习/深度学习 算法 搜索推荐
程序员必须掌握的算法
作为一名程序员,掌握一些重要的算法是必不可少的。算法是解决问题的方法和步骤,对于程序员来说,熟悉和掌握一些常见的算法可以提高编程能力,解决复杂的计算问题。与此同时,算法是计算机科学中的核心概念,对于程序员来说,掌握一些基本的算法是非常重要的。
53 1
|
6月前
|
算法 程序员
程序员必知:XGB算法梳理
程序员必知:XGB算法梳理
34 0
|
6月前
|
算法 JavaScript 程序员
程序员必知:《程序设计与算法(二)算法基础》《第一周枚举》熄灯问题POJ
程序员必知:《程序设计与算法(二)算法基础》《第一周枚举》熄灯问题POJ
36 0
|
7月前
|
机器学习/深度学习 人工智能 算法
每个程序员都应该知道的 40 个算法(四)(3)
每个程序员都应该知道的 40 个算法(四)
50 2
|
7月前
|
机器学习/深度学习 算法 数据挖掘
每个程序员都应该知道的 40 个算法(四)(4)
每个程序员都应该知道的 40 个算法(四)
51 1
|
7月前
|
NoSQL 算法 Java
【redis源码学习】持久化机制,java程序员面试算法宝典pdf
【redis源码学习】持久化机制,java程序员面试算法宝典pdf