想象一下你有一堆NSArrays。数组都包含包装在CGPoints中的NSValues。并非所有的元素都是独一无二的。所以某些元素可以出现在多个数组中。如何最快地将这些数组组合成一个数组,这样得到的数组只包含唯一的元素?
现在我是这样做的
setByAddingObjectsFromArray
另一种选择是:
传统的运行时分析指出,第一个选项应该使用O(n log n)
,其中n是所有初始数组中的元素数(遍历所有元素,并将每个元素插入二进制搜索树或日志时间中类似的元素)。对于第二种方法,运行时是O(n)
,因为查找和插入哈希表是在摊销常数时间内运行的。然而,在阅读了一些关于苹果的数据结构之后,认为它们的行为像传统的数据结构似乎是愚蠢的。
发布于 2012-10-21 09:34:35
由于这两种方法都介于O(n)
和O(n log n)
之间,并且您的n很可能足够小,以至于log n
是有界的和小的,所以常数因子可能决定哪一个是最快的。
在这一点上,使用看起来像用例的数据进行基准测试是最好的选择。
我相信,但不确定,NSSet也是用哈希实现的。
发布于 2012-12-05 09:44:02
实际上..。我认为时间几乎是一样的,但是,在NSDictionary的情况下,您将获得一些内存开销,因为在这种情况下,您需要将密钥复制到该NSDictionary。NSDictionary
和NSSet
的工作方式都是相同的:
hash
是否具有唯一性。isEqual
。你提到的方法并没有太大的不同。
https://stackoverflow.com/questions/13000296
复制相似问题