2

我有一個很大的A *尋路函數,經常被調用,必須放在另一個線程中,否則它會讓我的遊戲結束。我來自Java背景,最近閱讀了關於HashMap(基本相當於NSDictionary)速度的討論以及您可以使用的不同實現。我很好奇NSDictionary有多快,是否有人發現它是處理大量即時和臨時對象分配的可行選項,或者它是否太慢。優化A *尋路iPhone - NSDictionary會訣竅嗎?

目前我在A *算法中使用NSMutableArray作爲開放和封閉列表 - 我將用O(1)setObject:forKey和removeObject:forKey替換封閉列表,並使用NSMutableDictionary 「鏡像」打開列表的NSMutableDictionary。路徑數據存儲在一個大的NSMutableArray中 - 我會保持原樣,因爲索引訪問速度夠快(當然)。

所以我的問題是...這是一個明顯的速度提高或我應該推出自己的名單和/或地圖?我只是不確定什麼NSDictionary 確實,我想知道。

+0

這是一篇比較NSDictionary,NSSet和NSArray的好文章:http://cocoawithlove.com/2008/08/nsarray-or-nsset-nsdictionary-or.html – pxl 2009-10-21 19:00:46

回答

3

如果你想知道如何優化A*,我想先問你,如果你使用獨立於平臺的擴展,比如迭代深化A*(又名IDA*),什麼樣的您使用的是啓發式的,並如果你使用緩存(轉置表,模式數據庫)。您所問的問題目前與金屬的距離太近,因爲您正在優化系統中可能不會妨礙您的部分。

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

0

當然它的確與衆不同 - 我最近換一個天真的實現使用的NSArray(A *的東西在列表循環,找出... )爲列表和鄰接的NSDictionary(在列表中?objectForKey!)和增加的表現從不可接受到沒有太多的工作可以接受。