我需要设计一种算法,该算法使用称为" med3"::此功能会找到数组的N/3(地板)和2N/3(CEIL)元素(如果对中位数非常相似),但是N/2它返回这些值)。
。我考虑了围绕这两个值的分区,而不是像QuickSelect一样继续,但问题是" Med3"不返回2个值的索引,只有值。
。例如,如果数组为:1、2、10、1、7、6、3、4、4,它将返回2(n/3值)和4(2N/3值)。
我还认为在数组上运行,并将所有值(例如,在上面给定的数组中)在新数组中再次使用,然后再次使用" Med3",但可以是重复的(如果数组IS是2、2、2、2,...,2我每次都会拿所有元素)。
有什么想法吗?我必须使用" Med3"。* Med3就像一个黑匣子,它以线性时间运行。
谢谢。
我认为您在正确的轨道上,但是我建议删除第一个< = med3.floor()的第一个N/3值,而是建议您删除第2到4个。以及> = med3.ceil()的第一个N/3值。这避免了重复的问题。如果两个通过/周期不太昂贵,则可以删除所有值<med3.floor() 总计N/3值= med3.floor()(对Ceil())
进行相同然后重复直到您处于最小的目标。