【发布时间】:2013-11-17 22:12:24
【问题描述】:
让D 成为一个data.frame,其中D$x 包含实数,D$y 包含布尔值等字段。
问题是对D 的行进行排序,以使D$x 不递减,同时以最小化结果D$y 中的不连续数量的方式打破平局。
在 R 中是否有一种简单快速的方法来完成此任务?
更多信息
在像 C 这样的语言中,我会首先按 x 排序,然后使用 2 态 FSM 依次传递结果,以尽可能消除不连续性。但在 R 中,如果有数千行需要按顺序处理,我预计迭代会带来不必要的开销。
正确结果示例:
D$x D$y
1 FALSE
1 FALSE
1 TRUE
1 TRUE
1.2 TRUE
1.5 TRUE
1.5 FALSE
错误结果示例:
D$x D$y
1 TRUE
1 FALSE
1 TRUE
1 FALSE
1.2 TRUE
1.5 FALSE
1.5 TRUE
在示例中,正确的结果有 2 个不连续点,而错误的结果有 6 个。
编辑:我们可以假设数据使得结果中的不连续性密度很低:例如,每 1000 行少于 1 个不连续性。
【问题讨论】:
-
当您说最小化时,您是指优化意义上的吗?还是有“足够好”的结果?
-
我认为不可能在不到 2 次的时间内完成此操作,因为您不知道元素在排序后最终会靠近哪里。
-
@Ricardo 如果通过优化,您的意思是最小化,那么是的 :)
D$y上的排序顺序应该反转 x 的那些值,其中连续性将从所述反转中受益。跨度>
标签: r performance algorithm stable-sort