【问题标题】:Optimizing A* Pathfinding iPhone - Will NSDictionary do the trick?优化 A* 寻路 iPhone - NSDictionary 能解决问题吗?
【发布时间】:2009-10-21 17:34:43
【问题描述】:

我有一个非常大的 A* 寻路函数,它被频繁调用并且必须放在另一个线程中,否则它会使我的游戏卡顿。我来自 Java 背景,最近阅读了有关 HashMap(基本上相当于 NSDictionary)的速度以及您可以使用的不同实现的讨论。我很好奇 NSDictionary 有多快,是否有人发现它是处理大量即时和临时对象分配的可行选择,或者它是否太慢了。

目前我使用 NSMutableArray 作为 A* 算法中的打开和关闭列表 - 由于 O(1) setObject:forKey 和 removeObject:forKey,我将用 NSMutableDictionary 替换关闭列表,并创建一个NSMutableDictionary “镜像”打开的列表。路径数据存储在一个大的 NSMutableArray 中 - 我会保持原样,因为索引访问速度足够快(当然)。

所以我的问题是......这会显着提高速度还是我应该推出自己的列表和/或地图?我只是不确定 NSDictionary 做了什么,我想知道。

【问题讨论】:

标签: iphone objective-c optimization artificial-intelligence a-star


【解决方案1】:

如果您想知道如何优化A*,我会先问您是否使用了与平台无关的扩展,例如迭代深化A*(又名IDA*),您需要什么样的启发式' 正在使用,并且如果您正在使用缓存(转置表、模式数据库)。目前,您提出的问题过于贴切,因为您正在优化系统的某些部分,而这些部分可能不会阻碍您。

看看these course slides(尤其是lecture 10lecture 11

【讨论】:

    【解决方案2】:

    绝对会有所不同 - 我最近使用 NSArray 更改了 A* 的幼稚实现(列表中有内容吗?迭代以找出...),用于 NSDictionary 的列表和相邻项(在列表中?objectForKey!)无需太多工作即可将性能从不可接受提高到可接受。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      相关资源
      最近更新 更多