当前位置: 首页 > news >正文

成都公司做网站的营销网站建设方案

成都公司做网站的,营销网站建设方案,陕西高速公路建设集团网站,wordpress pc 手机1.时间复杂度的定义 在计算机科学中,算法的时间复杂度是一个函数,它定量描述了算法的运行时间。一个算法所花费的时间与其中语句的执行次数成正比列,算法中的基本操作的执行次数,为算法的时间复杂度 例1: 计算Func1…

1.时间复杂度的定义

在计算机科学中,算法的时间复杂度是一个函数,它定量描述了算法的运行时间。一个算法所花费的时间与其中语句的执行次数成正比列,算法中的基本操作的执行次数,为算法的时间复杂度

例1:

计算Func1中++count执行的次数

void Func1(int N)
{int count = 0;for(int i = 0; i < N; ++i){for(int j = 0; j < N; ++j){++count;}}for(int i = 0; i < 2 * N; ++i){++count;}int M = 10;while(M--){++count;    }printf("%d\n", count);
}

Func1的基本操作次数:F(N) = N^2 + 2 * N + 10来分析一下是为什么?

首先可以看到这段代码有三个循环

第一个是由两个for内外嵌套组成:每次循环N次,执行了N次,即N + N + N.....=N * N = N^2

第二个循环执行了 2*N

第三个循环执行了 10

如果每个时间复杂度都要这么表示的话那太复杂了,所以我们只取最大量级来表示这段代码的时间复杂度

当N  = 10时:F(N) = 130

当N = 20时:F(N) = 10210

当N = 30时:F(N) = 1002010

当我们的N取无穷大时 2 * N + 10这两个项对结果的影响已经不大了可以忽略不计,所以说只需要取N^2来表示它的时间复杂度就可以了

所以这段代码Func1的时间复杂度为: O(N ^ 2)

2.大O的渐进表示法

大O符号(Big O notation):是用于描述函数渐进行为的数学符号

推导大O阶方法:

(1).用常数1来取代运行时间中的所有加法常数

(2).在修改后的运行次数的函数中,只保留最高阶项

(3).如果最高阶存在且不是1,则去除与这个项目相乘的常数,得到的结果就是大O阶

通过上面一个例子我们可以发现大O渐进表示法去掉了那些对结果影响不大的项,简洁明了的表示出了执行次数

我们来计算几道代码的时间复杂度

例1:

void Func2(int N)
{int count = 0;for(int i = 0; i < 2 * N; i++){++count;}int M = 10;while(M--){++count; }printf("%d", count);
}

F(N) = 2 * N +10

去掉与最高阶相乘的常熟和10使用大O渐进法表示法该段代码的时间复杂度为:O(N)

例2:

void Func3(int M, int N)
{int count = 0;for(int i = 0; i < M; i++){++count;}for(int j = 0; j < N; j++){++count;}printf("%d\n", count);
}

使用大O渐进法表示法该段代码的时间复杂度为:O(N + M)

因为M和N是未知的所以不能去掉它们两个任意一个

如果N大于M,则可以去掉M,反之可以去掉N,相等可任取M和N中任何一个

例3:

void Func4(int N)
{int count = 0;for(i = 0; i < 100: i++){++count;}printf("%d\n", count);
}

F(N) = 100

执行了100次,但是我们用1来表示

使用大O渐进法表示法该段代码的时间复杂度为:O(1)  

注:这里的1表示代表1次,而是常数次

3.时间复杂度的最好,最坏和平均情况

另外有些算法的时间复杂度存在最好,平均,最坏情况:

最坏情况:任意输入规模的最大运行次数(上界)

平均情况:任意输入规模的期望运行次数

最好情况:任意输入规模最小运行次数(下界)

例4:

char* strchr(const char * str, int character)
{while(*Str){if(*str == character){return str;}str++;}return NULL;
}

例如:在一个长度为N的数组中找一个数据x

最好情况:1次找到

平均情况:N/2次找到

最坏情况:N次找到

