Objective-C数据结构(构建我自己的DAWG)

时间:2011-10-24 18:38:48

标签: iphone objective-c automatic-ref-counting chdatastructures

经过长时间(20多年)的编程后,我正试图重新开始。我的第一个真正的尝试是Scrabble / Words With Friends求解/骗子(选择你的定义)。我已经建立了一个非常好的引擎,但它通过蛮力而不是效率或优雅来解决问题。经过大量研究后,很明显这个问题的最佳答案是DAWG或CDWAG。我已经在那里找到了一些C实现并且能够利用它们(对于相同的数据集,搜索时间从1.5s变为.005s)。

但是,我试图弄清楚如何在纯Objective-C中做到这一点。那时,我也试图让ARC符合要求。并且足够有效的iPhone。我看了很多,发现了几个数据结构库(即CHDataStructures),但它们主要是C / Objective-C混合,或者它们不符合ARC。他们非常依赖结构并将结构嵌入结构中。 ARC并不真正关心它。

所以 - 我的问题是(对不起,我明白,如果这是tl;博士,如果它似乎完全是一个新问题 - 只是无法理解这个对象的东西)你如何编程经典数据结构(树在Objective-C中从头开始?我不想依赖NS [Mutable] {Array,Set等}。有没有人在我创建DAWG时有一个简单/基本的树或类似的东西?

1 个答案:

答案 0 :(得分:3)

为什么在你开始行走之前为什么要在脚下射击?

你说你是

  

试图弄清楚如何在纯Objective-C

中做到这一点

但是你

  

不想依赖NS [Mutable] {Array,Set等}

另外,您想使用ARC,还是不想使用ARC?如果你坚持使用Objective-C然后使用ARC,如果你不想使用Foundation系列,那么没有ARC你可能会更好。

我的建议:使用NS [Mutable] {Array,Set等}并使用ARC的基本算法。这应该是你的第一个也是唯一的目标,其他一切都是过早的优化。特别是如果你的目标是“重新编程”,而不是编写尽可能快的Scrabble分析仪&求解。如果您以后发现需要进行优化,那么您可以使用一些可以分析瓶颈的工作代码,如果需要,您仍然可以替换Foundation集合。

至于其他不兼容ARC的库:如果你遵循一些rules set by ARC,你可以很容易地使它们兼容。这是否有价值取决于第三方代码库的大小。

特别是,从void *转换为id,反之亦然需要桥接转换,所以你会写:

void* pointer = (__bridge void*)myObjCObject;

同样,如果将C结构中的所有指针标记为__unsafe_unretained,则应该能够按原样使用C代码。更好的是:如果C代码可以构建为静态库,则可以在关闭ARC的情况下构建它,只需要修复一些头文件。