|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
Код: plaintext 1.
вот в таком векторе надо хранить неск.цифр в произвольных ячейках, а потом добавлять/убирать из них цифры и искать совпадения я пока нашёл выход через битмап (каждая цифра влезает в 10 бит) (битфилд походу не сможет все поставленные задачи решить) но есть затык с определением, когда осталась 1 цифра (это в цикле надо чекать постоянно) а как это в битмапе сделать наиболее эффективно? второй вектор держать с кол-вом цифр в каждой ячейке не хочется ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 16:32 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
полудух, чтоб точно ответить - нужна оригинальная постановка задачи. имхо = 100 в размерности ответ на вопрос как :) (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 16:42 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
да это я решатель sudoku пишу в ячейки складываются цифры, которые могут быть в ячейке (их 81 штука) ответ = 100 не понял ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 18:01 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
Почему вектор, а не двумерная матрица 9x9 в виде классического "статического" массива? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 19:06 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
Если хочется сэкономить на хранении списка возможных чисел в ячейке, то в качестве элемента такой структуры хватит Uint16. Так как кол-во возможных значений не больше 9-ти, то используешь 9 младших (старших) бит этого числа - по одному на каждое число: если n-ый бит выставлен, значит число допустимое, если не выставлен, значит уже недопустимо. Судоку считается решенным, когда в каждой ячейке остается по одному выставленному биту, уникальному среди элементов текущей строки и текущего столбца. Подобные подходы, например, используются в моих приложениях по ссылке в профиле. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 19:32 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
есть 3 многомерных вектора 9x9: строки/колонки/блоки а для хранения исходного судоку/tmp достаточно простых векторов ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 19:32 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
AmKadЕсли хочется сэкономить на хранении списка возможных чисел в ячейке, то в качестве элемента такой структуры хватит Uint16. Так как кол-во возможных значений не больше 9-ти, то используешь 9 младших (старших) бит этого числа - по одному на каждое число: если n-ый бит выставлен, значит число допустимое, если не выставлен, значит уже недопустимо. Судоку считается решенным, когда в каждой ячейке остается по одному выставленному биту, уникальному среди элементов текущей строки и текущего столбца. Подобные подходы, например, используются в моих приложениях по ссылке в профиле. так это и есть битмап ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 19:33 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
и как там определять, что всего 1 бит выставлен? перебором чтоли? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 19:34 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
полудухи как там определять, что всего 1 бит выставлен? перебором чтоли?Для того, чтобы проверить, что в битмапе выставлен только один бит, надо проверить, является ли данное число степенью двойки. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 19:36 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
ага, вот и макрос: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 20:58 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
P.S. 1) Я бы записал чуть короче: Код: plaintext 1.
2) Вместо макроса заюзал бы inline-function. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 21:31 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
спасибо inline ведь может и не включить ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 22:20 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#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.
очевидно, что -O3/-O2 автоматом инлайнят и даже ссылку ставят (или убирают? ах, если бы только asm не обосрали злые мальчишки...) -O1 автоматом не инлайнит, но если убрать ссылку, то опять 1.533... И он быстрее, чем оптимизированный код. макрос с -O3/-O2 медленнее, чем -O1 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2019, 23:51 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
полудух, Я отдал предпочтение функции из более общих соображений, таких как side effect, прозрачности и прочих. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2019, 08:34 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
да к функции вопросов нет вопрос - почему такое странное поведение у ссылки и почему O1 быстрее O2/O3 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2019, 12:02 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
макрос то получается медленнее ф-и, так что ф-я ок ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2019, 12:03 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
Не уловил, причем тут ссылка? Само по себе указание const еще не делает параметр ссылкой. Или ты проводил тесты с функцией, меняя ее сигнатуру? Если не предполагается изменение параметров в вызываемой функции, то примитивные типы (по крайней мере те, чья размерность не превышает разрядность адреса) рекомендуется передавать по значению, а не по адресу/ссылке, дабы исключить операцию разыменования (получения значения по адресу) в вызываемой функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2019, 12:25 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
я тестировал все варианты: inline bool is_deg_of_2(const T &n) inline bool is_deg_of_2(const T n) bool is_deg_of_2(const T n) bool is_deg_of_2(const T &n) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2019, 13:07 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
В замечательном цикле делается пара простых операций с числом и 2 обращения к методам ofstream. Каких-либо выводов на тему макрос vs функция в таких условиях тут сделать не получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2019, 15:32 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
так макросы априори простенькие все ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2019, 16:21 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
не, не все.. блин, 2018 год, люди живут на макросах чуть менее, чем полностью boost::hana вообще вся в макросах вообще весь boost в макросах причём они туда даже классы пихают в целом код такой дикий, что хочется выбежать в окно не потому ли буст в тестах часто многократно сливает нормальным либам (иногда и в десятки раз)... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2019, 06:01 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
Насколько я понял макросы используются в сборке текстовых литералов через ##. Это тот юзкейс когда шаблоны и инлайнинг нелетают. Вот надо разобраться с какого буя им нужна сборка новых литералов и тогда проблема будет пофикшена. P.S. Согласен. Макросы - каменный век. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2019, 12:18 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
Ну вот что это за фигня такая. Кодогенерация мать ее так. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.10.2019, 16:34 |
|
когда вектор на 100 и в каждой ячейке несколько цифр
|
|||
---|---|---|---|
#18+
пфф... в std-либе есть и такое: Код: 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.
/usr/include/c++/6/bits/valarray_array.h ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2019, 04:58 |
|
|
start [/forum/topic.php?fid=57&msg=39873873&tid=2017548]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 264ms |
total: | 401ms |
0 / 0 |