Я не мог придумать лучшего названия, для адекватного может потребоваться полное объяснение. Кроме того, комбинации могут вводить в заблуждение, поскольку проблема будет включать перестановки.
Что я хочу сделать sh - это превзойти метод грубой силы в Python при следующей задаче: учитывая 4 элементарных операции [+, -, *, /] и цифры от 1 до 9, и с учетом всех возможных комбинаций из 5 цифр и 4 операций без повторения (перестановок), которые приводят к заданному числу (рассматривается как целое число), как в 1 + 5 * 9-3 / 7 = 45, 1-2 / 3 + 9 * 5 = 45, ... получить все целые числа от минимально возможного до максимально возможного значения и выяснить, существуют ли все целые числа в пространстве.
Моя предварительная попытка с грубым перебором force это следующее:
def brute_force(target):
temp = 0
x = [i for i in range(1,10)]
numbers = [str(i) for i in x]
operators = ["+","-","*","/"]
for values in permutations(numbers,5):
for oper in permutations(operators):
formula = "".join(o + v for o,v in zip([""]+list(oper),values))
if round(eval(formula)) == int(target):
temp += 1
if temp > 0:
return True
else:
return False
for i in range(-100,100):
total = brute_force(i)
if total:
print(i)
else:
print(str(i) + 'No')
Он просто печатает «Нет», кроме целых чисел, которые не были найдены. Как может показаться очевидным, все целочисленные значения можно найти в пространстве, в диапазоне от -71 до 79.
Я являюсь новичком как с Python, так и с реализацией алгоритмов c, но я думаю, что алгоритм имеет сложность O (n!), судя по тому, что в нем участвуют перестановки. Но если это не так, я все же хочу алгоритм, который работает лучше (например, рекурсия или динамическое программирование c).