Поиск максимума в программах на Python
Это статья для начинающих, хотя может и для тех, уже начал программировать, что-то найдётся.
Если у вас есть массив
ls = [4, 2, 5, 4, 8, 1, 5, 3, 4, 9, 1, 2]
то поиск максимального/минимального элемента очень прост max(ls)/min(ls). Хотя интересней ведь всё ручками делать. Или я не прав? Тут попалась мне книжка в Инете по алгоритмам на Python. Я вообще собираю книжки по алгоритмам. Ну и покупаю её. И какого же было моё разочарование. Нет там алгоритмов, а есть алгоритмы использования библиотек с алгоритмами. Ну в общем, ни о чём, в моём понимании. Хотя кому-то и интересно, может быть.
Ну дак вот. Стандартный поиск очень прост. Назначается временный максимум (пусть это переменная m) и при проходе по массиву происходит сравнение элементов с временным максимум. Если элемент больше временного максимума, то это значение присваивается переменной m. Ну в общем всё банально (см. программу ниже).
Можно, конечно и так, по-питоновски
#!/usr/bin/python3
ls = [4, 2, 5, 4, 8, 1, 5, 3, 4, 9, 1, 2]
m = ls[0]
[m:=t for t in ls if t > m]
print(m)
Впрочем, нет никакого выигрыша, просто греет нас мысль, что мы как-то необычно записали один и тот же алгоритм.
Конечно, можно и так
print(sorted(ls)[-1])
Красиво, да? После сортировки, последний элемент как раз тот самый, максимальный. Список, кстати, не меняется.
Ну собственно это и всё, скажете вы. Ну почему же, можно ведь и так
Стоит ли так извращаться, - скажете вы. Ну как вам сказать. Алгоритм интересен тем, что мы сразу получаем индекс одного из максимальных элементов. И здесь нет переприсваивания для переменной с временным максимумом. Алгоритм я не буду описывать, так как он не сложен. По сути временным максимум здесь является элемент ls[i].
Мы, однако, не осветили все вопросы. Типичной задачей является: найти все максимальные элементы массива. Тут нет ничего сложного. Можно, например, найти максимум с помощью max(ls), а потом пройтись в цикле по массиву и найти все совпадения. А вот нельзя это сделать сразу в одном проходе?
Прошу
Вместо временного максимума, как скалярной переменной, взят список временных максимумов.
Конечно, задач на максимальные значения в списке (массиве) много. Ну вот например такая:
Найти три максимальных значения в данном списке.
Заметьте, не три максимальных элемента, которые, естественно, равны друг другу (см. предыдущий пример), а три максимальных значения. Например
[2, 3, 4, 1, 6, 7, 5, 6, 5, 6]
Здесь три максимальных значения: 5, 6, 7. Но порешайте сами, интересно же.
Ну, пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.