加入收藏 | 设为首页 | 会员中心 | 我要投稿 四平站长网 (https://www.0434zz.com.cn/)- 云服务器、对象存储、基础存储、视频终端、数据应用!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

当今趋势和企业业务未来的发展

发布时间:2021-01-31 14:39:59 所属栏目:外闻 来源:互联网
导读:那如何帮助灭绝师太解决这个协同问题?我们可以用二阶段提交协议来说明。 2.3 二阶段提交协议 在二阶段提交协议中,灭绝师太先给少林派发送进攻的消息,少林派作为协调者的身份,由少林派联系武当派和昆仑派是进攻还是撤退。 二阶段就是说有两个阶段,1.提交

那如何帮助灭绝师太解决这个协同问题?我们可以用二阶段提交协议来说明。

2.3 二阶段提交协议

在二阶段提交协议中,灭绝师太先给少林派发送进攻的消息,少林派作为协调者的身份,由少林派联系武当派和昆仑派是进攻还是撤退。

二阶段就是说有两个阶段,1.提交请求阶段(投票阶段),2.提交执行阶段(完成阶段)。

阶段一:提交请求阶段:

第一步:少林派作为协调者分别给武当派和昆仑派发送消息:“明天进攻光明顶,可行?”

第二步:少林派、武当派、昆仑派分别评估明天是否能进攻光明顶,如果能,就预留时间并锁定,不再安排其他的进攻事项。

第三步:少林派得到全部的回复结果,包括少林派自己的评估结果。最后三方的结果都是可行。

如下图所示:
 

空间复杂度

概念:是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))

空间复杂度其实在算法的衡量占比是比较低的(我们经常使用牺牲空间换时间的数据结构和算法),但是不能忽视空间复杂度中重要性。无论在刷题还是实际项目生产内存都是一个极大额指标。对于Java而言更是如此。本身内存就大,如果采用的存储逻辑不太好会占用更多的系统资源,对服务造成压力。

而算法很多情况都是牺牲空间换取时间(效率)。就比如我们熟知的字符串匹配String.contains()方法,我们都知道他是暴力破解,时间复杂度为O(n^2),不需要借助额外内存。而KMP算法在效率和速度上都原生暴力方法,但是KMP要借助其他数组(next[])进行标记储存运算。就用到了空间开销。再比如归并排序也会借助新数组在递归分冶的适合进行逐级计算,提高效率,但增加点影响不大的内存开销。

当然,算法的空间花销最大不能超过jvm设置的最大值,一般为2G.(2147483645)如果开二维数组多种多维数据不要开的太大,可能会导致heap OutOfMemoryError。

时间复杂度

概念:计算机科学中,算法的时间复杂度是一个函数,它定性描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。

时间复杂度的排序:O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)

常见时间复杂度:对于时间复杂度,很多人的概念是比较模糊的。下面举例子说明一些时间复杂度。

O(1): 常数函数

  • a=15

O(logn): 对数函数

  • for(int i=1;i
  • 还有典型的二分查找,拓展欧几里得,快速幂等算法均为O(logn)。属于高效率算法。

O(n): 线性函数

  • for (int i=0;i
  • 比较常见,能够良好解决大部分问题。

O(nlogn):

  • for (int i=1;i
  • 常见的排序算法很多正常情况都是nlogn,比如快排、归并排序。这种算法效率大部分也还不错。

O(n^2)

  • for(int i=0;i
  • 其实O(n^2)的效率就不敢恭维了。对于大的数据O(n^2)甚至更高次方的执行效果会很差。

当然如果同样是n=10000.那么不同时间复杂度额算法执行次数、时间也不同。

(编辑:四平站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读