Для этого также можно использовать рекурсивный алгоритм «разделяй и властвуй», код:
private static Integer array[];
private static Integer findMinimum(int startIndex, int endIndex){
//base case
if(startIndex + 1 == endIndex || startIndex == endIndex){
return array[startIndex] < array[endIndex] ? array[startIndex] : array[endIndex];
}
//recursive case
int a = findMinimum(startIndex, (startIndex + endIndex) / 2 );
int b = findMinimum( (startIndex + endIndex) / 2 + 1, endIndex);
return Math.min(a, b);
}
Этот алгоритм имеет время работы: O (n)
Однако, если у вас N процессор ( Я знаю, что это не «действительный» сценарий реального мира, это интересно только для теоретических дискуссий ). Вы можете иметь параллельные вычисления и иметь время выполнения: O (log n)
Итак, если вы хотите выполнить несколько параллельных вычислений, вы можете попробовать этот подход.