任何人都可以在此算法中提出实际问题吗插入排序,呼吸优先搜索,深度优先搜索或拓扑排序?谢谢。
Real-world examples of recursion
我在这里看到了示例但我需要的是插入排序,呼吸优先搜索,深度优先搜索或拓扑排序算法的特定问题。
我希望你能帮帮我。
答案 0 :(得分:2)
它比我们日常的,单调的生活更真实吗?
插入排序是我们(或至少我)最常用的东西,当我们需要对事物进行排序时。考虑一副卡片 - 一个将逐个覆盖它们,将最小的一个放在前面,小一些放在它们后面等等。或者一堆文书工作需要按日期排序,相同的算法。
在CS中,插入排序不太常用,因为我们有更好的算法(qsort和merge-sort浮现在脑海中)。人类也可以做到这一点,但这确实是一项更乏味的任务。
广度优先搜索的使用在名称中:当我们想要水平地越过树而不是垂直。假设您听说您的家人与俄罗斯艺术家Ilya Repin有联系。你去阁楼,打开巨大的木箱,收集灰尘,并取出可追溯到19世纪的古老的家族树(并不是每个人都有这个?)。你知道他离树顶更近,而不是他的底部,所以你先走广告:先走第一行,然后是第二行,依此类推......再多一点...... Efim Repin。 ..bingo!
如果Ilya Repin碰巧在树的最左边的分支,那么深度优先将更有意义。但是,在一般情况下,你需要先进行广度优先,因为我们知道我们的目标更接近根,而不是叶子。在CS中有一些使用案例(Cheney's Algorithm,A*等等。您可以看到更多on wikipedia}。
深度优先搜索用于我们... drumroll ...想要首先去树的深处,垂直行进。有许多用途我甚至无法开始,但最简单和最常见的是解决谷物盒迷宫。你走过一条路,直到你到达死胡同,然后你回溯。我们没有完美地做到这一点,因为我们有时会跳过一条路或忘记我们采取了哪一条,但我们仍然这样做。
在CS中,有很多用例,所以我会再次重定向to wikipedia。
拓扑排序我们中的一些人在脑后使用,但很容易在厨师,厨师,程序员,任何人和每个必须执行一系列有序任务的人身上看到。我的祖母做了最好的Canneloni我吃了,她非常简单的食谱是由几个简单的步骤构成的(我已经设法忘记了,但这里是他们非常概括的大纲):制作“煎饼”包装,制作酱汁并将它们包裹在一起。现在,我们不能在不制作它们的情况下将它们包起来,所以很自然地,我们首先必须制作包装和酱汁,然后再包装它们。
在CS中,它用于完全相同的事情:调度。我认为Excel使用它来计算相关的电子表格公式(或者它可能只使用一个简单的递归算法,效率可能较低)。还有一些,您可以看到我们的好朋友wikipedia和random article I found。
答案 1 :(得分:1)
我使用Hierarchical Datastructures,并且总是需要BFS来查找需要嵌套在特定根目录下的对象...
例如查找(/替换)
有些时候(显然更少)我使用DFS来检查一些在不调查叶子的情况下无法评估的设计约束。
虽然没有被我使用,但并不完全是BFS,
但GPS导航软件使用A *来搜索好路径,
哪个是“加权BFS”的孩子
答案 2 :(得分:1)
插入排序 - 无,这对学习有好处。在计算机外部,它经常用于对卡片进行分类。在现实世界中,合并排序或快速排序更好。
BFS - 查找已连接的节点,查找最短路径。 Dijkstra算法的基础和A *(Dijkstra的更快版本)。
DFS - 查找已连接的节点,在树中编号节点。
拓扑排序 - 找到正确的任务顺序。