Collatz Sequence: проблема эффективности или слишком медленное программное / аппаратное обеспечение? - PullRequest
0 голосов
/ 10 мая 2019

Я думаю, что разработали решение для нахождения наибольшей последовательности Коллатца ниже предела, но это занимает много времени!Мой вопрос на самом деле: где источник этого кода: код, программное обеспечение, аппаратное обеспечение?

Я провел какое-то исследование в Интернете и видел, что люди делают это примерно так же, когда время выполнения составляет около 2000 мс.В то время как мой компьютер даже не зашел так далеко!Я использую Visual Studio, C ++.Кстати, после отладки можно увидеть, что вычисление внезапно (останавливается, борется, зависает?) При определении последовательности 113383.

Вот мой маленький фрагмент кода:

(Части скарта и первое, если есть возможные дополнения, которые, как я думал, могут ускорить весь процесс, но не делают. Если я опущу их, то же самое по скорости)

#include <iostream>
#include <set>
#include <map>

using namespace std;

#define LIMIT 1234567

int main()
{
    int n = 0;
    int compare = 0;
    int longest = 0;
    int counter = 1;
    set <int> nums2excl;
    map <int, int> mappi;
    map <int, int>::const_iterator itMap = mappi.begin();

    for (int i = 13; i < LIMIT; i++)
    {
        if (nums2excl.find(i) != nums2excl.end())
        {
            continue;
        }

        n = i;

        while (n != 1)
        {
            itMap = mappi.find(n);
            if (itMap != mappi.end())
            {
                counter += ((*itMap).second - 1);
                break;
            }

            if (n % 2 == 0)
            {
                n /= 2;
            }
            else
            {
                n = 3 * n + 1;

                if (n > i)
                {
                    nums2excl.emplace(n);
                }
            }

            counter++;
        }

        mappi.emplace(i, counter);

        if (counter > compare)
        {
            compare = counter;
            longest = i;

            //Test
            cout << i << endl;
        }

        counter = 1; 
    }

    return 0;
}

Теперь, я пропускаю некоторые ошибки вкод, ошибки в эффективности или мой ноутбук слишком медленный для этого?

1 Ответ

0 голосов
/ 11 мая 2019

n должен иметь больший тип данных, долго долго это решал.

...