📜  测试在竞争性编程中的重要性

📅  最后修改于: 2021-06-25 20:54:57             🧑  作者: Mango

在解决问题时,很多时候我们会遇到时间限制超过,错误的解决方案,运行时错误以及内存限制超过等问题,因为在设计算法之后,我们不会测试算法的效率,正确性,时间复杂度以及在大量输入上运行算法用于测试目的。
这是进行压力测试以进行救援的地方。压力测试是在算法中发现错误的常用方法。
这涉及到生成大量的随机测试用例,并检查蛮力算法和高效算法是否始终彼此一致。许多程序员不熟悉这种全面的测试。
压力测试有助于找到有效的算法并针对问题纠正算法,还可以了解为什么某些方法不起作用。特别是,为任何问题绘制直观的贪婪解决方案都很容易,但是这样的解决方案通常在现实中不起作用。
编写一个生成器程序,输出一些随机输入。
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现场课程美国》。