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

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

12.12.2015, 19:38. Показов 13758. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru