代码之家  ›  专栏  ›  技术社区  ›  Eli

优化一个*寻路iPhone-nsDictionary能做到吗?

  •  2
  • Eli  · 技术社区  · 15 年前

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

    目前,我在A*算法中对打开和关闭的列表使用nsmutablerray,因为o(1)setobject:forkey和removeobject:forkey,我将用nsmutabledictionary替换关闭的列表,并创建一个nsmutabledictionary来“镜像”打开的列表。路径数据存储在一个大的NSmutableArray中-我会保持原样,因为索引访问足够快(当然)。

    所以我的问题是…这是一个显著的速度提高还是我应该滚动自己的列表和/或地图?我只是不知道什么是nsdictionary 我想知道。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Shaggy Frog    15 年前

    如果你想知道如何优化 A* ,我首先会问您是否在使用独立于平台的扩展,比如迭代深化 A* (阿卡 IDA* ,如果您使用的是缓存(换位表、模式数据库),您将使用哪种启发式方法。你现在问的问题离金属太近了,因为你正在优化系统的某些部分,这些部分可能不会阻碍你。

    看一看 these course slides (特别是 lecture 10 lecture 11 )

        2
  •  0
  •   Adam Eberbach Adil Shaikh    14 年前

    当然,这是有区别的——我最近改变了一个简单的使用nsarray的实现(列表中有什么内容吗?迭代查找(列表中)nsdictionary的列表和相邻项…。对象!工作不多,绩效由不可接受提高到可接受。