我有一个解决方案来寻找你们中的一些人可能会帮助我解决的问题。
令为元素列表。每个元素都有两个固有属性/属性(,),每个都可以表示为实数。每个元素的两个属性的值是完全不相关的。重新排序,这样对于列表中的连续元素,属性和的值的差异保持相对较小——即,我们希望避免从一个元素到下一个元素的值大幅跳跃。
对列表进行排序来最小化属性 a 的波动。但是,由于和的值将在最小值和最大值之间随机波动。排序,那么到处都是。
相反,我们选择基于属性创建多个组/箱,按顺序排列这些箱,然后按属性对这些箱中的元素进行排序。这样,属性波动可以不大于 bin 范围的两倍(最坏情况:从一个 bin 遍历到下一个 bin 时),并且在一个 bin 内遍历时不大于 bin 范围的一倍。属性的波动也相对较小,因为在箱内,值按排序。结果看起来像这样(属性为蓝色,为橙色):
仍然存在很大的波动——从大约其最大值到大约其最小值(上面的“锯齿波”)。为了改进这一点,我们在随后的 bin 之间交替排序,以创建一种“三角波”。这确保了属性 b 的波动在列表中的任何地方都很小:
和的波动,我想确定工程师提出这种排序策略是多么微不足道——尤其是在箱内以交替方式排序。为此,我正在寻找可能遇到这种排序策略的问题或应用程序(或者可能是整个学科?)。
虽然我偶尔会发现一篇关于有人试图实施此特定订单的帖子(例如https://codereview.stackexchange.com/questions/88710/alternating-sort-order-within-a-sorted-group),但事实证明它令人惊讶很难找到任何具体的例子来说明为什么要这样做。
有什么想到的吗?最终,我的目标是找到展示这类问题和解决方案的(文本)书籍。朝那个方向的任何事情都将不胜感激。