Что является наиболее эффективным способом проверки, если любые числа в массиве суммируются до определенного числа, например: массив из (5,3,3,9,4) I хотите знать, можно ли добавить любое из этих чисел в массив, чтобы дать 10 , это произойдет, когда я добавлю (3,3,4)номера в массиве добавить к определенному номеру java
ответ
Мне нужно было провести больше времени, чем сейчас, чтобы придумать с действительно хорошим решением, но я бы предложил пересмотреть вашу стратегию. Как упоминал @DeepakBala, вы описываете NP-полную проблему.
Одна вещь, которая делает это по-другому, состоит в том, что сумма (Q) может быть значительно больше, чем числа в массиве. Кроме того, поскольку они ограничены между 3 и 150, когда у вас 2000 номеров, у вас будет много дубликатов. Используйте это в своих интересах - подсчитывайте числа перед работой с ними, и вам нужно только беспокоиться о 149 типах чисел.
Чтобы вы могли подумать, почему это важно, рассмотрите сортировку 1 миллиона номеров 1-100. Просто создайте массив, а затем подсчитайте, сколько раз вы видите каждый номер. Затем заново создайте список, напечатав каждый номер соответствующим количеством раз. Это O (n) вместо нормального O (n log (n)).
Вместо того, чтобы работать с массивом до 2000 чисел, рассмотрите массивы 150, которые расскажут вам о том, сколько из каждого вашего размера доступно и сколько из каждого размера вы используете.
Попробуйте добавить все большие числа до тех пор, пока вы не получите 150 очков Q, а затем посмотрите, есть ли у вас какие-либо отличные отличия. Если это не удастся, вам придется выяснить, как идти оттуда.
Спасибо. для вашей помощи, но я не понял, о чем вы говорили в «Попробуйте добавить все большие числа, пока не получите 150 очков Q, а затем посмотрите, есть ли у вас какие-либо отличия». – user2283297
Например, если у вас есть 10 полей из 150, 9 из 149 и 11 из 148, что дает вам 4469. Если Q - 4600, вы проверяете, есть ли у вас поле размером 4600-4469 = 131. –
- 1. Добавление элемента IList к определенному номеру индекса
- 2. Переход к определенному номеру записи JDBC
- 3. Добавить +1 к номеру телефона
- 4. Как добавить устройство к номеру в SASS
- 5. Добавление ImageIcon к определенному JPanel в массиве
- 6. Предельные входные теги к определенному номеру
- 7. перейти к определенному номеру страницы pdf-документа
- 8. Доступ к определенному объекту по имени/номеру?
- 9. Использование groovy для добавления к определенному номеру строки в файле
- 10. Как добавить дополнительные элементы к определенному ключу в массиве?
- 11. Добавить строку в файл по определенному номеру строки
- 12. preg_replace - Как соответствовать определенному номеру
- 13. добавить разделители к телефонному номеру
- 14. Как добавить 1 к последнему номеру?
- 15. Переход к определенному номеру страницы в функции пейджинга GridView
- 16. Поиск ближайшего номера вниз к другому номеру из массива
- 17. применить css к определенному элементу в массиве
- 18. Привязка к определенному свойству объектов в массиве
- 19. Javascript: Доступ к определенному элементу в массиве
- 20. Доступ к определенному местоположению в массиве строк
- 21. Добавить префикс к номеру например (1 = 001)
- 22. Добавить номер к неизвестному номеру в SQL
- 23. добавить ноль к номеру в калитки
- 24. добавить скобки к номеру телефона в unix
- 25. добавить 1 к каждому номеру в списке
- 26. присоединять А, то B к каждому номеру в массиве
- 27. метод, чтобы добавить цифру к существующему номеру в определенный индекс
- 28. UIPageViewController - как я могу перейти к определенному номеру страницы?
- 29. Доступ к определенному номеру записи из базы данных
- 30. Как добавить запятые в запятую к номеру в Google Refine
Об этом можно прочитать здесь: http://stackoverflow.com/questions/15532957/to-find-a-subset-from-a-set-whose-sum-equals-to-zero – user2147970
У вас есть описал проблему [Subset sum] (http://en.wikipedia.org/wiki/Subset_sum_problem) –
У вас есть только положительные числа? –