背景
所以我有几百个元素(图像是一个简单的例子),我需要不断重新排序,因为只要元素X或Y值发生变化,它们的排序值就会改变。普通(绝对)排序是不可能的,因为许多元素彼此之间具有未定义的关系(如紫色和橙色块),这会破坏合并/快速/冒泡排序。但是,更改单个元素可能会改变许多排序关系,如果该元素与许多其他元素相比具有优势(例如,如果绿色块被删除)
我理解构建树和进行拓扑排序背后的想法,但由于单个元素的变化,这似乎非常低效。
如果上述内容仍不清楚,请查看http://shaunlebron.com/IsometricBlocks,因为这与我的目的非常相似。
我的问题: 我不禁想到一棵树不是必需的(至少在我的情况下),但链表很好,因为我的情况保证永远不会有一个循环。 仅仅总是将一个元素放在最后一个元素之后,但是在第一个元素之前它是否小于?这不是足够的(按升序排列)吗?允许排序部分有序的集合?
是否有某些案例可以阻止某人跳过树步并直接进入列表?我在纸上所做的每一次模拟似乎都表明这可行。
答案 0 :(得分:0)
简单地说,是的,可以在不使用树的情况下进行部分排序。
如果您有(原始)未分类列表" U"和(空的,目的地)排序列表" S",你需要循环列表" U"并将没有家属的条目移至结尾列表" S"。
如果列表中没有其他条目" U"条目没有家属。依赖于它。如果您使用{-1,0,1}来衡量相等性,那么您需要选择" -1"或" 1"暗示依赖。然而" 0"这意味着两个元素没有有效的排序。