您所做的任何事情都从搜索开始! 人工智能可以解决这些日常问题。 让我们了解BFS,DFS等…
> Photo by Jack Sloop on Unsplash
纵观历史,人类一直在寻找东西。 搜索使我们成为今天的我们。 在远古时代,i H $觅食者常常寻找生活必需品。 他们创建了一些工具来简化搜索过程。 人脑也在这个过程中进化。 现在,它可以创建该地区的思维导图,而觅食者可以将区V [ 4域映射到他们自己的头脑中,并可以更有效地进行搜索。 即使在现代,我们基本上也使用以前使用的相同策略。 但是现在,我们有了更先进的工具,我们的思想也有了更多发展。 我们使用地r S ; O d m * 6图来寻找方法,例如Google Maps之类的工具就是我们如何发展自己以更高效地进行搜索- E M g m l v的最佳示例。
我们在搜索中取u f { X d b a (得的最重大进步是由于技术的变化。 在计算机科学中,9 z H N d n P E我们将此术语称为算法。 随着大脑能力的增强,我们创建了更复杂,更高效的算法。 我们开发了这些解决方案来解决更复杂的问题。 算法可以使我们的生活更简单,并使N 8 q j X我们更高效。 从u U + V k N日常任务到创建世界一流的人工智能,搜索算法都是所有人类工~ n x作的基础。 在此博客中,我们将看到两种最基本的搜索算法,它们将为我们对更复杂算法的理解奠定基础。
不要 V y r b V让这种解释变得平淡无奇。 我们将以真实生活(LoL)为例来了解搜索本身的发展。 好的(?)
因此g X I A F X p A,显然我有一个女友丽莎(至少在我的想象中)J l * G : .。 她对所有w p G g Y使用的东西都很聪明,而且非常挑剔。 前几天,她在某处丢了口红。 这是她最喜欢的阴影。 就像我说的她非常挑剔一样,她不会适应其他阴影或任何其他品牌。 但是问题在于口红非常k A i _稀有,而且吓坏了。 现在,她计划购买新的。 我们附近的商店非常宽敞; 如H D 0 Y H果他们没有的话,他们会引导她去其他商店。 她可以通过几种方法开始搜索,让我们一一理解它们。
广度优先搜索(BFS)
> fig 1. Step 1 in BFS
丽莎是一个有组织的女孩。 另外,知道她家附近的一些美容店。 她在纸上列出了他们的名字。 假设有一些商店A,商店B和商店z K m J ^ S ` zC。她将在列表中输入商店的名称,并从上至下从A商店开始依次访问A。!,A商店 没有那种阴影,但他们建议她在其他商店购买。 她将这些名字列为Shop D和ShopE。她将紧随其后。 下一站,商店B。他们又没有了,但他们建议她去其他商店。 她也列出了它们,分别在F商店和G商店。接着,在C商店。现在她去了C商店。他们也没有,但是他们不能向她推荐任何商店。 最后,Lisa的清单如下所示。
> fig 2. Step 2 in BFS
下一步,她将参8 n {观商店A所有者建议的商店D。 如果他% J v L们没有,他们也会建议她去其他商店。 她将这些商店添加到列表中,并继续按顺序逐( + W 6 m个访问商店,直到找到那该死的口红。 她成功了。 她在商店G的m k U W * Y `老板建议的一家商店中找到了它。 那就是J店。让我们画一张她去过的所有这些商店的地Z K T s V图。 两个商店之间的连接表示N z ! w L E 该特定商店是另一商店建议的。 用i _ = 2正式术语来说,我们将此地图称为\"图形\",在这种情况下,称为\"树\"。
> fig 3. BFS M[ / 3 ^ F zAP (The digits on the lines represents the sZ j |equence inw . t ~ 6 which she visited those shops.)
这不是一件容易的事,但她得到了她最喜欢的口红。 您可以观z } 4 Q y ( C w r察到,Lisa按顺e V X w V q } C #序依次去了同一位店主建议的商店。 我们将这种方法称为广度优先搜索(BFS)算法,因为我们首先搜索先前已知的所有可用选项,并添加新选项以供日后使用。 但是这种方法的问题在于它会产生冗余。 观察商店K的情况,可以同时从商店F和商店G到达商店。而且她两次拜访商店的时间(请考虑自己是哑巴)。 BFS具有此规则以访问方式访问所有节点。 是否已经访问过它们都没关系。
深度优先搜索(DFS)
在我们以前的方法中,丽莎不得不走近10家商店才能获h : j s ? j r得口红。 让我们看看是否可以使Lisa的搜索更加高效。 让我们尝试另一种方法。这次,Lisa将以不同于以往的方式列出建议的商店。 这次,当她从某个商店获得建议时,会将其添加到列表的顶部。 最初的清单将有3家商店,与BFS相同。 参观商店A后,她y ~ A Y X U r的清` / ^ l单如下所示。
> fig 4. step 1 in DFS
她将标记已经去过的商店。 她将遵循相同的自上而下的方法。 因此,她的下一站将是D商店。她将在顶部r 2 ( 1 =添加D商店和E商店。 商店D的老板告诉她去我的商店。她去了那里,但找不到唇膏,而我的老板的商店没有告诉她任何其他商店。 丽莎参观了E店上方的所有商店。现在她的清单看起来像这样。
> fig 5e t ) *. Step 2 in DFS
回到商店A的建议的过程正式称为回溯。 商店E的所有者会告诉她去商店J(在列表顶部添加)和宾果游戏! 她找到了她最喜欢的口红。
让我们再次放置该图。
> fig 6. DFS MAP (The digits on the lines represents the sequence in which she visited those shops.)
丽莎走进了搜索树的深处,而不是去同一层的商店。 我们称这种方法为深度优先搜索算法。 从图中可以看出,Lisa只需要拜访5家商店,比我们的Bn ~ i KFS方法要少得多。 因此,可以说我们的DFS方法比BFS更好。 另外,如果她本来要通过商店F访问商店K,那么她就不会通过商店G访问它。因为她已经标记了它。 因此,通过这种方法,她在那里不会多次访问同一家商店。
Stack和Queue
让我们9 $ 2 F o A关注丽莎的清单。 仅通过更改输入新条目的方式,她就大大改善了搜索范围。 我们将此列表称为数据结构。 数据结构是一种将数据存储在计算机内存中某处的方法。 就丽莎而言,她将其存储在纸上。 但是,对于BFS和DFS,H Z $ _这种数据存储方式是不同的。
在BFS中,她在列表的末尾添加了新元素,并以自上而下的方式遵循了列表。 在之前的列表(即先进先出(FIFO))之后,将访问在她的列表中新添加的商店。 我们称这种数据结构为队列。 它的工作原理与我们在机场进行的排队相同。 第一位客户首先获得服务。 在队列中K k S o - r 6 &,从后面添加了新元素,而从前) =面删除了旧元素,这正是Lisa在BFS中所做的。
在DFS中,Lisa在列表顶部添加了新元素。 她没有更改自上而下的顺序。 在这种方法中,较新的元素要先访问较旧的元素,即后进先出(LIFO)。 我们将此数据结构称为堆栈。 在堆栈中,从l q ? D o b . }一端开始添加元素,然后从同; : / v ? E u一端删除元素,就丽莎而言,这是她列表的顶部,在那里她添加了新商店并顺序访问了这些商店。
结论
由于两个原因,DFS比BFS是更好的算法。
它不会在数据结构中创建冗余,因此不会访问已经访问过的同一节K $ # f @点。
它在计算上比BFS更轻松,更高效。
虽然,这两种算法都存在一些问题。 如果我们有一个包含数千个Z W h节点(商店)的较= X K } X # f大地图,则这些算法无法高效地找到目标节点。 看一下DFS映射,如果我们将车间L作为目标节点,则DFS的性能不会比BFS好得多。 尽管BFS存在搜索所有节点的问题,但DFS可能会浪费时间在错误的方向上进6 . ? % M行搜索。
为了解决这些问题,我们有更好的算法,例如AI系统中实际使用的启发式算法。 但这是另一天的博客。
(本文翻译自Arshad Kazi的文章《Search AlgP l { 2 & C f , iorithms In Artificial Intelligence》,参考:https://towarl ? b = ~ g Z T 2dsdatascience.com/search-algorithms-in-artificial-intelligQ 3 h k - * 7ence-5332fc560c7g 2 94)