我正在研究以下算法问题:
以任意未排序顺序的(元素)实数数组,找到其总和小于O(n)的目标值的最大元素数。因此,不允许排序。
我认为我应该使用随机快速选择算法,该算法在O(n)的未排序数组中找到第K个元素。我想知道对Randomized QuickSelect算法进行正确的修改才能用于我的问题吗?
答案 0 :(得分:0)
在随机化的QuickSelect算法中,数组根据随机化的位置值进行分区。下部分区包含小于此随机位置值的所有值,而上部分区包含大于此随机位置值的所有值。对于您的问题,您将计算该下部分区阵列的总和。现在,如果总和小于目标值,则从上部分区中选择一个随机位置值,然后再次运行分区算法。如果总和大于目标值,请从较低的分区中选择一个随机位置值,然后再次运行分区算法。继续进行直到找到答案。请注意,在最坏的情况下,它可能是O(n ^ 2)。