基于算法的对象的排序/重新排序基于允许的跟随对象

时间:2012-11-06 13:32:57

标签: iphone objective-c xcode algorithm

我需要开发一种算法,该算法将采用一组无序对象,并根据允许进行的对象智能地重新排序。

我最初的设计/想法是使用Core Data将一个具有多对多关系(“canGoTo”)的实体(例如“Objects”)与一组可以跟随所选对象的对象一起存储在自身上对象

考虑下面的例子,其中每个对象都有一组可以进入的对象(实际的对象集要大得多)。

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/)?或者我使用Insertion Sort来分析所有对象并将对象重新排序到序列中可以适合的位置?请记住,真实的对象列表将更像是30多个对象而不是6个,并且在完美的世界中,程序将选择最佳方式来订购列表(可能基于“canGoTo”优先级)。

非常感谢任何建议/最佳做法。很抱歉没有示例代码,目前处于思考阶段。

1 个答案:

答案 0 :(得分:1)

您可以将问题建模为Directed Acyclic Graph,然后对其进行Topological Sorting。这将提供您正在寻找的确切输出。