iT邦幫忙

0

Day 8, Data structure in coursera- Stress Test

  • 分享至 

  • xImage
  •  

Stress Test: 壓力測試:

顧名思義,就是將程式放置在極為極端的情況下進行測試,就好像我們在學測考試前的數次模擬考一樣,明明難度比真的考試難很多倍,能夠重創學生的考試信心以及早點放棄自我,那為甚麼要多花錢一起考呢?這是因為,只有在極端難的測試中,我們才能發現自己的盲點死穴,及早修正及早改善學習中的問題。然而,今天所知的壓力測試不再是花錢就能請人幫忙測的了,課程會教我們做一個能解決一樣問題的解法就算是暴力法也OK,做出正確輸出樣本,然後再與我們新的程式同時測壓力測試,也就是輸入無限隨機性資料,比較彼此的答案是否一致,目的是希望新的程式與對照程式結果若能一致,就算是不錯的。然而,人算不如天算,不管對照用程式還是新測試程式,都有可能是錯誤的,只是錯的點不一樣而已,今天的課程銜接上個題目(Day 7),找出最大乘積的題目:

#include<iostream>
#include<vector>

using namespace std;

long long MaxPairwiseProduct(const vector<int>& numbers){
long long result =0;
int n = numbers.size();
for(int i=0;i<n;i++){
	for(int j=i+1; j<n;j++){
	
		if((long long)numbers[i] * numbers[j] > result){
			result = numbers[i]*numbers[j];
		}

	}
}

return result;

}

int main(){
	int n;
	cin>>n;
	vector<int>numbers(n);
	for(int i=0;i<n;i++){
		cin>>numbers[i];
}
	int result = MaxPairwiseProduct(numbers);
	cout<<result<<"\n";

}

該程式最終沒有通過壓力測試,因為隨著輸入的數值越多計算時間太長,最終導致失敗。但是將作為我們測試用的程式

/* Online C++ Compiler and Editor */
#include<cstdlib>
#include<iostream>
#include<vector>

using std::vector;
using std::cin;
using std::cout;

long long MaxPairwiseProduct(const vector<int>& numbers){//暴力解,對照組
long long result =0;
int n = numbers.size();
for(int i=0;i<n;i++){
    for(int j=i+1; j<n;j++){
    
        if((long long)numbers[i] * numbers[j] > result){
            result = numbers[i]*numbers[j];
        }
​
    }
}
return result;
}
long long MaxPairwiseProductFast(const vector<int>& numbers){//快速解,實驗組
    int n = numbers.size();
    
    int max_index1 = -1;
    for(int i=0;i<n;i++){
        if((max_index1 = -1||(numbers[i]>numbers[max_index1]))){
            max_index1 = i;
        }
    }
    inr max_index2 = -1;
    for(int j=0;j<n;j++){
        if((numbers[j]!=numbers[max_index1])&&
        ((max_index2 == -1)||(numbers[j]>numbers[max_index2]))){
            max_index2 = j;
        }
    }
    return ((long long )(numbers[max_index1]))*numbers[max_index2];
}
int main(){
    while(true){
        int n=rand()%10+2;//2~11輸入
        cout<<n<<"\n";
        vector<int>a;
        for(int i=0;i<n;i++){
            a.push_back(rand()%10000);//隨機測資資料
        }
        for(int i=0;i<n;i++){
           cout<<a[i]<<' ';
        }
        cout<<"\n";
        long long res1 =  MaxPairwiseProduct(a);
        long long res2 =  MaxPairwiseProductFasr(a);
        if(res1!=res2){
            cout<<"Wrong answer: "<<res1<<" "<<res2<<"\n";
            break;
        }
        else{
            cout<<"OK"<<"\n";
        }
    }
    int n;
    cin>>n;
    vector<int>numbers(n);
    for(int i=0;i<n;i++){
        cin>>numbers[i];
    }
    
    long long result  = MaxPairwiseProductFasr(numbers);
    cout<<result<<"\n";
    return 0;
}


今天就到這裡,我盡可能學習。
附上疑似當機跑測試圖。
https://ithelp.ithome.com.tw/upload/images/20220611/20149573WsCs3L0rjC.png


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言