Автор оригинала: Robin Andrews.
Многие вычислительные задачи могут быть решены, попробовав все возможные решения для кандидатов до тех пор, пока правильное решение проблем не найдено. Этот подход часто называют Исчерпывающий поиск или Поиск грубой силы Отказ Хотя неуклюжий и неэффективный, исчерпывающий поиск часто стоит реализовать, чтобы почувствовать проблему, прежде чем пытаться реализовать лучшее решение.
Причина лучшего решения, если часто требуется, заключается в том, что для многих проблем метод грубой силы принимает непрактичное количество времени для решения. Это часто может означать нелепые количество времени, такое как около 585 миллиардов лет, чтобы решить знаменитый Башни Hanoi Puzzle С лишь 64 кольцами, если каждый ход занял одну секунду.
Помните компьютер, который должен был разработать ответ на жизнь вселенную и все и в конечном итоге придумал 42 ? (Если нет, я тщательно рекомендую получить руки копию книги «Руководство автостопов к Вселенной» …)
Давайте посмотрим на несколько примеров алгоритмов грубой силы в Python.
Алгоритмы грубой силы Python
Представьте себе, что вам попросили найти все даже номера до 100, используя Python. Как бы вы это сделали? Как обычно, есть более одного способа решения этой проблемы. Теперь, хотя не беспокойтесь о том, чтобы прийти с чем-то, кроме самым очевидным подходом.
Чтобы не испортить вам удовольствие, я буду скрывать свое решение Brute Form для этой проблемы. Нажмите ниже, чтобы раскрыть это.
for i in range(1, 101):
if i % 2 == 0:
print(i)
Если вы использовали другой подход, который абсолютно нормально. Моя версия – это просто способ проиллюстрировать, как может выглядеть подход грубой силы. Можете ли вы увидеть, как моя версия задействована проходит каждый возможный кандидат и проверка на ровность?
Линейный поиск в Python
Другим классическим примером алгоритма грубой силы является Линейный поиск Отказ Это включает в себя проверку каждого элемента в коллекции, чтобы увидеть, является ли это тот, который мы ищем.
В Python это может быть реализовано так:
def linear_search(haystack, needle):
for position, item in enumerate(haystack):
if item == needle:
return position
return -1
print(linear_search([4, 5, 2, 7, 1, 8], 7))
Конечно, есть много разных реализаций этого алгоритма. Мне нравится этот, потому что это использует очень удобно Python перечислять функция. Независимо от подробной информации о реализации, основная идея остается одинаковой – итерацией через сбор (в случае выше, списка Python) и проверьте, является ли каждый элемент целью. Мне нравится использовать имена переменных Игла и сена от выражения Ищете иглу в стоге сена Отказ
Пузырь Сортировка в Python
Общий алгоритм курсов компьютерных наук – Сортировка пузыря Отказ Это полезный инструмент обучения, хотя практическая ценность. Основная причина этого – это его подход к грубой силе. Мы используем вложен для петлей это для петля внутри другого для петля, чтобы сделать все возможное сравнение и своп при необходимости, пока данные не будут отсортированы.
Как и в случае с линейным поиском, существует множество вариантов того, как реализован пузырьковый сорт, но существенная идея остается прежней. Вы можете узнать больше о Bubble Corth здесь.
Вот пример реализации Python Bubble Sort:
# Python implementation of Bubble Sort
def bubble_sort(arr):
n = len(arr)
# Traverse through all array elements
for i in range(n):
# Last i elements are already in place
for j in range(0, n-i-1):
# Traverse the array from 0 to n-i-1
# If the element found is greater than the next element, swap
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
print(arr)
arr = [3, 8, 2, 5, 6, 1, 9, 4, 7]
bubble_sort(arr)
print("Sorted array is:", arr)
Выше представляют три примера алгоритмов грубой силы с использованием Python. Хотя важно в конечном итоге иметь возможность разработать более эффективные алгоритмы для многих ситуаций, нам нужно научиться ходить, прежде чем научиться бегать. Даже когда у нас есть больше опыта, алгоритмы грубой силы все еще имеют их использование. Если вы окажетесь в Техническое интервью Там, где требуется решение к вычислительной проблеме, он часто стоит начать путем создания раствора грубой силы, а затем продолжая обсудить, почему ему нужно улучшить и как вы могли бы сделать это.
В будущих уроках мы посмотрим на многие возможные альтернативы для поиска грубой силы или исчерпывающего поиска по решению различных проблем.
До этого, счастливые вычисления!
Избранное изображение предоставлено Venkatesh Rao.