комбинаторика — Найти все комбинации чисел между минимальным и максимальным в переполнении стека

Я пытаюсь выяснить наиболее оптимизированный код, который найдет список комбинаций между X и Y для данного списка, как показано ниже:

  • A = 4
  • B = 6
  • C = 3
  • D = 5
  • Е = 4
  • F = 1

И скажем, X = 7, а Y = 16

Таким образом, находит все комбинации, сумма которых больше или равна X и меньше или равна Y. Значения могут повторяться.

То есть:

  • А.А.
  • AAA
  • AAAA
  • ABA
  • ABB
  • азбука
  • EE
  • EEE
  • ЕЕЕЕ
  • Е.А.
  • EAA

…И так далее

Конечное условие: дубликаты не должны быть включены. Например, ABB такой же, как BBA, и BAB. Таким образом, последние два не должны быть включены.

Я пытаюсь найти наиболее оптимизированный код для этого, так как список ввода может содержать до 200 номеров …

-1

Решение

Что нужно сделать:

  1. Зациклить все наши комбинации букв
  2. Упорядочить комбинацию в алфавитном порядке, чтобы мы могли найти дубликаты. например ABB такой же, как BAB — см. https://stackoverflow.com/a/9912497/897266
  3. Если это дубликат, отметьте его как таковой или исключите — см. https://stackoverflow.com/a/10096034/897266
  4. Рассчитайте значение каждой комбинации — см. https://stackoverflow.com/a/49181225/897266
  5. Сравните значение каждой комбинации, чтобы убедиться, что оно находится в пределах наших мин / макс. https://stackoverflow.com/a/4684064/897266
  6. Если это так, сохраните его, в противном случае пометьте его как нет или исключите
  7. После цикла выведите набор комбинаций, которые проходят тест и не являются дубликатами.

Я мог бы написать все это в php, но я надеюсь, что этого достаточно, чтобы дать вам шанс на это.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]