platform/chrome: sensorhub: Implement quickselect for median calculation
authorKuan-Wei Chiu <visitorckw@gmail.com>
Fri, 10 Nov 2023 16:53:14 +0000 (00:53 +0800)
committerTzung-Bi Shih <tzungbi@kernel.org>
Mon, 13 Nov 2023 04:46:42 +0000 (12:46 +0800)
commitd131f1f3b459980d38a59adc3598c96cc3a6ad5e
tree2ab9c10ad6f5d29d8191bb721cab24035560ecf1
parent49e380795414039f7b3bd44c121104f31738dcf1
platform/chrome: sensorhub: Implement quickselect for median calculation

The cros_ec_sensor_ring_median function currently uses an inefficient
sorting algorithm (> O(n)) to find the median of an array. This patch
replaces the sorting approach with the quickselect algorithm, which
achieves an average time complexity of O(n).

The algorithm employs the median-of-three rule to select the pivot,
mitigating worst-case scenarios and reducing the expected number of
necessary comparisons. This strategy enhances the algorithm's
efficiency and ensures a more balanced partitioning.

In the worst case, the runtime of quickselect could regress to O(n^2).
To address this, alternative algorithms like median-of-medians that
can guarantee O(n) even in the worst case. However, due to higher
overhead and increased complexity of implementation, quickselect
remains a pragmatic choice for our use case.

Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com>
Link: https://lore.kernel.org/r/20231110165314.1559285-1-visitorckw@gmail.com
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
drivers/platform/chrome/cros_ec_sensorhub_ring.c