您所做的任何事情都从搜索开始! 人工智能可以解决这些日常问题。 让我们了解BFS,DFS等…
纵观历史,人类一直在寻找东西。 搜索使我们成为今天的我们。 在远古时代,觅食者常常寻找生活必需品。 他们创建了一些工具来简化搜索过程。 人脑也在这个过程中进化。 现在,它可以创建该地区的思维导图,而觅食者可以将区域映射到他们自己的头脑中,并可以更有效地进行搜索。 即使在现代,我们基本上也使用以前使用的相同策略。 但是现在,我们有了更先进的工具,我们的思想也有了更多发展。 我们使用地图来寻找方法,例如Google Maps之类的工具就是我们如何发展自己以更高效地进行搜索的最佳示例。
我们在搜索中取得的最重大进步是由于技术的变化。 在计算机科学中,我们将此术语称为算法。 随着大脑能力的增强,我们创建了更复杂,更高效的算法。 我们开发了这些解决方案来解决更复杂的问题。 算法可以使我们的生活更简单,并使我们更高效。 从日常任务到创建世界一流的人工智能,搜索算法都是所有人类工作的基础。 在此博客中,我们将看到两种最基本的搜索算法,它们将为我们对更复杂算法的理解奠定基础。
不要让这种解释变得平淡无奇。 我们将以真实生活(LoL)为例来了解搜索本身的发展。 好的(?)
因此,显然我有一个女友丽莎(至少在我的想象中)。 她对所有使用的东西都很聪明,而且非常挑剔。 前几天,她在某处丢了口红。 这是她最喜欢的阴影。 就像我说的她非常挑剔一样,她不会适应其他阴影或任何其他品牌。 但是问题在于口红非常稀有,而且吓坏了。 现在,她计划购买新的。 我们附近的商店非常宽敞; 如果他们没有的话,他们会引导她去其他商店。 她可以通过几种方法开始搜索,让我们一一理解它们。
广度优先搜索(BFS)
> fig 1. Step 1 in BFS
丽莎是一个有组织的女孩。 另外,知道她家附近的一些美容店。 她在纸上列出了他们的名字。 假设有一些商店A,商店B和商店C。她将在列表中输入商店的名称,并从上至下从A商店开始依次访问A。!,A商店 没有那种阴影,但他们建议她在其他商店购买。 她将这些名字列为Shop D和ShopE。她将紧随其后。 下一站,商店B。他们又没有了,但他们建议她去其他商店。 她也列出了它们,分别在F商店和G商店。接着,在C商店。现在她去了C商店。他们也没有,但是他们不能向她推荐任何商店。 最后,Lisa的清单如下所示。
> fig 2. Step 2 in BFS
下一步,她将参观商店A所有者建议的商店D。 如果他们没有,他们也会建议她去其他商店。 她将这些商店添加到列表中,并继续按顺序逐个访问商店,直到找到那该死的口红。 她成功了。 她在商店G的老板建议的一家商店中找到了它。 那就是J店。让我们画一张她去过的所有这些商店的地图。 两个商店之间的连接表示该特定商店是另一商店建议的。 用正式术语来说,我们将此地图称为"图形",在这种情况下,称为"树"。
> fig 3. BFS MAP (The digits on the lines represents the sequence in which she visited those shops.)
这不是一件容易的事,但她得到了她最喜欢的口红。 您可以观察到,Lisa按顺序依次去了同一位店主建议的商店。 我们将这种方法称为广度优先搜索(BFS)算法,因为我们首先搜索先前已知的所有可用选项,并添加新选项以供日后使用。 但是这种方法的问题在于它会产生冗余。 观察商店K的情况,可以同时从商店F和商店G到达商店。而且她两次拜访商店的时间(请考虑自己是哑巴)。 BFS具有此规则以访问方式访问所有节点。 是否已经访问过它们都没关系。
深度优先搜索(DFS)
在我们以前的方法中,丽莎不得不走近10家商店才能获得口红。 让我们看看是否可以使Lisa的搜索更加高效。 让我们尝试另一种方法。这次,Lisa将以不同于以往的方式列出建议的商店。 这次,当她从某个商店获得建议时,会将其添加到列表的顶部。 最初的清单将有3家商店,与BFS相同。 参观商店A后,她的清单如下所示。
> fig 4. step 1 in DFS
她将标记已经去过的商店。 她将遵循相同的自上而下的方法。 因此,她的下一站将是D商店。她将在顶部添加D商店和E商店。 商店D的老板告诉她去我的商店。她去了那里,但找不到唇膏,而我的老板的商店没有告诉她任何其他商店。 丽莎参观了E店上方的所有商店。现在她的清单看起来像这样。
> fig 5. 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家商店,比我们的BFS方法要少得多。 因此,可以说我们的DFS方法比BFS更好。 另外,如果她本来要通过商店F访问商店K,那么她就不会通过商店G访问它。因为她已经标记了它。 因此,通过这种方法,她在那里不会多次访问同一家商店。
Stack和Queue
让我们关注丽莎的清单。 仅通过更改输入新条目的方式,她就大大改善了搜索范围。 我们将此列表称为数据结构。 数据结构是一种将数据存储在计算机内存中某处的方法。 就丽莎而言,她将其存储在纸上。 但是,对于BFS和DFS,这种数据存储方式是不同的。
在BFS中,她在列表的末尾添加了新元素,并以自上而下的方式遵循了列表。 在之前的列表(即先进先出(FIFO))之后,将访问在她的列表中新添加的商店。 我们称这种数据结构为队列。 它的工作原理与我们在机场进行的排队相同。 第一位客户首先获得服务。 在队列中,从后面添加了新元素,而从前面删除了旧元素,这正是Lisa在BFS中所做的。
在DFS中,Lisa在列表顶部添加了新元素。 她没有更改自上而下的顺序。 在这种方法中,较新的元素要先访问较旧的元素,即后进先出(LIFO)。 我们将此数据结构称为堆栈。 在堆栈中,从一端开始添加元素,然后从同一端删除元素,就丽莎而言,这是她列表的顶部,在那里她添加了新商店并顺序访问了这些商店。
结论
由于两个原因,DFS比BFS是更好的算法。
· 它不会在数据结构中创建冗余,因此不会访问已经访问过的同一节点。
· 它在计算上比BFS更轻松,更高效。
虽然,这两种算法都存在一些问题。 如果我们有一个包含数千个节点(商店)的较大地图,则这些算法无法高效地找到目标节点。 看一下DFS映射,如果我们将车间L作为目标节点,则DFS的性能不会比BFS好得多。 尽管BFS存在搜索所有节点的问题,但DFS可能会浪费时间在错误的方向上进行搜索。
为了解决这些问题,我们有更好的算法,例如AI系统中实际使用的启发式算法。 但这是另一天的博客。
-
算法
+关注
关注
23文章
4586浏览量
92463 -
人工智能
+关注
关注
1789文章
46572浏览量
236890
发布评论请先 登录
相关推荐
评论