当今趋势和企业业务未来的发展
|
那如何帮助灭绝师太解决这个协同问题?我们可以用二阶段提交协议来说明。 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): 常数函数
O(logn): 对数函数
O(n): 线性函数
O(nlogn):
O(n^2)
当然如果同样是n=10000.那么不同时间复杂度额算法执行次数、时间也不同。 (编辑:四平站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
