C++ 基于向量搜索的加速算法的最佳方法是什么?
我正在努力解决这个问题 到目前为止,我想我成功地构建了一个算法来找到答案。或者至少它给出了前40步的正确结果。但我需要计算第10000000000步。求解前40步(使用我的算法)大约需要3-4秒。迭代次数越大,计算时间也越长。我不认为我的电脑能在一年内解决10000000000次迭代 我所做的只是使用临时向量进行序列数计数(form_1和form_2),并将计算结果保留在每次迭代的结果中(testVec)。下面是我的代码:C++ 基于向量搜索的加速算法的最佳方法是什么?,c++,algorithm,vector,indexing,C++,Algorithm,Vector,Indexing,我正在努力解决这个问题 到目前为止,我想我成功地构建了一个算法来找到答案。或者至少它给出了前40步的正确结果。但我需要计算第10000000000步。求解前40步(使用我的算法)大约需要3-4秒。迭代次数越大,计算时间也越长。我不认为我的电脑能在一年内解决10000000000次迭代 我所做的只是使用临时向量进行序列数计数(form_1和form_2),并将计算结果保留在每次迭代的结果中(testVec)。下面是我的代码: #include <iostream> #include &
#include <iostream>
#include <stdio.h>
#include <vector>
#include <cmath>
std::vector<int> form_1;
std::vector<int> form_2;
std::vector<int> testVec;
void showVec(std::vector<int>& vec)
{
//
for (unsigned long int i = 0; i < vec.size(); i++)
{
//
std::cout << vec[i] << std::endl;
}
}
void resFin(int start, int stop, std::vector<int>& vec)
{
//
for (unsigned long int i = 0; i < vec.size(); i++)
{
//
if (i == 0)
{
//
form_1.push_back(vec[0]);
//std::cout << "form_1 pushed " << vec[0] << std::endl;
}
else
{
//
if (i != vec.size() - 1)
{
//
if (vec[i] == vec[i - 1])
{
//
form_1.push_back(vec[i]);
//std::cout << "form_1 pushed " << vec[i] << std::endl;
}
else
{
//
form_2.push_back(form_1.size());
form_2.push_back(vec[i - 1]);
form_1.clear();
form_1.push_back(vec[i]);
}
}
else
{
//
if (vec[i] == vec[i - 1])
{
//
form_1.push_back(vec[i]);
//std::cout << "form_1 pushed " << vec[i] << std::endl;
form_2.push_back(form_1.size());
//std::cout << "form_2 pushed " << form_1.size() << std::endl;
form_2.push_back(vec[i - 1]);
//std::cout << "form_2 pushed " << vec[i - 1] << std::endl;
form_1.clear();
}
else
{
//
form_2.push_back(form_1.size());
//std::cout << "form_2 pushed " << form_1.size() << std::endl;
form_2.push_back(vec[i - 1]);
//std::cout << "form_2 pushed " << vec[i - 1] << std::endl;
form_2.push_back(1);
//std::cout << "form_2 pushed " << 1 << std::endl;
form_2.push_back(vec[i]);
//std::cout << "form_2 pushed " << vec[i] << std::endl;
form_1.clear();
}
}
}
}
vec.clear();
for (unsigned long int k = 0; k < form_2.size(); k++)
{
//
vec.push_back(form_2[k]);
//std::cout << "vec pushed " << form_2[k] << std::endl;
}
//showVec(vec);
if (start + 1 != stop)
{
//
form_1.clear();
form_2.clear();
std::cout << "recursed to " << start + 1 << std::endl;
resFin(start + 1, stop, vec);
}
}
void stepFind(int stop, std::vector<int>& vec)
{
//
resFin(1, stop, vec);
}
void trimmVec(std::vector<int>& vec)
{
//
int a = 0;
int b = 0;
int c = 0;
for (unsigned long int i = 0; i < vec.size(); i ++)
{
//
switch (vec[i])
{
case 1:
a++;
a = a % 1073741824;
break;
case 2:
b++;
b = b % 1073741824;
break;
case 3:
c++;
c = c % 1073741824;
break;
default:
break;
}
}
std::cout << "a is " << a << "; b is " << b << "; c is " << c << std::endl;
}
int main()
{
//
testVec.push_back(1);
testVec.push_back(1);
stepFind(39, testVec);
//showVec(testVec);
trimmVec(testVec);
getchar();
return 0;
}
#包括
#包括
#包括
#包括
std::向量形式_1;
std::向量形式_2;
std::向量testVec;
void showVec(标准::向量和向量)
{
//
for(无符号长整数i=0;i 到目前为止,我想我成功地建立了一个算法来找到答案——也许你需要一个不同的算法。真的吗?伙计,我花了很多小时才想出这个算法。如果这是垃圾,我会被彻底摧毁。你认为这个算法不好吗?这些在线编码网站的一个诀窍是,总是有一个已知的算法是ou你应该使用的是什么?如果你提出自己的算法,几乎总是错误的选择。这很难理解。如何在网上搜索特定的算法?我想不出哪怕是一个关键字?!要么是一个算法,要么是一个更快查找、插入等的更好、更高效的数据结构,例如std::map
或哈希表。