一連の順序付けられていないオブジェクトを取得し、それらが進むことが許可されているオブジェクトに基づいてインテリジェントに並べ替えるアルゴリズムを開発する必要があります。
私の最初の設計/考えは、Core Data を使用して、エンティティ (たとえば、「オブジェクト」) を対多関係 (「canGoTo」) で格納し、選択したオブジェクト * オブジェクトをたどることができるオブジェクトのセットをそれ自体に戻すことです。
次の例を考えてみましょう。各オブジェクトには、先に進むことができるオブジェクトのセットがあります (実際のオブジェクトのセットははるかに大きくなります)。
Object A - can go to -> Objects B,C,D
Object B - can go to -> Objects E,F,G,Y,H
Object C - can go to -> Objects P,S,Z
Object D - can go to -> Objects H,J,X
...
Object G - can go to -> Objects R,Y,Z
Object H - can go to -> Objects G,Z
...
Object Y - can go to -> Objects Z
Object Z - can go to -> Objects NULL (no objects follow this object)
プログラムに一連のオブジェクト (R、B、H、G、A、Z) が与えられた場合、プログラムはオブジェクトを並べ替えて、受け入れ可能な構造を見つける方法を見つける必要があります。したがって、このセットの正しい結果は、A->B->H->G->Y->Z になります。
この問題を解決するには、どの戦略が最適または最も効率的ですか? パス内のすべてのオブジェクトのタッチに成功したら、再注文をループして終了する必要がありますか? 遺伝的アルゴリズムを使用して出力を生成し、世代を分析します (つまり、http://ijoshsmith.com/2012/04/08/simple-genetic-algorithm-in-objective-c/ )? または、挿入ソートを使用してすべてのオブジェクトを分析し、オブジェクトをシーケンス内に収まるように並べ替えますか? オブジェクトの実際のリストは、6 個ではなく 30 個以上のオブジェクトの長さになることに注意してください。完璧な世界では、プログラムはリストを並べ替えるための最良の方法を選択します (おそらく「canGoTo」優先度に基づいて)。
アドバイス/ベストプラクティスは大歓迎です。サンプル コードがなくて申し訳ありません。これは現時点では検討段階です。