Вот несколько методов, обычно используемых в соревновательном программировании, с примерами кода:
-
Грубая сила.
Грубая сила предполагает перебор всех возможных решений и выбор лучшего. Этот подход подходит для входных данных небольшого размера.def brute_force(nums): max_sum = float('-inf') for i in range(len(nums)): for j in range(i, len(nums)): curr_sum = sum(nums[i:j+1]) max_sum = max(max_sum, curr_sum) return max_sum -
Двоичный поиск.
Двоичный поиск – это эффективный алгоритм поиска определенного значения в отсортированном списке или массиве.def binary_search(nums, target): low, high = 0, len(nums) - 1 while low <= high: mid = (low + high) // 2 if nums[mid] == target: return mid elif nums[mid] < target: low = mid + 1 else: high = mid - 1 return -1 -
Динамическое программирование.
Динамическое программирование разбивает сложную задачу на более мелкие перекрывающиеся подзадачи и решает их итеративно, сохраняя результаты во избежание повторных вычислений.def fibonacci(n): if n <= 1: return n dp = [0] * (n + 1) dp[1] = 1 for i in range(2, n + 1): dp[i] = dp[i - 1] + dp[i - 2] return dp[n] -
Поиск в глубину (DFS).
DFS — это алгоритм обхода, который исследует как можно дальше вдоль каждой ветви перед возвратом.def dfs(graph, start): visited = set() stack = [start] while stack: vertex = stack.pop() if vertex not in visited: visited.add(vertex) stack.extend(graph[vertex] - visited) return visited -
Поиск в ширину (BFS):
BFS — это алгоритм обхода, который исследует все вершины графа в порядке ширины, посещая всех соседей перед переходом на следующий уровень.from collections import deque def bfs(graph, start): visited = set() queue = deque([start]) while queue: vertex = queue.popleft() if vertex not in visited: visited.add(vertex) queue.extend(graph[vertex] - visited) return visited