4

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

我最初的设计/想法是使用 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/)?或者我是否使用插入排序来分析所有对象并将对象重新排序到它可以适合序列的位置?请记住,实际的对象列表将更像是 30 多个对象而不是 6 个,在理想情况下,程序会选择排序列表的最佳方式(可能基于“canGoTo”优先级)。

任何建议/最佳实践将不胜感激。抱歉没有示例代码,目前处于思考阶段。

4

1 回答 1

1

您可以将问题建模为有向无环图,然后对其进行拓扑排序。这将给出您正在寻找的确切输出。

于 2012-11-06T14:09:15.417 回答