Collatz序列:效率问题或软件/硬件太慢

Collatz Sequence: Efficiency problem or software/hardware too slow?

本文关键字:硬件 软件 序列 效率 问题 Collatz      更新时间:2023-10-16

我认为已经制定了一种解决方案,可以找到最大的collatz序列,但需要大量时间!我的问题确实在哪里来源:代码,软件,硬件?

我已经在互联网上进行了一些研究,并且看到人们在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;
}

现在,我是否错过了代码中的一些错误,关于效率的错误,还是我的笔记本电脑太慢了?

n需要具有较大的数据类型,长期解决了。