|
|
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
Привет всем! подскажите с идеей. Есть набор цифр с большим разбросом значений (от 0.01 до 9999.99) все цифры положительные. Абсолютно точно известно, что десять цифр из них дают в сумме Х. необходимо найти эти десять цифр. Например: есть ряд : 1 2 3 3 4 9 9 1 8 знаем что сумма 4х цифр дает 12. необходимо найти из каких именно цифр это складывается. в моем примере это 2,3,3,4. есть идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 10:01 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
Четыре вложенных цикла, перебор всех вариантов с проверкой на равенство суммы, вывод всех подходящих. --- Идеи движут Мир! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 10:15 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
прямой перебор не подходит. ряд цифр в реальности состоит из 500-1500 цифр. прямой перебор это факториал числа. А факториал 1500 - это ОЧЕНЬ!!! много. кроме того, ищутся не 4 цифры в нем а 100-200 цифр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 10:21 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
serg_psvпрямой перебор не подходит. Можно прекращать перебор когда точно знаем что результат будет не подходящим, например, когда сумма оставшихся цифр меньше чем оставшаяся сумма или наоборот, самое маленькое число больше чем оставшаяся сумма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 10:28 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
тоже не подходит, поскольку точно известно, что есть набор цифр подходящий под условие. Можно сказать - что его формируют /загадывают/ заранее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 10:54 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
serg_psvпрямой перебор не подходит. ряд цифр в реальности состоит из 500-1500 цифр. прямой перебор это факториал числа. А факториал 1500 - это ОЧЕНЬ!!! много. кроме того, ищутся не 4 цифры в нем а 100-200 цифр.начните с сортировки. После этого сумеете обрезать* все циклы сверху/снизу (по разнице промеж числом и суммой уже взятых первых членов (т.е. чисел из наружних циклов)). никакого факториала уже не будет. (кстати и для тупого перебора факториал - оценка слишком сверху, будет не фак, а "С из 1500 по 100-200". это уже "несколько меньше"). зы *дополнительно обрезать оценку в промежутошном цыкле можно заранее вычислив наименьшие суммы 1-го, 2-х и 3-х и т.д. (наименьших) членов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 11:01 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
serg_psvтоже не подходит, поскольку точно известно, что есть набор цифр подходящий под условие. Можно сказать - что его формируют /загадывают/ заранее.?млин, что ж вы так спешите? вам предложили, если я правильно понял, обрезать внутренний цыкл, "как только..." , это не мешает вам войти во внешнем на новом уровне - и ищите себе "заведомо подходящее решение". ЗЫ. если вы знаете сумму N максимальных и N минимальных челнов, то можете сразу прикинуть, из какой области (после сортировки) значений (в промежутке макс/минимум) вам стоит стартовать для перебора. Это, в отличие от обрезания, не уменьшит количество шагов на переборе, но повысит шансы наткнуться на решение раньше (если вас не интересуют все возможные решения, а только первое (первых несколько)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 11:08 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
А это, случаем, не задача о Рюкзаке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 11:31 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
Да, это она и есть. Примените локальный поиск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 12:05 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
serg_psv wrote: > Привет всем! > > подскажите с идеей. Есть набор цифр с большим разбросом значений (от 0.01 > до 9999.99) все цифры положительные. Абсолютно точно известно, что десять > цифр из них дают в сумме Х. необходимо найти эти десять цифр. > > Например: > есть ряд : 1 2 3 3 4 9 9 1 8 > знаем что сумма 4х цифр дает 12. необходимо найти из каких именно цифр это > складывается. в моем примере это 2,3,3,4. > > есть идеи? Первое, что пришло в голову: 1) Сортируем массив цифр по возрастающей. 2) находим (двигаясь от конца к началу первое значение меньшее или равное искомой сумме. 3) Далее, постепенно (i--) двигаясь к началу массива, для каждого такого найденного значения: 3.1) сохраняем сумму. 3.2) ищем двоичным поиском первое в диапазоне от начала массива до "родительского" числа (не включая его) число меньшее или равное этой сумме. 3.3) Если такое число не найдено, значит, комбинаций не существует, выходим. 3.4) сохраняем его в стек/динамический массив значений значений. 3.4) вычитаем найденное число из суммы. 3.5) если результат равен 0, выходим, попутно печатая все содержимое стека, иначе переходим к пункту 3.1. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 14:26 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
ErV wrote: > Первое, что пришло в голову: в алгоритме небольшой глюк (нужен i-- при рекурсивном поиске значений, иначе не будут выведены ВСЕ варианты) но идея должна быть понятна. Для оптимизации можно добавить параллельный массив, где будет храниться сумма всех предыдущих элементов - чтобы определить, когда дальше искать элементы суммы нет смысла. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 14:30 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
ErV ErV wrote: > Первое, что пришло в голову: ..идея должна быть понятна. ErV - спасибо. Такая идея тоже приходила мне в голову. Искать для одного из слагаемых свою, меньшую) комбинацию слагаемых. нашел похожую тему http://]/topic/56272 Сейчас изучаю метод ветвей и границ - мне кажется он то что надо для меня. поскольку придется анализировать 22638 чисел, ищя в ней 1063 числа в сумее дающих нужное мне { Кстати, в универе изучали задачу о рюкзаке. все забыл :( кто-нить может поделиться ссылками на классическое математическое решение этой задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2007, 17:39 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
serg_psv wrote: > кто-нить может поделиться ссылками на классическое математическое решение > этой задачи? Если классическая, то найдется поиском. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 05:37 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
динамическое программирование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 10:36 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
задача рекурсивна - то есть в отсортированном массиве начинаем с больших чисел и последовательно откусывая сводим задачу от n, к задаче от n-1. Глубина рекурсии не превысит 10 -для десяти чисел в сумме, чтобы не терять произовдительности вместо явной рекурсии берем ручной стек и цикл. ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 14:21 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
это классическая задача о рюкзаке если чисел не много, то подойдет перебор если чисел много никакая рекурсия и перебор не поможет (времени не хватит) существует быстрый "жадный" алгоритм есть число R из списка заданных чисел ищем наибольшее <= R определяем остаток и снова ищем т.е. всегда пытаемся засунуть в рюкзак н.б. из имеющихся предметов результат гарантируется не всегда , зато быстро ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 22:39 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
Valerэто классическая задача о рюкзаке если чисел не много, то подойдет перебор если чисел много никакая рекурсия и перебор не поможет (времени не хватит) существует быстрый "жадный" алгоритм есть число R из списка заданных чисел ищем наибольшее <= R определяем остаток и снова ищем т.е. всегда пытаемся засунуть в рюкзак н.б. из имеющихся предметов результат гарантируется не всегда , зато быстро Собственно я предлагаю тоже самое, но с тем существенным отличием, что если мы не попадаем в цель на 10-ом числе, то откатываемся на 9-ое и пробуем следующее (поменьше). Работает на отсортированном массиве естественно. Если число существует, то результат найдется быстро достаточно. Ваш же алгоритм имеет очень большую вероятность промахнуться, так как берет только один первый вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2007, 22:52 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
В больших задачах люблю запускать рандомный поиск. Правда обычно я оцениваю МИН и МАХ, а тут нужно точное соответствие. Можно попробовать так: 1) Выбирать случайные числа, пока не будет перебора 2) Поочередно перебрать каждый элемент, подставляя на его место каждый оставшийся 3) Выполнить генерацию снова Есть шанс, что за некоторое время работы будет получено искомое решение. Но тут никаких гарантий нет! --- Идеи движут Мир! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2007, 10:21 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
Alex_soldierВ больших задачах люблю запускать рандомный поиск. Правда обычно я оцениваю МИН и МАХ, а тут нужно точное соответствие. Рандомный поиск может пойти при нормальном распределении выборки. А тут я уверен в этом, что это не так на 99%. Хотя надо пойти проверить .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2007, 12:23 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
То что описывал Lelikk , это случайно не алгоритм поиска с возвратом? Тогда это аналог задачи о расстановке ферзей(и множества других) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2007, 21:55 |
|
||
|
поиск заданного кол-ва чисел в сумме дающих нужное число
|
|||
|---|---|---|---|
|
#18+
Вот, размещу скромную реализацию того что имел ввиду :) Вроде бы работает стабильно. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2007, 22:50 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=34713203&tid=1345903]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
195ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 473ms |

| 0 / 0 |
