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

新疫情最新消息今天国外常用的seo站长工具

新疫情最新消息今天,国外常用的seo站长工具,蓝色网站建设,网站建设开票内容些什么目录 1 PNP?2 时间复杂度2.1 常数阶复杂度2.2 对数阶复杂度2.3 线性阶复杂度2.4 平方阶复杂度2.5 指数阶复杂度2.6 总结 3 空间复杂度 1 PNP? P类问题(Polynomial)指在多项式时间内能求解的问题;NP类问题(Non-Deterministic Polynomial)指在…

目录

  • 1 P=NP?
  • 2 时间复杂度
    • 2.1 常数阶复杂度
    • 2.2 对数阶复杂度
    • 2.3 线性阶复杂度
    • 2.4 平方阶复杂度
    • 2.5 指数阶复杂度
    • 2.6 总结
  • 3 空间复杂度

1 P=NP?

P类问题(Polynomial)指在多项式时间内能求解的问题;NP类问题(Non-Deterministic Polynomial)指在多项式时间内能验证一个解的问题。

在这里插入图片描述

问题的归约(reduction)指将一个问题的求解等效为另一个问题的求解,其中这种等效具有提升普遍性、加大复杂度的趋势,且问题归约可传递。举例而言,可以将求解一元一次方程归约为求解一元二次方程。

若任意一个NP类问题都能在多项式时间内归约到某个NP问题,则该问题被称为NP完全问题(NP-Complete);若无法归约到某个NP问题,则该问题被称为NP难问题(NP-Hard)

P类问题本身是NP的,因为能在多项式时间内求解必然能在多项式时间内验证解。但反之,NP问题是否是P问题的论断称为“P=NP?”,该论断被列为千禧七大难题之首,暂未被证明或证伪。

2 时间复杂度

一般地,算法中基本操作重复执行的次数是问题规模 n n n的某个函数 f ( n ) f(n) f(n)。在计算机科学中用时间复杂度(Time Complexity)定性描述一个算法的运行时耗——体现在问题规模 n n n变化 c c c倍后算法的执行效率,而非针对一个特定的 n n n,记为

T ( n ) = O ( f ( n ) ) T\left( n \right) =O\left( f\left( n \right) \right) T(n)=O(f(n))

其中 O ( ⋅ ) O\left( \cdot \right) O()是复杂度度量函数,不包括输入的低阶项和首项系数(非常数项)。必须指出,使用 O ( ⋅ ) O\left( \cdot \right) O()属于渐进时间复杂度——输入值大小趋近无穷时的情况,否则不能忽略其他低阶项的影响。常见的时间复杂度如下

2.1 常数阶复杂度

常数阶复杂度记为 O ( a ) O(a) O(a)

示例

// 计算 1 + 2 + 3 + ... + n 的值
int sum(int n)
{return (1 + n) * n / 2;
}

解释:对任意问题规模 ,算法均只执行一次,故认为算法时间复杂度为 O ( 1 ) O(1) O(1)

2.2 对数阶复杂度

常数阶复杂度记为 O ( log ⁡ n ) O\left( \log n \right) O(logn)

示例

/** 二分查找*    A[] : 待查找的数组(已排序)*      n : 数组长度* target : 查找的目标值*/
int binarySearch(int A[], int n, int target) {int lt = 0, rt = n;while(lt < rt){int mid = lt + (rt - lt)/2;if(A[mid] == target) return mid;else if(A[mid] > target) rt = mid;else lt = mid + 1;}return -1; // 查找不到
}

解释:二分查找算法每次迭代排除一半元素,因此第 m m m次迭代后剩余待查找元素个数为 n / 2 m {{n}/{2^m}} n/2m,最坏情况下排除到只剩最后一个值后得到结果——结果为该值或查找不到,即令 n / 2 m = 1 {{n}/{2^m}}=1 n/2m=1,则 f ( n ) = m = log ⁡ 2 n f\left( n \right) =m=\log _2n f(n)=m=log2n,故认为算法时间复杂度为 O ( log ⁡ n ) O\left( \log n \right) O(logn)

2.3 线性阶复杂度

示例

// 计算 1 + 2 + 3 + ... + n 的值
int sum(int n)
{int sum = 0;for(int i = 1; i <= n; i++) {sum += i;}return sum
}

解释:对任意问题规模 n n n,算法均执行 n n n次,故认为算法时间复杂度为 O ( n ) O(n) O(n)

2.4 平方阶复杂度

示例

/** 冒泡排序* arr[] : 待排序数组*     n : 数组长度*/
void bubbleSort(int[] arr, int n) {if(n == 0 || n == 1) return;for(int i = 0; i < n - 1; ++i) {for(int j = 0; j < n - i - 1; ++j) {if(a[j] > a[j+1]) swap(a[j], a[j+1]);}}
}

解释:冒泡排序算法共 n − 1 n-1 n1次迭代,每次迭代循环比较 n − i − 1 n-i-1 ni1次,故总迭代次数为 ( n − 1 ) + ( n − 2 ) + ⋯ + 1 = n ( n − 1 ) / 2 \left( n-1 \right) +\left( n-2 \right) +\cdots +1={{n\left( n-1 \right)}/{2}} (n1)+(n2)++1=n(n1)/2,故认为算法时间复杂度为 O ( n 2 ) O\left( n^2 \right) O(n2)

2.5 指数阶复杂度

示例

// 计算斐波那契数列
int fibonacci(int n)
{if (n<=0) return 0;if (n==1) return 1;return fb(n - 1) + fb(n - 2);
}

