Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/65: Рейтинг темы: голосов - 65, средняя оценка - 4.62
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219

Гипотеза Коллатца(ускорить код)

12.12.2015, 19:38. Показов 13446. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Существует вот такая вот гипотеза Коллатца(https://ru.wikipedia.org/wiki/Гипотеза_Коллатца), которую я отобразил в следующей функции:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int collatza(int n){
        int cnt=1;
 while(n!=1){
                if(n%2==0){
                cnt++;
                n=n/2;
                }
                else{
                cnt++;
                n=3*n+1;
                }
        }
return cnt;
}
Функция принимает целое число и считает количество цифр, которое будет вычислено по ходу работы функции до того момента, пока результат не будет равняться 0.
Кратко о сути. Берём число n, если оно четное делим его на 2, если нет умножаем на 3 и добавляем 1. С получившимся результатом поступаем точно так же до того момента, пока число n не будет равняться 1.
Например для n = 7;
7 = 7,22,11,34,17,52,26,13,40,20,10,5,16,8,4 ,2,1.
Таким образом в нашей последовательности получилось 17 чисел.
Данные числа(количество чисел в последовательности до 1) программа вычисляет для значений от 1 до 65535 включительно и записывает в массив соответственно.
Вопрос вот в чем, подскажите, посоветуйте, как можно изменить либо модифицировать либо дописать данную функцию, чтобы сама программа работала быстрее. На данный момент время выполнения программы 0,044 секунды.
Может существуют, еще какие-нибудь магические свойства языка Си, которые могут это осуществить???

Добавлено через 24 минуты
Ускорил немного код вместо умножения на 3 использовал трёхкратное прибавление и вместо деления на 2 смещение вправо на 1 бит. Теперь время выполнения программы 0.035 с. Может у кого-нить имеются еще соображения на этот повод???
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int collatza(int n){
        unsigned int cnt=1;
        if(n==1)return cnt;
 
 while(n!=1){
                if(n==10)return cnt+6;
                if(n%2==0){
                cnt++;
                n=n>>1;
                }
                else{
                cnt++;
                n=n+n+n+1;
                }
        }
return cnt;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2015, 19:38
Ответы с готовыми решениями:

Нужно ускорить код
Мне нужно написать программу, для преобразования коэффициентов системы и столбца свободных членов к виду, необходимому для импорта в...

Последовательность Коллатца
Всем добрый день! Задачка у меня - найти самую длинную цепочку чисел до миллиона по правилу: если число чётное, то делим его пополам,...

Гипотеза Коллатца
Берём любое натуральное число n. Если оно чётное, то делим его на 2, а если нечётное, то умножаем на 3 и прибавляем 1 (получаем 3n + 1)....

28
13.12.2015, 13:52
Студворк — интернет-сервис помощи студентам

Не по теме:

nmcf, делал для ключа произвольной длины, что вылилось в неоптимальность некоторых методов для длинной арифметики. Векторизации подверглась процедура умножения длинных чисел в столбик, которая в свою очередь использовалась в Карацубе. Операцию взятия модуля сделал через алгоритм Баррета.
Распараллеливался поиск большого простого числа через тест Рабина-Миллера.

Но даже после всего этого преподаватель сказал, что оптимизации дали странно малый прирост производительности, но зачет все же поставил.

0
13.12.2015, 15:37

Не по теме:

Цитата Сообщение от nonedark2008 Посмотреть сообщение
Мне для зачета курсача по RSA пришлось реализовывать эффективную длинную арифметику, затем векторизовать вычисления, а потом распараллелить...
И Вы попросили помощи на форуме?

0
13.12.2015, 16:12

Не по теме:

Цитата Сообщение от zer0mail Посмотреть сообщение
И Вы попросили помощи на форуме?
Я попросил помощи у Гугла и научного руководителя.
У меня был на удивление хороший руководитель, он мне сразу сказал, чего от меня ожидает:
RSA, длинная арифметика, векторизация, распараллеливание. Когда у меня возникла проблема с длинной арифметикой, меня отправили читать второй том Кнута. Все остальное без вопросов выдает Гугл, если правильно сформировать запрос.

Я уже долго сижу на нашем форуме,
чтобы предсказать реакцию сообщества на запрос "Помогите" для проекта в 10+ файлов.

0
13.12.2015, 17:05

Не по теме:

Вот видите, а я задавал вопрос насчет тем "помогите уложиться по времени для зачета" на форуме.
Если не на форуме или не для зачета (а, например, для олимпиадной задачи) - то не к моему вопросу. :)

0
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
13.12.2015, 18:37  [ТС]
)))
0
13.12.2015, 18:37

Не по теме:

Цитата Сообщение от Aliaxandr Посмотреть сообщение
у нас такой конкурс на потоке, поэтому код то и нужно ускорить
Кто-нибудь из однокурсников увидит, и сдаст твой выложенный код вместо тебя :)

0
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
13.12.2015, 18:39  [ТС]
nonedark2008, я в польше учусь))))))))))
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
13.12.2015, 18:47
Aliaxandr, в английских статьях полно информации по данному алгоритму, например вот.
Также есть информации, что его можно быстро считать на GPU.
И да, попробуй распараллелить вычисление.
3
9 / 9 / 8
Регистрация: 03.07.2015
Сообщений: 219
13.12.2015, 19:05  [ТС]
nonedark2008, хорошая ссылка, однако, спасибо еще раз!!! А вообще не ищу на форуме, что-то типа "сделайте за меня" совет, идея, вот, что более ценное, а если сумел данный совет записать в код, то за тобой не заржавеет. И многие вещи приходят с опытом.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2015, 19:05
Помогаю со студенческими работами здесь

Гипотеза Коллатца и 2*n-1
Гипотеза Коллатца Collatz conjecture почему в гипотезе используется 3*n+1 если тот же результат можно получить с 2*n-1? или с 5*n +...

Оптимизация программы(Гипотеза Коллатца)
(https://ru.wikipedia.org/Гипотеза_Коллатца) Суть гипотезы загключается в следующем: берём целое число, если оно чётное делим его на 2,...

Одна из нерешенных проблем математики — гипотеза Коллатца
Одна из нерешенных проблем математики — гипотеза Коллатца — касается последовательности чисел называемой сиракузской или...

Ускорить код
От чего тормозится код?? что можно изменить убрать,чтобы код работал быстрее?? например syso убрать,что можно еще сделать? Добавлено...

Как ускорить код ?
тут были уже вопросы на эту тему но я все же хотел узнать как ускорить мой код в задаче Ириска весит X грамм, мандарин – Y...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru