【发布时间】:2012-10-21 17:29:53
【问题描述】:
假设你有一堆 NSArray。这些数组都包含包裹在 NSValues 中的 CGPoints。所有元素都不是唯一的。所以某些元素可以出现在多个数组中。 将这些数组组合成一个数组以使生成的数组只包含唯一元素的最快方法是什么?
目前我正在这样做:
- 使用
setByAddingObjectsFromArray将每个数组插入到NSSet中 - 用集合的内容填充结果数组
另一个选项是这样的:
- 遍历每个数组一次并将每个值插入到 NSDictionary 中(如果它还没有的话)
- 遍历字典的键一次并将每个键插入结果数组中
传统的运行时分析认为第一个选项应该与O(n log n) 一起扩展,其中 n 是所有初始数组中的元素数(遍历所有元素并将每个元素插入到二叉搜索树或类似的日志时间)。对于第二种方法,运行时间是O(n),因为查找和插入哈希表是在摊销的常数时间内运行的。
然而,在阅读了一些有关 Apple 数据结构的信息后,假设它们的行为类似于传统数据结构似乎是愚蠢的。
【问题讨论】:
标签: objective-c algorithm data-structures runtime big-o