たくさんのNSArrayがあると想像してください。配列にはすべて、NSValuesでラップされたCGPointが含まれています。すべての要素が一意ではありません。そのため、特定の要素が複数の配列に表示される可能性があります。結果の配列に一意の要素だけが含まれるように、これらの配列を1つの配列に結合する最も速い方法は何ですか?
現在、私は次のようにしています:
- を使用して各アレイをNSSetに挿入します
setByAddingObjectsFromArray
- 結果の配列にセットの内容を入力します
別のオプションはこれです:
- すべての配列を1回トラバースし、各値をNSDictionaryに挿入します(まだ存在しない場合)
- 辞書のキーを1回トラバースし、それぞれを結果の配列に挿入します
従来のランタイム分析では、最初のオプションはO(n log n)
すべての初期配列の要素数でスケーリングする必要があるとされています(すべての要素をトラバースし、それぞれをバイナリ検索ツリーなどにログ時間で挿入します)。2番目のアプローチの場合、実行時間はO(n)
、ルックアップとハッシュテーブルへの挿入が償却された一定時間で実行されるためです。ただし、Appleのデータ構造について少し読んだ後、それらが従来のデータ構造のように動作すると仮定するのはばかげているようです。