|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Генерацию длинных сочетаний можно оптимизировать за счет более быстрого формирования хвоста в случае, когда он состоит из серии последовательных элементов. Например, для каждого из следующих переходов достаточно изменить 1 элемент: 02348 01348 01248 01238 Длинные сочетания следующий алгоритм на Delphi генерирует быстрее предыдущего более, чем в 2 pаза: Код: pascal 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2021, 22:59 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
С псевдооптимизациями я понял. Теперь вопрос по способам использования. Данная версия заточена на массовый стрим сочетаний. А если хочется ... не уверен, что правильно, реэнтерабельности? Аналогично next_permutation() Сильно надо курочить для переделки под сохранение последнего состояния циклов? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 12:54 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
exp98 А если хочется ... не уверен, что правильно, реэнтерабельности? Аналогично next_permutation() 22268624 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2021, 13:01 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Мой вариант: Код: pascal 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 00:41 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Пора наверное делать сравнительную табличку. Все реализации. И скорость генерации. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 02:03 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Генерацию длинных сочетаний можно оптимизировать за счет более быстрого формирования хвоста в случае, когда он состоит из серии последовательных элементов. Например, для каждого из следующих переходов достаточно изменить 1 элемент: 02348 01348 01248 01238 Длинные сочетания следующий алгоритм на Delphi генерирует быстрее предыдущего более, чем в 2 pаза: Код: pascal 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.
Ваш алгоритм делает перестановки не из чисел массива, а просто уменьшая и увеличивая начальные числа на 1. Это неправильно, должны быть перестановки элементов массива. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 09:34 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
__Avenger__ Ваш алгоритм делает перестановки не из чисел массива, а просто уменьшая и увеличивая начальные числа на 1. Это неправильно, должны быть перестановки элементов массива. Все верно, так получилось что исходно все решали задачу перестановок диапазона от 1 до N, где N задается на входе. Будем считать эти числа индексами элементов массива начиная с 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 10:07 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Здесь на топике рассматриваются только перестановки N чисел из M чисел? А если ещё рассматривать все комбинации чисел из M чисел: по 1, по 2, по 3 и т.д. за один прогон ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 14:42 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Gennadiy Usov А если ещё рассматривать все комбинации чисел из M чисел: по 1, по 2, по 3 и т.д. за один прогон Если еще добавить используемое тут условие монотонного возрастания, то такая комбинация одна для каждого М. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 14:47 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Gennadiy Usov Здесь на топике рассматриваются только перестановки N чисел из M чисел? А если ещё рассматривать все комбинации чисел из M чисел: по 1, по 2, по 3 и т.д. за один прогон тогда просто M-битный счетчик: K=K+1 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 14:57 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Кстати, если найдена одна комбинация N из М, то тут же есть одна комбинация (М - N) из М Или проще (и быстрее) в едином цикле (циклах) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 14:57 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
нашел в Питоне подпрограмму: itertools.combinations(iterable, [r]) - комбинации длиной r из iterable без повторяющихся элементов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 19:21 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Gennadiy Usov нашел в Питоне подпрограмму: itertools.combinations(iterable, [r]) - комбинации длиной r из iterable без повторяющихся элементов. Нам тут надо чуть сложнее, комбинация должна быть монотонно возрастающая, т.е. надо {1,2,3} и не надо {1,3,2}, {3,2,1} и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 19:34 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Обсуждать питонские комбинаторщики имеет смысл только с их исходным кодом и если они несут идею лучше чем мы уже здесь рассмотрели. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 19:47 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
mayton Обсуждать питонские комбинаторщики имеет смысл только с их исходным кодом и если они несут идею лучше чем мы уже здесь рассмотрели. Массив из 25 чисел обрабатывается за 5 сек. на моём компе. 33554430 вариантов. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 19:53 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Dima T Gennadiy Usov нашел в Питоне подпрограмму: itertools.combinations(iterable, [r]) - комбинации длиной r из iterable без повторяющихся элементов. Нам тут надо чуть сложнее, комбинация должна быть монотонно возрастающая, т.е. надо {1,2,3} и не надо {1,3,2}, {3,2,1} и т.п. то и получаемые массивы будут то же монотонно возрастающие (убывающие) Проверено ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 19:56 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Без исходников - неинтересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 20:03 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Вот код реализации itertools.combination: https://github.com/python/cpython/blob/master/Modules/itertoolsmodule.c#L2674 Алгоритм похож на Dima T Алгоритм скопировал в свой код. Работает почти в два раза медленнее моего. Впрочем там видны места потенциальных оптимизаций. Может и можно его ускорить. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 11:25 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
до кучи добавлю питонизацию алгоритма 22272948 , перебирает комбинации по 6 из 100 за 84 сек: Код: python 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 14:31 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov, спасибо. Насколько я понимаю CPython - это и есть реализация Python3. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 15:19 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
mayton Aleksandr Sharahov, спасибо. Насколько я понимаю CPython - это и есть реализация Python3. я тоже так думаю ) Тут интересно то, что вызов их итератора для подсчета комбинаций оказывается сравним по времени и даже медленнее (90 сек), чем родная программа на питоне. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 15:30 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Ни знаю. Я ни разу ни кайфонул от Питона. Если нужен был универсальный язык-клей - то взяли-бы Lua например. А в этом Питоне есть странные вырви-глазные ключевые слова. Код: sql 1.
например. Зачем так сделано? ХЗ. Язык должен быть эстетически красив и радовать. Причем масса других ключевых слов - с маленькой буквы а True/False почему-то с большой. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 15:39 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
mayton Язык должен быть эстетически красив и радовать. Подумал сразу, что если в известном поизведении LA Creazione в дающую справа руку вложить мордофон? Веление времени. Что станет с эстетикой? И вообще, по-мойму из 3-х свойств ЯП (красота, радость, скорость) осуществимы не более 2-х. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2021, 17:32 |
|
|
start [/forum/topic.php?fid=16&msg=40044945&tid=1339689]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
56ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 247ms |
total: | 414ms |
0 / 0 |