在实际情况中一般关注的是算法的最坏运行情况,所以该段代码的时间复杂度为:O(N)

例5:

void BubbleSort(int *a, int n)
{assert(a);for(int end = n; end > 1; --end){for(int i = 1; i < end; i++){if(a[i - 1] > a[i]){int tmp = a[i];a[i] = a[i + 1];a[i + 1] = tmp;}}}
}

最好情况:O(N)

最坏情况将两个for循环跑满

外循环为n时,内循环循环n - 1次  然后按顺序n - 2, n-3, ....., 3, 2, 1通过判断可以知道这是一个等差数列,所以它的总和就为:n(n - 1 + 1)/2 = n^2*1/2 即最坏情况:O(N^2)

使用大O渐进法表示法去掉常数该段代码的时间复杂度为:O(N^2)  

例6:

在数组有序的情况下:可以使用二分法(折半查找)

int binarysearch(int *a,int n, int x)
{int begin = 0;int end = n - 1;while(begin <= end){int mid = begin + ((end - begin)>>1);if(a[mid] > x){end = a[mid] - 1;}else if(a[mid] < x){begin = a[mid] + 1;}else{return mid;}}return -1;
}

最好情况:O(1)

最坏情况:区间缩放到一个值,要么找到,要么找不到,假设N为数组个数,x是最坏查找次数N每次除2就等于查找一次,折半查找多少次就除多少个2

N/2/2/2..../2 = 1, 因为n为int所以最小二分到1,2^x = N 即:x = logN(log在时间复杂度中表示以2为底)所以最坏情况:O(logN)

例7:

long long fac(size_t N)
{if(N == 0)return 1;elsereturn fac(N - 1) * N;
}

使用大O渐进法表示法该段代码的时间复杂度为:O(N)

例8:

long long Fib(int n)
{if(n < 3){return 1;}else{return Fib(n - 1) + Fib(n - 2);}
}

最好情况:O(1)

可以观察到该递归的方式为等差数列我们用求和公式可以得出:2^(N-1)-1

最坏情况用大O渐进表示法:O(2^N)

总结以上时间复杂度:O(1)>O(logN)>O(N)>O(N^2)>O(N^3)>O(2*N)

http://www.zhongyajixie.com/news/29243.html

相关文章:

  • 各大网站做推广的广告怎么做公司网站建设服务机构
  • 公司做网站需要提供的材料网上全网推广
  • 广东建设工程造价管理协会网站千锋教育培训机构就业率
  • app开发学习网站高清视频线转换线
  • java做网站用到哪些技术属于seo网站优化
  • 国外做详情页网站孔宇seo
  • 泰安做网站优化百度热搜关键词排名优化
  • 网站运维工作内容网络营销模式下品牌推广途径
  • 建英文网站有用吗关键词点击工具
  • 网站整站程序网络推广外包代理
  • 辽阳网站建设多少钱新闻摘抄2022最新20篇
  • 网站链接提交百度权重域名
  • 外贸客户开发系统内蒙古网站seo
  • canva在线平面设计官网汕头seo网站建设
  • 龙岗网站建设公司哪家好百度网络营销app下载
  • 外贸公司网站建设费用 如何申请深圳网络推广收费标准
  • 网站建设有几种方案国内疫情最新情况
  • 模块化建站工具网站优化公司大家好
  • 一个完整的企业网站怎么做seo怎么才能做好
  • 网站制作中文版推广软文营销案例
  • 宝鸡营销型网站开发公司抖音搜索关键词排名查询
  • 有网站做点什么好南京seo网站优化
  • WordPress文件大小限制修改搜索引擎优化的含义
  • 湖南省郴州市嘉禾县邮政编码什么是sem和seo
  • 能玩游戏的网站谷歌chrome安卓版
  • 云南域名注册网站建设荥阳网站优化公司
  • 书店网站建设需求分析调研表宁波seo哪家好
  • 长沙专门做网站公司单词优化和整站优化
  • 甘肃省交通建设项目招投标中心网站seo网站推广首页排名
  • 太原网站建设外包如何自己做一个网址