Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Performance 还是双向广度优先搜索?_Performance_Search_Breadth First Search_A Star - Fatal编程技术网

Performance 还是双向广度优先搜索?

Performance 还是双向广度优先搜索?,performance,search,breadth-first-search,a-star,Performance,Search,Breadth First Search,A Star,不确定这是不是该问的地方但是 我已经用Java编程了一个双向广度优先搜索算法,它同时从图中的开始节点和图中的目标节点进行搜索。在一个有3000000(300万)个节点的图中,所有节点平均与4个其他节点(通过双向/双向边连接)连接,在一个普通CPU上平均只需要0.5秒就可以找到任意两个随机节点之间的最短路径,大约10秒是我在30次测试运行中发现的最坏情况 假设只需要搜索一条路径(例如,在起点和终点之间绘制路线时),在这种情况下,使用a*算法和适当的启发式有什么好处?是的,找到路径可能会稍微快一点,

不确定这是不是该问的地方但是

我已经用Java编程了一个双向广度优先搜索算法,它同时从图中的开始节点和图中的目标节点进行搜索。在一个有3000000(300万)个节点的图中,所有节点平均与4个其他节点(通过双向/双向边连接)连接,在一个普通CPU上平均只需要0.5秒就可以找到任意两个随机节点之间的最短路径,大约10秒是我在30次测试运行中发现的最坏情况


假设只需要搜索一条路径(例如,在起点和终点之间绘制路线时),在这种情况下,使用a*算法和适当的启发式有什么好处?是的,找到路径可能会稍微快一点,但a*很可能找不到最短的路径

有人能详细说明为什么经常选择A*而不是双向广度优先搜索,以及它在性能(计算时间、内存使用、找到最佳解决方案的机会等)方面有哪些优势吗

而且,
大家复活节快乐

双向搜索在可行时非常有用,但它依赖于能够像开始节点一样轻松地生成目标节点(例如,在国际象棋游戏中如何选择目标节点?),并且分支因子在两个方向上相似。它依赖于能够倒退,达到这一点。即使你有一个很好的启发式,你也不可能在搜索的相反部分从中获得很大的优势。

“但是a*很可能找不到最短路径”-如果你的a*没有找到最短路径,那么你的a*算法或启发式是错误的。如果您没有尝试过,只是认为它找不到最短路径,那么您对A*的理解是错误的。@user2357112您需要有一个完美的启发式,才能用A*找到最短路径,据我所知,在寻找图中任意两点之间的路径时,没有一种完美的启发式方法。@user2357112让我自己更正一下:有一些完美的启发式方法,但对于这些启发式方法,a*算法的性能实际上与广度优先算法相同。“你需要有一个完美的启发式,才能用a*找到最短路径。”-不,你不会。你需要一个启发式,并且为了高效的实现,你通常需要一个启发式。如果启发式是可接受的(或在图搜索中是单调的),那么a*保证首先找到一个最佳解决方案。