![]() |
1
6
实际上,考虑到你有大约10个向量,你可以 最 点,只计算 1024个“靶子” 从向量的子集——例如每个可到达的空间,以及关于哪一组移动到那里的信息。这可能是“慢”的,也可能是“快”的,这取决于上下文(如果在类似GPU的并行计算设备上实现的话,速度是荒谬的快)。 有了所有到达那里的集合,你可以更快地计算出路径,然后你可以选择要到达的点。 最 在最少的移动中,从查询或进一步查询的子集中进行选择。 (多亏了斯特里兰克) |
![]() |
2
5
我相信您将能够对一个*(又名星)路径查找算法进行一般化的应用。没有理由不能在第N个空间中完成。如果你能描述每一步的成本,它是最理想的路径。 |
![]() |
3
5
所以你想找到向量集的一个子集,这样子集就等于一个给定的值。在一维中,这称为 subset sum problem ,并且是NP完全的。 幸运的是,您只有大约10个向量,所以您的问题大小实际上非常小,而且很容易处理。首先,尝试每个起点的所有2^10个移动组合,并选择最佳组合。然后从那里开始寻找简单的优化。 一些可能有效的简单优化:
|
![]() |
4
2
假设你有起点和一组固定的向量,你能计算出所有可到达目的地的列表,然后仅仅查找一个给定的目的地吗? |
![]() |
5
1
正如科内尔所说,您最多有2^10=1024个可到达的目的地。因此,您可以通过简单的递归生成,在2^n时间内生成所有可到达的目的地(其中n是向量数)。当然,这会足够快。不过,假设您想要拉伸它。 您可以使用中间的meet解决方案将其优化为o(2^(n/2+1))时间。您将向量集拆分为两个子集,并独立地为每个子集生成所有可到达的目的地。然后迭代一组可到达的目的地,并为每个位置找到它和目标目的地之间的区别。如果这个差分向量在另一组可到达的目的地中,您就有了一个解决方案:将两者结合起来,就完成了。这里的困难在于有效地查询另一个集合中是否有所需的向量:这可以使用哈希表在O(1)时间内完成。 这是每个子集的O(2^(n/2))时间,乘以两个子集得到O(2^(n/2+1))。要加入这两个组织,需要O(2^(n/2))时间。所以这给了我们总的O(2^(n/2+1))时间。 |
![]() |
6
0
这可能会在目的地附近振荡,但它会让你靠近。 |
![]() |
Astronought · A*寻路,计算G成本 8 年前 |
![]() |
WiseDev · 动态寻路A*Unity3D C# 9 年前 |
|
ForgottenOne · 从任务调度程序运行时,程序搜索错误的配置文件目录 10 年前 |