Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 当应用于不同的容器时,具有相同代码的算法可以实现不同的有用目标_Algorithm_Language Agnostic_Stack_Queue - Fatal编程技术网

Algorithm 当应用于不同的容器时,具有相同代码的算法可以实现不同的有用目标

Algorithm 当应用于不同的容器时,具有相同代码的算法可以实现不同的有用目标,algorithm,language-agnostic,stack,queue,Algorithm,Language Agnostic,Stack,Queue,广度优先搜索和深度优先搜索是两种相同的算法,只是它们的功能和使用的数据结构不同 广度优先搜索: q := queue q.append(root node of tree) while q is not empty: n := q.pop() if n is the node being searched for: return n if n has children: c := children of node for i

广度优先搜索和深度优先搜索是两种相同的算法,只是它们的功能和使用的数据结构不同

广度优先搜索:

q := queue
q.append(root node of tree)
while q is not empty:
    n := q.pop()
    if n is the node being searched for:
        return n
    if n has children:
        c := children of node
        for i in c:
            q.push(i)
s := stack
s.append(root node of tree)
while s is not empty:
    n := s.pop()
    if n is the node being searched for:
        return n
    if n has children:
        c := children of node
        for i in c:
            s.push(i)
深度优先搜索:

q := queue
q.append(root node of tree)
while q is not empty:
    n := q.pop()
    if n is the node being searched for:
        return n
    if n has children:
        c := children of node
        for i in c:
            q.push(i)
s := stack
s.append(root node of tree)
while s is not empty:
    n := s.pop()
    if n is the node being searched for:
        return n
    if n has children:
        c := children of node
        for i in c:
            s.push(i)

还有其他算法或数据结构可以这样工作吗?

我想到的是Dijkstra的图形搜索算法和A*。它们本质上是相同的,除了如何选择循环的下一次迭代——Dijkstra的是广度优先——允许您找到最近的目标,A*是启发式深度优先,允许您找到一个迭代次数最少、挂钟时间最短的目标


事实上,我看到这两种算法都是用完全相同的代码实现的,允许您通过提供适当的回调来选择列表中的下一个节点来运行A*或Dijkstra,或者实际上是D*或其他算法。

想到的是Dijkstra的图形搜索算法和A*。它们本质上是相同的,除了如何选择循环的下一次迭代——Dijkstra的是广度优先——允许您找到最近的目标,A*是启发式深度优先,允许您找到一个迭代次数最少、挂钟时间最短的目标


事实上,我看到这两种算法都是用完全相同的代码实现的,允许您通过提供适当的回调来选择列表中的下一个节点来运行A*或Dijkstra,或者实际上是D*或其他算法。

有一个连续的算法家族Prim Dijkstra,它依赖于区间[0,1]中的一个参数。当参数为0时,得到Prim算法;当参数为1时,得到Dijkstra算法


Prim Dijkstra在计算具有两个冲突优化目标的图的子树时非常有用:最小化从源顶点到多个排水顶点的最大距离和最小化树的总长度。在实际应用中,通常需要将这两个量都绑定,因此使用中间参数执行Prim-Dijkstra。

有一系列连续的算法Prim-Dijkstra,依赖于区间[0,1]中的参数。当参数为0时,得到Prim算法;当参数为1时,得到Dijkstra算法


Prim Dijkstra在计算具有两个冲突优化目标的图的子树时非常有用:最小化从源顶点到多个排水顶点的最大距离和最小化树的总长度。在实际应用中,您通常希望绑定这两个量,因此使用中间参数执行Prim-Dijkstra。

两种算法是相同的,只是它们的作用和使用的数据结构不同。快速排序和Boruvka算法怎么样?我想你想完善这个标准。@Marcin除非我误解了Boruvka的算法,否则它们在操作上是不同的,而我指的是它们使用的是什么。好吧,那么BFS和Prim是一样的,它们都在图形上操作,并生成树!:我明白了@sweeneyrod的意思——如果您对队列和堆栈使用相同的变量名,比如说container,implementation of DFS==implementation of BFS,那么除了第一行代码之外。同样的代码给出了两种不同的算法,这确实很有趣。我不知道还有其他的例子。也许这个问题可以改写为相同的算法,当应用于不同的容器时,可以实现不同的有用目标。两个算法是相同的,除了它们的作用和它们使用的数据结构。快速排序和Boruvka算法怎么样?我想你想完善这个标准。@Marcin除非我误解了Boruvka的算法,否则它们在操作上是不同的,而我指的是它们使用的是什么。好吧,那么BFS和Prim是一样的,它们都在图形上操作,并生成树!:我明白了@sweeneyrod的意思——如果您对队列和堆栈使用相同的变量名,比如说container,implementation of DFS==implementation of BFS,那么除了第一行代码之外。同样的代码给出了两种不同的算法,这确实很有趣。我不知道还有其他的例子。也许这个问题可以改写为相同的算法,当应用到不同的容器时,可以实现不同的有用目标。