Инициализация переменных минимума и максимума в алгоритмах
Очень важно, каким значением инициализирована переменная максимума и минимума. Обычно для инициализации переменных минимума и максимума выбирают первый элемент массива, но бывают такие ситуации, когда это правило не работает. Приведем несколько примеров. Пример 32 Решение. Предположим, что все ученики требуемого роста будут играть в баскетбольной команде. Тогда для определения самого низкого игрока необходимо найти минимум среди учеников, чей рост не меньше 185 см, но и не больше 205 см. Для решения задачи можно использовать алгоритм последовательного поиска минимума среди всех учеников с дополнительной проверкой: на каждом шаге надо определять, попадает ли рост очередного ученика в необходимый диапазон, и только среди таких учеников искать минимальное значение роста. Однако инициализировать переменную минимума значением роста первого ученика нельзя, так как этот рост может не удовлетворять требованиям игроков баскетбольной команды (например, рост первого ученика – 170 см). Поэтому мы должны инициализировать переменную минимума тем значением, которое будет заведомо не меньше искомого минимального значения. Самое логичное – инициализировать переменную минимума самым высоким ростом, с которым ученик может быть допущен в баскетбольную команду, то есть 205. Приведем другой пример. 1. Пусть минимум первый и минимум второй проинициализированы первым элементом массива: min1=min2 = a1. 2. Установить счетчик равным 1 (i = 1). 3. Если исследованы еще не все элементы (i < n), то перейти к шагу 4, иначе алгоритм окончен (два минимальных элемента равны min1 и min2 соответственно). 4. Перейти к следующему элементу (увеличить i на единицу). 5. Если текущий элемент меньше, чем минимум (ai < min1), то присвоить min2 значение min1, а присвоить min1 значение ai, иначе если текущий элемент меньше, чем второй минимум (ai < min2), то присвоить min2 значение ai. 6. Перейти к шагу 3. Отметим, что этот алгоритм похож на алгоритм одновременного поиска максимального и минимального элементов массива. Рассмотрим более подробно инициализацию переменных обоих минимумов. Предположим, что обе эти переменные будут инициализированы значением первого элемента массива. Посмотрим, как отработает данный алгоритм на массиве 1 8 3 6 2 в этом случае. Так как обе переменные мы инициализируем самым маленьким значением среди всех элементов массива, то на пятом шаге алгоритма замены значений переменных обоих минимумов не произойдет, и в результате обе переменные будут равны 1, что не верно: min1 = 1, min2 = 2. Мы получили неверный ответ, так как неверно инициализировали обе переменные минимума самым маленьким значением в массиве. Возможное решение. Упорядочим первые два элемента массива и инициализируем переменную первого минимума меньшим из двух значений, а вторую переменную – оставшимся значением. Тогда алгоритм можно начинать с третьего элемента массива. Посмотрим, как будут меняться значения переменных min1 и min2 на каждом шаге алгоритма для массива 1 8 3 6 2.
|