oj对算法的时间复杂度

 程序性能分析👇👇👇

https://blog.csdn.net/qq_41523096/article/details/82142747

 具体的计算👇👇👇

https://blog.csdn.net/daijin888888/article/details/66970902?utm_source=app

上面两部分了解了之后,就是接下来的内容:(其实也就是,兄弟,该优化算法了)


 

在竞赛中,一般算机一秒能运行5 x 10^8次汁算,如果题目給出的时间限制カ1s,那么你选择的算法执行的汁算次数最多应该在10^8量级オ有可能解决这个题目。一般 O(n)的算法能解决的数据范围在n < 10^8。

O(n *logn)的算法能解决的数据范围在n <= 10^6。

O(n*sqrt(n) )的算法能解决的数据范围在n < 10^5。

O(n^2)的算法能解决的数据范围在n<5000。

O(n^3)的算法能解决的数据范围在n <300。

O(2^n)的算法能解决的数据范围在n < 25。

O(n!)的算法能解决的数据范围在n < 11。

以上范围仅供参考,实际中还要考虑每种算法的常数。


 

贴一道小依的期末考试题:

 

 

如果1s的时限给数据范围是10的7或8次方的话一般只能用O(n)的算法

对于上面的题,10的9次方10组数据,也就是10的10次方的时间,这样子1s是不可行的

贴上当时的代码:

#include<iostream>
using namespace std;
const int max1 = 1000000;
const int max2 = 1000000000;
const int max3 = 10;
void Yoriko(int &a, int &b, int &c, int &k) {
    int i;
    for (i = 0; i < k; i++) {
        if(a==b&&b==c) break;
        if (a > b) a = a - b;
        if (b > c) b = b - c;
        if (c > a)c = c - a;
    }
}
int main() {
    int t;
    int a, b, c, k;
    int i;
    int str[max3][3];
    cin >> t;
    for (i = 0; i < t; i++) {
        cin >> a >> b >> c >> k;
            Yoriko(a,b,c,k);
            str[i][0] = a;
            str[i][1] = b;
            str[i][2] = c;
        }
        for (i = 0; i < t; i++) {
            cout << str[i][0] << " " << str[i][1] << " " << str[i][2] << endl;
        }
}
View Code

加break的话因为abc的范围都是10的6次,1秒就够了。

其他地方有不对不详的地方还请纠正,欢迎相互交流侬。

posted on 2020-01-09 18:31  夜隳·依子  阅读(865)  评论(0编辑  收藏  举报