Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Сегодня я как обычно тренировался, решал такую задачу : авторТребуется вычислить факториал целого числа N(max 1000). Написал такую программу(реализовал длинную арифметику для натуральных чисел): Код: 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. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. С первого раза система её приняла (правда до этого я тестировал функции самостоятельно). Потом посмотрел как это делается в сети. Алгоритмы примерно одинаковые, только с памятью немного по другому работают. Также, возможно, нет необходимости передавать длину строк в функции, если её можно вычислить с помощью функции size_t strlen(const char* ). Посмотрел раздел лучшие решения, и увидел на первом месте программу на C++ размером 165 символов. Я был удивлён, моя занимает в 10 раз больше, и даже с учётом оптимизаций, она будет в 5 раз больше. Первым делом я поискал библиотеки для работы с длинными числами(стандартные), но то ли плохо искал, то ли их и правда нет. Подскажите пожалуйста, в каком направлении нужно двигаться, чтобы понять как эту программу можно написать за 165 символов.(не прошу вас писать и тратить на это своё время) И ещё, можно не передавать количество символов в функции, или правильно передавать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 06:02 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, стандарт де-факто для работы с большими числами - GMP. https://gmplib.org/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 07:37 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury , Сашок. Есть сообщество JavaScript кодеров. Они пилят шахматы в 5 килобайт. Это очень интересный мозго*б-трах. Повышает гибкость и олимпиадное мышление. К сожалению для промышленных задач он весьма и весьма бесполезен. Ну какое ты преимущество получишь если будет 165 символов ? Засилье defines и полную нечитабельность. Если реально ищешь краткости и концентрации мысли то иди в Haskell. Там такие задачки кодят в три строки что у меня стучит челюсть об клавишу пробел. Ну вобщем с пятницей тебя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 12:32 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury, Тут ещё дело в подходах. Некоторые хранят числа как с фиксированной точкой. но не char-encoded, и не BCD (кстати, в некоторых машинах есть прямая поддержка BCD на уровне машинных комманд), а в виде числа, хранящегося в системе счисления по основанию 256 (по, надеюсь, понятной причине). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 13:13 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
mayton, спасибо, и вас с пятницей C: не ищу краткости, мне нравятся стройность, красота, оптимальность кода. MasterZiv, тогда в одном символе я могу хранить 256 значений. Значит в 8 символах, например, будет 256^8 значений. Или причина другая ? По времени та программа не выигрывает кстати, но по памяти она лучше, я думаю это связано с тем что я несколько раз в функция делаю сдвиг символов, и realloc. И возможно делаю это не грамотно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 14:53 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
MasterZivа в виде числа, хранящегося в системе счисления по основанию 256 (по, надеюсь, понятной причине). ну тогда уж основание 2 32 или 2 64 по той же причине ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 15:07 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercurymayton, спасибо, и вас с пятницей C: не ищу краткости, мне нравятся стройность, красота, оптимальность кода. Вот сейчас ты сказал несколько противоречивых на мой взгляд тезисов. Или требующих дополнения. Обрати внимание также на формулу Стирлинга. https://ru.wikipedia.org/wiki/Факториал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 15:32 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonSashaMercurymayton, спасибо, и вас с пятницей C: не ищу краткости, мне нравятся стройность, красота, оптимальность кода. Вот сейчас ты сказал несколько противоречивых на мой взгляд тезисов. Или требующих дополнения. Обрати внимание также на формулу Стирлинга. Мне нравится оптимальное сочетание этих вещей, ну и вообще - всё в меру. Слишком слабо знаю язык Си, и теорию языков программирования, чтобы серьёзно об этом рассуждать. Но думаю в дальнейшем я смогу сделать обоснованные выводы на эту тему. Мне кажется к этим выводам я приду совершенно случайно, может быть перед сном, или в автобусе. Это как понимание актуальности классов, я знал что они есть, и даже использовал их в C#, но не понимал почему без них нельзя. Но когда писал методы для работы с матрицами на С, у меня возникло желание объединить методы и характеристики объектов. Теперь я понимаю, что без них скорее всего можно обойтись, но для грамотной декомпозиции, классы могут быть актуальны. Спасибо, о формуле Стирлинга я подумал в первую очередь, но в любом случае, придётся использовать длинную арифметику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2014, 15:56 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Сегодня вновь пришлось с ней обратиться, и я решил "погуглить", как мне советовал Anatoly Moskovsky. Наткнулся на работу одного товарища, вот этого [quote ссылка ] Hi. I'm a former grad student of the Department of Computer Sciences at The University of Texas at Austin. I received my Ph.D. in Computer Sciences on May 18, 2002. I'm now an assistant professor in the Department of Computer Science at Rutgers University. [/quote] Университет тоже вроде приличный . Вот сама работа Настроение от прочтения данной работы у меня испортилось, потому что мне практически ничего не понравилось. Начало всё с обычных вещей: авторSome compilers, such as GCC, offer a "long long" type, giving 64 bits capable of representing about 9 quintillion (9 times 1018) 1. Какие компиляторы ? При чём тут это ? Есть стандарт, там написано чёрным по белому о том что существует тип данных long long int. Он должен был написать про стандарт, и про то что некоторые компиляторы могут поддерживать такой тип данных. 2. Он должен был написать про то что существуют extendet integer types, fe __int128 Далее, авторIn our new representation, we have an array of "digits" (integers) in some base b. Typically, b = 10, our normal decimal number system; that makes things easy to print. The 0'th array element is the 1's place, the #1 element is the ten's place, the #2 element is the hundred's place, and so forth (really, the b0's place, the b1 place, the b2 place, etc.) 3. Где хоть слово про последний элемент ??? Я очень хотел встретить терминальный нуль //далее в комментариях я встретил и самое главное 4. Где обоснование что числа в длинной арифметике нужно хранить реверсом (хотя вот тут я его не виню, может быть это очевидно для людей со степенью PhD(тут без иронии говорю)) 5. Он вводит в работе BASE. Но ничего не говорит о том, каков лимит символов для одного long integer 6. Мне так и не понятно как грамотно работать с памятью, выделять сразу максимум(если его надо вводить-скорее всего надо), например 1000 символов, и потом уменьшать размере выделенной памяти, либо выделять память в два этапа, минимальный размер, +1 если будет переполнение. Или выделять 500 символов сразу, а потом довыделять. 7. Ни одна из его функций ничего не возвращает, мне это не нравится. Верны ли мои комментарии ? Дайте пожалуйста ответы на вопросы которые есть в них. Или дайте ссылку где все эти вопросы решены(Чувствую что есть в Кнуте, но у меня первый том, и я пока этого там не встретил). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 09:25 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercury6. Мне так и не понятно как грамотно работать с памятью, выделять сразу максимум(если его надо вводить-скорее всего надо), например 1000 символов, и потом уменьшать размере выделенной памяти, либо выделять память в два этапа, минимальный размер, +1 если будет переполнение. Или выделять 500 символов сразу, а потом довыделять. На самом деле при твоей постановке "сферической длинной арифметике в вакууме" нет ответа на вопрос - сколько выделять сразу и потом. Эти параметры - экспертные и подбираются исходя из гистограммы разрядности чисел которые ты будешь вычислять. А рязрядность будет обычно ограниченная. К примеру если это финансовая арифметика или работа с ключами криптографии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 10:30 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Сейчас зайду, разбежался. Удалите этот бред. mayton, мне интересна классическая постановка и классическое решение. Я уже эту задачу решил но мне нужно знать как это делать оптимально, и правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 14:16 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Верны ли замечания по лекции PhD ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 14:21 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryСейчас зайду, разбежался. Удалите этот бред. mayton, мне интересна классическая постановка и классическое решение. Я уже эту задачу решил но мне нужно знать как это делать оптимально, и правильно. 1) Тогда используй "классический" подход. Выделяй ровно столько сколько надо через malloc. Перевыделяй через realloc. 2) Что нужно удалять?. И зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:05 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Нет, насчёт удалять я не прав, это не нужно. То есть делать функции для строк любой мощности ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:20 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryНет, насчёт удалять я не прав, это не нужно. То есть делать функции для строк любой мощности ? Я вот щас хватаюсь за голову и вспоминаю что такое мощность . Я знаю мощность из физики. Как работа на время. Я знаю мощность множеств из курса дискретной математики. Есть экономические мощности e.t.c. Но что такое мощность строк ? Может прояснишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:26 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Имею ввиду мощность множества из дискретной математики, ведь строка это массив символов(или аналог - множество). Потому количество символов в строке называю мощностью :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:29 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Мультимножество наверное хотел сказать. Ну вобщем не прикалывайся. Запутал только. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:35 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
ахах, не буду прикалываться :D меня гонят.До свидание всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:53 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
maytonМультимножество наверное хотел сказать. Может просто "длина"? Раз о строках речь. PS SashaMercury будь проще и люди к тебе потянутся (с), а то как в анекдоте: - Не подскажете как найти площадь Ленина? - Элементарно, умножьте высоту Ленина на ширину :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 16:05 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Весёлый анекдот C: Дело в том, что слово мощность, подразумевает множество элементов, потому когда я говорю "мощность строки", то я подчёркиваю что имею дело с массивом символов, а не с неким элементов строки. Слово длина больше ассоциируется с ростом, длиной чего-нибудь в сантиметрах. Кстати, мощность равная нулю, это указатель, на который не выделенна память. Бесконечная мощность, я думаю тоже существует, в каких-нибудь алгоритмах, чувствую, появляется абстрактная бесконечная строка. Впрочем я гуглил, и не нашёл что-бы кто-нибудь из приличных учёных так говорил. Хотя, возможно мало искал, и в дальнейшем встречу у Хоара, или кого-нибудь ещё. В любом случае, пока я не получил чёткого "Почему правильней говорить длина строки, чем более естественная и очевидная фраза мощность строки". Еще, возможно у каждого программиста есть свой стиль, именования переменных, комментариев (тут конечно smald отличился :D), и т.п. Пока я именую так, хотя и учитываю мнение некоторых представителей Сообщества. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:36 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
SashaMercuryВпрочем я гуглил, и не нашёл что-бы кто-нибудь из приличных учёных так говорил. Плохо гуглил, хэлпа достаточно http://www.cplusplus.com/reference/cstring/strlen/ strlen size_t strlen ( const char * str ); Get string length Returns the length of the C string str. length однозначно переводится как "длина". Поэтому и привыкли все что у строк длина. PS Еще вес в метрах бывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:56 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Снова я плохо объяснил ( Не нашёл чтобы кто-то говорил pow и мощность. Длину я много раз встречал ) Практически везде. Но вес в метрах не слышал. Сейчас узнаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:58 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Сашок, ты в курсе что означает буква в GMP? Её не глупые люди пишут, можешь глянуть раз так интересно. автор. В любом случае, пока я не получил чёткого "Почему правильней говорить длина строки, чем более естественная и очевидная фраза мощность строки". Бросай курить. Мощность строк это ни разу не естественно. И не очевидно. авторPS Еще вес в метрах бывает PS. Ещё сила бывает в своих собственных килограммах . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:22 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
А дисперсия массы измеряется в килограммах квадратных. А чём мы вообще тут говорим? Саш. Культура обещения начинается с терминологии. Используй правильные термины и будешь понят. А если ты поэт и писатель и вообще тебе нравится придумывать новые слова - то ты ошибся форумом. Народ не поймет и будешь бит сообщестом. Зачем это тебе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:49 |
|
||
|
Длинная арифметика. Вопросы по реализации/оптимизации
|
|||
|---|---|---|---|
|
#18+
Я понял, что всем привыкли к слову длина-length Но кроме того, что так сложилось исторически, я не понимаю почему так. Плюс к тому что я писал ранее, длина может делиться постоянно, тут же у нас неделимые символы. Я могу сказать "половина сантиметра", но не могу сказать "половина символа". Привел несколько доводов в пользу слова мощность. StrangecatБросай курить. Мощность строк это ни разу не естественно. И не очевидно. Думаю что для любого изучающего в школе математику естественна связь, хоть может быть, не очевидно что именно так нужно называть. maytonСаш. Культура обещения начинается с терминологии. Используй правильные термины и будешь понят. А если ты поэт и писатель и вообще тебе нравится придумывать новые слова - то ты ошибся форумом. Народ не поймет и будешь бит сообщестом. Зачем это тебе? Просто хочу понять почему так. Пока делаю вывод: "Слово мощность подходит, но лучше использовать слово длина, в силу исторических причин". Понял. Больше на эту тему не дискутирую. Раз всем так не нравится. Возможно, дело в том что я слишком мало знаю в IT, потому так рассуждаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 01:56 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38723109&tid=2019209]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 274ms |
| total: | 432ms |

| 0 / 0 |