解释:斐波那契算法本质上是二阶常系数差分方程 f ( n ) = f ( n − 1 ) + f ( n − 2 ) f\left( n \right) =f\left( n-1 \right) +f\left( n-2 \right) f(n)=f(n1)+f(n2),其特征根为 x 1 , 2 = 1 ± 5 2 x_{1,2}=\frac{1\pm \sqrt{5}}{2} x1,2=21±5 ,则该差分方程通解为 f ( n ) = c 1 ( 1 + 5 2 ) n + c 2 ( 1 − 5 2 ) n f\left( n \right) =c_1\left( \frac{1+\sqrt{5}}{2} \right) ^n+c_2\left( \frac{1-\sqrt{5}}{2} \right) ^n f(n)=c1(21+5 )n+c2(215 )n,代入初始条件 f ( 0 ) = 0 f\left( 0 \right) =0 f(0)=0 f ( 1 ) = 1 f\left( 1 \right) =1 f(1)=1解得 c 1 c_1 c1 c 2 c_2 c2后即得

f ( n ) = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] f\left( n \right) =\frac{1}{\sqrt{5}}\left[ \left( \frac{1+\sqrt{5}}{2} \right) ^n-\left( \frac{1-\sqrt{5}}{2} \right) ^n \right] f(n)=5 1[(21+5 )n(215 )n]

故认为算法时间复杂度为 O ( a n ) O\left( a^n \right) O(an)

2.6 总结

特别地,当 n n n处于复杂度底数位置时称为多项式时间复杂度,例如常数阶、对数阶、线性阶等;当 n n n处于复杂度指数位置时称为超多项式时间复杂度,例如指数阶、阶乘阶等。一般地,计算机只能处理多项式时间复杂度算法,而无法忍受超多项式时间算法中问题规模的些许增长带来的爆炸式耗时,因此将多项式时间视为算法在时间复杂度层面是否有效的分水岭,如图所示。

在这里插入图片描述

3 空间复杂度

在计算机科学中用空间复杂度(Space Complexity)定性描述一个算法的内存占用——体现在问题规模 n n n变化 c c c倍后算法临时占用内存的增长状况,而非针对一个特定的 n n n,记为

S ( n ) = O ( f ( n ) ) S\left( n \right) =O\left( f\left( n \right) \right) S(n)=O(f(n))

算法空间复杂度分析与时间复杂度类似,区别在于其关注的不是基础操作的重复次数,而是算法运行时堆栈中的内存消耗,在递归算法中尤为明显。一般地,算法复杂性分析优先考察时间复杂度,而假设空间不受限;对空间复杂度的考察主要集中在嵌入式领域。

下面是归并排序的实例。

/** 归并排序* a[] : 待排序数组*  lt : 排序左索引*  rt : 排序右索引* p[] : 临时数组,存储排序元素*/
void merge(int a[], int lt, int rt, int p[]){int mid = (rt - lt)/2 + lt;int i = lt, j = mid + 1;int k = 0;// 合并while(i <= mid && j <= rt){ if(a[i] <= a[j])  p[k++] = a[i++];else              p[k++] = a[j++];}// 合并剩余while(i <= mid)         p[k++] = a[i++];while(j <= rt)          p[k++] = a[j++];// 重新赋值回去for(i = 0; i < k; ++i)  a[lt+i] = p[i];
}// 划分
void mergeSort(int a[], int lt, int rt, int p[]){if(lt < rt){int mid = (rt - lt)/2 + lt;mergeSort(a, lt, mid, p);   // 递归排序 lt ~ midmergeSort(a, mid+1, rt, p); // 递归排序 mid+1 ~ rtmerge(a, lt, rt, p);        // 合并 lt ~ rt}
}

设问题规模为 n n n,即待排序元素为 n n n个,则递归调用时最坏情况下会产生 log ⁡ 2 n \log _2n log2n层递归树。若临时数组在全局作用域中开辟,则递归过程中不再开辟新的内存空间,空间复杂度为 O ( n ) O(n) O(n);若临时数组在栈中申请,则每层递归都要开辟一次长度为 n n n的临时空间,空间复杂度为 O ( n log ⁡ 2 n ) O\left( n\log _2n \right) O(nlog2n)


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇
http://www.mmbaike.com/news/56121.html

相关文章:

  • 水利局网站建设整改报告网络营销个人感悟小结
  • wordpress加导航栏视频seo搜索引擎优化工资
  • 医疗网站关键词是怎么排名的
  • 美国做调查网站专业搜索引擎seo合作
  • 做网站好还是做安卓app好广告营销案例100例
  • wordpress企业网站主题网站seo关键词排名查询
  • 中英文切换的网站怎么做百度推广登陆网址
  • 那里有做网站的优化网站
  • 邯郸网络名称百度seo软件是做什么的
  • 青浦网站开发关键词搜索引擎排名查询
  • 甘肃三北防护林建设局网站北京网站制作推广
  • 专门做视频点评的网站亚马逊seo什么意思
  • 网站后台密码忘了怎么办百度小说app下载
  • 海口专业网站建设地址百度搜索推广流程
  • 广州网站开发制作做教育培训应该注册什么公司
  • 设计用哪些网站排名优化方案
  • 产业园区运营公司推广关键词优化公司
  • hbuilder做网站页面背景色网站建设 网站制作
  • 新闻网站图解怎么做网站seo策划
  • 淘宝网站怎么做链接地址百度推广一年要多少钱
  • wordpress 修改header宁波网站seo诊断工具
  • 怎么制造网站移动广告平台
  • 手机网站居中显示佛山百度推广公司
  • 网站建设学费多少钱网站运营怎么做
  • 代码库网站内蒙古seo
  • 投票网站怎么做的保定seo推广公司
  • 网页查询系统个人如何优化网站有哪些方法
  • aspnet网站开发实例视频成人专业技能培训机构
  • 免费b2b信息发布seo专员工资待遇
  • 天津网站制作网站中国进入一级战备状态了吗