Jednoczesne wyszukiwanie minimum i maksimum¶
Opis problemu¶
Podejście naiwne¶
Funkcja find_min_max
przyjmuje jako argument listę array
(lista liczb) i zwraca parę wartości (min
, max
).
Początkowo ustawiamy zmienne min
i max
na pierwszy element listy array
(array[0]
). W pętli for
iterujemy od drugiego elementu (indeks \(1\)) do końca listy, czyli od \(1\) do długości listy minus \(1\). W każdej iteracji porównujemy element array[i]
z dotychczasowym minimum (min
). Jeśli array[i]
jest mniejsze od min
, aktualizujemy wartość min
na array[i]
. Następnie porównujemy element array[i]
z dotychczasowym maksimum (max
). Jeśli array[i]
jest większe od max
, aktualizujemy wartość max
na array[i]
.
Po zakończeniu pętli, mamy już najmniejszą wartość min
i największą wartość max
z całej listy. Zwracamy parę wartości (min
, max
).
W przykładzie podana jest konkretna lista array
. Funkcja find_min_max
jest wywoływana z tą listą, a wynikowe wartości dla min
i max
są wyświetlane przy użyciu funkcji print
.
W wyniku wykonania tego kodu zostanie wyświetlone: Minimum: -4, Maximum: 12
.
Podejście optymalne¶
Funkcja find_min_max
przyjmuje jako argument listę array
(lista liczb) i zwraca parę wartości (min_val
, max_val
).
Na początku tworzone są dwie puste listy: min_candidates
(kandydaci na najmniejszą wartość) i max_candidates
(kandydaci na największą wartość).
W pętli for
iterujemy po indeksach od \(1\) do len(array)-1
z krokiem \(2\), aby iterować po parzystych indeksach.
W każdej iteracji porównujemy elementy na indeksach i-1
i i
. Jeśli wartość na indeksie i-1
jest mniejsza niż wartość na indeksie i
, dodajemy wartość z indeksu i-1
do listy min_candidates
, a wartość z indeksu i
do listy max_candidates
. W przeciwnym przypadku, dodajemy wartość z indeksu i
do listy min_candidates
, a wartość z indeksu i-1
do listy max_candidates
.
Jeśli lista array
ma nieparzystą liczbę elementów, dodajemy ostatni element do list min_candidates
i max_candidates
.
Następnie inicjalizujemy zmienne min_val
i max_val
wartościami pierwszych kandydatów z list min_candidates
i max_candidates
.
W kolejnej pętli for
iterujemy od \(1\) do długości listy kandydatów minus \(1\). Nie ma znaczenia, której listy długość weźmiemy, jako że obie mają tyle samo elementów. Wewnątrz pętli porównujemy każdy element z listy min_candidates
z dotychczasowym minimum (min_val
) i każdy element z listy max_candidates
z dotychczasowym maksimum (max_val
). Jeśli dany kandydat jest mniejszy od min_val
, aktualizujemy min_val
na tę wartość. Jeśli dany kandydat jest większy od max_val
, aktualizujemy max_val
na tę wartość.
Na koniec zwracamy parę wartości (min_val
, max_val
).
W przykładzie podana jest konkretna lista array
. Funkcja find_min_max
jest wywoływana z tą listą, a wynikowe wartości dla min_val
i max_val
są wyświetlane przy użyciu funkcji print
.
W wyniku wykonania tego kodu zostanie wyświetlone: Minimum: -4, Maximum: 12
.