问题:在一个无权、无向的图中寻找最短路径。
广度优先搜索可以找到两个节点之间的最短路径,但是这可能需要O(|V| + |E|)的时间。预计算查找表可以在O(1)的时间内回答请求,但代价是O(|V| ^ 2)的空间。
我想知道的是:是否有一种算法提供了更细粒度的时空权衡?换句话说,是否有一种算法:
1.在比双向广度优先搜索更快的时间内找到最短路径; 2.使用的预计算数据占用的空间小于O(|V| ^ 2)?
在实践中,该图有800,000个节点,被认为是一个小世界网络。全对最短路径表将达到几千兆字节的数量级 - 这在今天不算过分,但它不能满足我们的要求。
然而,我问这个问题只是出于好奇。让我失眠的不是“如何减少全对查找表的缓存未命中?”,而是“是否有完全不同的算法存在,而我从未听说过?”答案可能是否定的,那也没关系。
广度优先搜索可以找到两个节点之间的最短路径,但是这可能需要O(|V| + |E|)的时间。预计算查找表可以在O(1)的时间内回答请求,但代价是O(|V| ^ 2)的空间。
我想知道的是:是否有一种算法提供了更细粒度的时空权衡?换句话说,是否有一种算法:
1.在比双向广度优先搜索更快的时间内找到最短路径; 2.使用的预计算数据占用的空间小于O(|V| ^ 2)?
在实践中,该图有800,000个节点,被认为是一个小世界网络。全对最短路径表将达到几千兆字节的数量级 - 这在今天不算过分,但它不能满足我们的要求。
然而,我问这个问题只是出于好奇。让我失眠的不是“如何减少全对查找表的缓存未命中?”,而是“是否有完全不同的算法存在,而我从未听说过?”答案可能是否定的,那也没关系。