在解决问题时,很多时候我们会遇到时间限制超过,错误的解决方案,运行时错误以及内存限制超过等问题,因为在设计算法之后,我们不会测试算法的效率,正确性,时间复杂度以及在大量输入上运行算法用于测试目的。
这是进行压力测试以进行救援的地方。压力测试是在算法中发现错误的常用方法。
这涉及到生成大量的随机测试用例,并检查蛮力算法和高效算法是否始终彼此一致。许多程序员不熟悉这种全面的测试。
压力测试有助于找到有效的算法并针对问题纠正算法,还可以了解为什么某些方法不起作用。特别是,为任何问题绘制直观的贪婪解决方案都很容易,但是这样的解决方案通常在现实中不起作用。
编写一个生成器程序,输出一些随机输入。
Step参与压力测试
反复
–生成随机输入。
–在其上运行解决方案。
–检查输出是否正确。
–如果不停止并输出测试用例。
生成小型测试,以进行更快,更轻松的调试,尤其是对于琐碎的解决方案。设置参数以轻松调整测试大小。不要失去一般性,并检查是否有特殊情况。
1手动测试后进行压力测试。
2如果生成器/平凡的解法/检查器太复杂,则没有意义
3从非常小的测试大小开始。
4夫妇运行测试程序分钟通常是足够的。
5如果未找到错误,请生成更大的测试。
// Find a Maximum pairwise product in array of Integer.
#include
using namespace std;
// trivial solution
long long MaxPairwiseProductslow(const std::vector& v)
{
int n = v.size();
long long max_product = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
max_product = max(max_product, (long long)(v[i]) * (v[j]));
}
}
return max_product;
}
// efficient solution
long long MaxPairwiseProduct(const std::vector& v)
{
sort(v.begin(), v.end());
int n = v.size();
long long max_product = 0;
max_product = ((long long)v[n - 2]) * v[n - 1];
return max_product;
}
int main()
{
// random generator
while (true) {
int n = rand() % 10 + 2;
cout << n << " \n";
vector a;
for (int i = 0; i < n; i++) {
a.push_back(rand() % 100000);
}
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << "\n";
long long res1 = MaxPairwiseProduct(a); // result of efficient solution
long long res2 = MaxPairwiseProductslow(a); // // result of trival solution
if (res1 != res2) // when two outputs dont match
{
cout << "Wrong answer: " << res1 << res2 << "\n";
break;
}
else {
cout << "Sucess"
<< "\n";
}
}
int n;
std::cin >> n;
std::vector v(n);
for (int i = 0; i < n; ++i) {
std::cin >> v[i];
}
long long result = MaxPairwiseProduct(v);
std::cout << result << "\n";
return 0;
}
Input Example:
3
1 2 3
Output: 6
Input Example:
7
7 5 6 1 3 7 10
Output:
140
总结之前测试您的解决方案,以避免错误。开始使用给定的样品进行测试。检查极端情况。特殊/隐藏的测试用例。诸如最小-最大,特定于问题类型的人工案例以及您可以想象的任何事物。分别测试不同的部分。如果其他所有方法均失败,请进行压力测试
如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。