Алгоритмы в Python
Алгоритмы в Python – это структурированные наборы инструкций, выполняющих определенные задачи или решающие конкретные проблемы. Они служат основой для решения различных задач в программировании. В Python можно реализовать широкий спектр алгоритмов для сортировки, поиска, обработки данных и других задач. Давайте рассмотрим несколько базовых алгоритмов и их реализацию в Python.
1. Сортировка списка: Алгоритм сортировки пузырьком
Сортировка пузырем является простой алгоритм сортировки, который сравнивает соседние элементы и переставляет их, если они не отсортированы.
def bubble_sort(arr):
n = len(arr)
for i in range(n — 1):
для j in range(0, n — i — 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
# Пример использования:
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print(«Отсортированный массив:», arr)
2. Поиск элемента в списке: Алгоритм линейного поиска
Линейный поиск проверяет каждый элемент списка последовательно до тех пор пока не найдет искомый элемент.
def linear_search(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i # Возвращаем индекс найденного элемента
return -1 # Если элемент не найден
# Пример использования:
arr = [64, 34, 25, 12, 22, 11, 90]
target = 25
result = linear_search(arr, target)
if result != -1:
print(f»Элемент {target} найден на позиции {result}.»)
else:
print(f»Элемент {target} не найден в списке.»)
3. Обход графа: Поиск в ширину (Breadth-First Search, BFS)
Поиск в ширину используется для обхода или поиска в графе или дереве, двигаясь сначала ко всем соседним вершинам текущей вершины, а затем к следующему уровню.
from collections import deque
def bfs(graph, start):
visited = set()
queue = deque([start])
while queue:
node = queue.popleft()
if node not in visited:
visited.add(node)
print(node, end=’ ‘)
queue.extend(graph[node] — visited)
# Пример использования:
graph = {
‘A’: {‘B’, ‘C’},
‘B’: {‘A’, ‘D’, ‘E’},
‘C’: {‘A’, ‘F’},
‘D’: {‘B’},
‘E’: {‘B’, ‘F’},
‘F’: {‘C’, ‘E’}
}
print(«Результат обхода в ширину (BFS) с вершины A:»)
bfs(graph, ‘A’)
4. Поиск наименьшего пути: Алгоритм Дейкстры
Алгоритм Дейкстры находит кратчайший путь от одной вершины графа ко всем остальным, когда все ребра имеют положительные весы.
import heapq
def dijkstra(graph, start):
distances = {vertex: float(‘infinity’) for vertex in graph}
distances[start] = 0
priority_queue = [(0, start)]
while priority_queue:
current_distance, current_vertex = heapq.heappop(priority_queue)
if current_distance > distances[current_vertex]:
continue
for neighbor, weight in graph[current_vertex].items():
distance = current_distance + weight
if distance < distants[neighbor]:
distances[neighbor] = distance
heapq.heappush(priority_queue, (distance, neighbor))
return distannces
# Пример использования:
graph = {
‘A’: {‘B’: 1, ‘C’: 4},
‘B’: {‘A’: 1, ‘C’: 2, ‘D’: 5},
‘C’: {‘A’: 4, ‘B’: 2, ‘D’: 1},
‘D’: {‘B’: 5, ‘C’: 1}
}
start_vertex = ‘A’
distancia = dijkstra(graph, start_vertex)
print(f»Кратчайшие расстояния от вершины {start_vertex}:»)
for vertex, distance in distances.items():
print(f»От {start_vertex} до {vertex}: {distance}»)
Знание алгоритмов позволит вам эффективно решать разные задачи и задачи программирования, включая разработку программного обеспечения и работу с большими объемами данных.