|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Добавил что-то вроде silent-mode (просто любой третий аргумент командной строки). Изменил формулу расчета времени. И разделили поток комбинаций и статистику по раздельным файловым дескрипторам. Код: 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.
Два из сто тыщ - за 22 секунды. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 02:42 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
В исходнике Анатолия такой трюк с silent не прокатывает. Из за рекурсии. В идеале нужно просто написать два класса с виртуальным методом generate(...) и две реализации с принтом и без. Вобщем я просто оставлю закоментированным печать векторов сочетаний. Код: sql 1. 2. 3. 4.
Пока рекурсия побеждает на длинных N. Ключи оптимизации и версия компиллятора одинаковые. Код: sql 1. 2.
Скрипт для сборки тоже одинаковый. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 03:02 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Вот это число надо проверить. Может баг? mayton Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 03:05 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
mayton Вот это число надо проверить. Может баг? mayton Код: sql 1.
Ты за разрядность int вылез )) Поправь тип счетчика Код: plaintext 1. 2. 3.
mayton Код: plaintext 1. 2. 3. 4. 5.
У тебя это скомпилировалось? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 07:30 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Вот так корректно для GCC. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 09:28 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
mayton Код: plaintext 1.
clock() считает с момента запуска приложения, т.е. у тебя start == 0, можно его выкинуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 09:32 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Пускай будет. На результат почти не влияет. А если будет пользовательский ввод - то корректнее считать от начала алгоритма а не процедуры main. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 10:05 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
mayton Да. Это динамические (или как их там правильно) массивы на стэке, в стандарте это есть, а MS еще не реализовал, поэтому у меня не компилируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 10:10 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Прикинь я и не заметил. Еще походу удивился. Где там new ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 10:38 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
mayton Ну я скоро запутаюсь в исходниках. Все мои предыдущие исходники отправляются в корзину. Вот этот генерирует 6 из 100 на i7-7700 за 453 msec: Код: 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.
как вызывать: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 11:46 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Все мои предыдущие исходники отправляются в корзину. это прекрасно. Вот что брейншторм делает! Сегодня вечером попробую собрать на fpc. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2021, 12:19 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Я вот думаю можно ли как-то произвольное преобразование сделать? Т.е. знаешь номер по-порядку и преобразуешь его в соответствующее ему сочетание и наоборот. Типа как перевод из одной системы счисления в другую. По идее это тоже разновидность системы счисления, но разные разряды имеют разный вес. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2021, 09:32 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Dima T Я вот думаю можно ли как-то произвольное преобразование сделать? Т.е. знаешь номер по-порядку и преобразуешь его в соответствующее ему сочетание и наоборот. Типа как перевод из одной системы счисления в другую. По идее это тоже разновидность системы счисления, но разные разряды имеют разный вес. 1. В английской вики приводятся варианты нумерации, фактически имитирующие генерацию. 2. Можно старое сочетание использовать для генерации нового. 3. Можно рассмотреть комбинацию 1 и 2 - несплошную нумерацию, когда у номера комбинации единичные биты соответствуют выбранным элементам множества. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2021, 10:06 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Dima T Я вот думаю можно ли как-то произвольное преобразование сделать? Т.е. знаешь номер по-порядку и преобразуешь его в соответствующее ему сочетание и наоборот. Типа как перевод из одной системы счисления в другую. По идее это тоже разновидность системы счисления, но разные разряды имеют разный вес. Можно для все последовательности посчитать каждый 1000-й элемент. И назвать его опорным. И положить в табличку. Порядковый номер => опорный элемент. И дальше если нужно например 100000-й сочетание - то ищем бинарным поиском по табличке порядковый номер. И потом опорный и дальше перемоткой вперед добиваем столько позиций сколько надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2021, 10:29 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
UP. Привет всем. Прошу прощения за отсутсвие. Я помню что обещал. Просто неделька была бешеная. ПОЦ-ы. Стартапы. Тоесть POC-s. Я только-только отбился от всех. Надеюсь сегодня будет минутка сесть и собрать все сорцы в кучу и сделать какое-то сравнение. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 15:47 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov 1. В английской вики приводятся варианты нумерации, фактически имитирующие генерацию. Почитал и ничего не понял если честно, еще раз почитаю Aleksandr Sharahov 2. Можно старое сочетание использовать для генерации нового. У меня в коде так и происходит. next_combinations() получает на вход массив с текущей комбинацией и преобразует ее в следующую. mayton Можно для все последовательности посчитать каждый 1000-й элемент. И назвать его опорным. И положить в табличку. Порядковый номер => опорный элемент. И дальше если нужно например 100000-й сочетание - то ищем бинарным поиском по табличке порядковый номер. И потом опорный и дальше перемоткой вперед добиваем столько позиций сколько надо. Можно, эдакие радужные таблицы получатся, но их считать надо или хранить. Я пытался в уме формулу вывести для небольшой последовательности типа С(2,5) для 2-х вроде должно получиться, а если С(3,5) то тут уже сложнее, надо поизучать в экселе. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 15:59 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Dima T, кстати идеи которые у нас звучали в топике простых чисел применимы и для последовательности сочетаний. Например такое Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
хорошо сжимается дифференциальным кодированием или деревом префиксов. Как бегать поиском по сжатой структуре - отдельная задача. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 16:18 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
По поводу Delphi, FreePascal. Я синтаксис программы не помню. Кажется она начинается с program и заканчивается end. Сделал так. Код: 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.
Сборочный скриптик. Код: sql 1. 2. 3. 4. 5. 6.
И лог ошибок. Кто знает как исправить? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 21:17 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
mayton, на дельфи вот так все работает Код: 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. 52. 53.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 21:43 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
mayton хорошо сжимается дифференциальным кодированием или деревом префиксов. В идеале не должно быть ничего из упомянутого. Надо просто формулу для перевода какого-то значения, например 12345, в счисление C(K,N) и обратно ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 21:49 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Dima T mayton хорошо сжимается дифференциальным кодированием или деревом префиксов. В идеале не должно быть ничего из упомянутого. Надо просто формулу для перевода какого-то значения, например 12345, в счисление C(K,N) и обратно похоже формулы нету, есть алгоритмы, которые позволяют его вычислить для сочетания и наоборот. Суть всех методов - сведение к сумме задач меньшей размерности. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 22:04 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov, Все таки разница между делфи и фпс большая Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 22:26 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
mayton, одно понятно: вместо Result надо поставить имя функции GenerateCombinationDesc ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 22:55 |
|
Генерация сочетаний из N по K
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov, {$APPTYPE CONSOLE} надо убрать нижний блок можно попробовать заменить на Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2021, 23:03 |
|
|
start [/forum/topic.php?fid=16&msg=40039198&tid=1339689]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 145ms |
0 / 0 |