微信北大博士总结
|
再按照实现大类来分,负载均衡常见的种类有:软件负载均衡、硬件负载均衡、DNS负载均衡。 软件负载均衡 软件负载均衡是通过负载均衡软件来实现负载均衡功能的。常见的负载均衡软件有LVS和Nginx。其中LVS是Linux内核的四层负载均衡,四层和七层的区别在于他们协议和灵活性的不同。
硬件负载均衡 硬件负载均衡是通过单独的设备来实现负载均衡的功能,这类设备和路由器交换机有那么一些类似,更或者可以理解为一个用于负载均衡的基础网络设备。 目前业界主要有两款硬件负载均衡:F5和A10。这类设备性能好,功能强大,但是价格可以用昂贵来形容,一般只有银行,国企等大型有钱的企业开会考虑使用此类设备,
软件负载均衡和硬件负载均衡对比 其实我们从上面的算法中能明显看出来我们没有使用for循环,而是通过递归的方式来解决我们的循环问题的.所以更加的高效. 就像我们上面的演示过程里面写的一样,这个执行的层数为2 * log N,并且每层操作的元素是N个,所以我们的时间复杂度即为2 * N * log N,但是常数可以忽略不计,所以我们的时间复杂度就控制在了O(N*log N),对比我们之前算法的时间复杂度O(N*N),可以看到「时间复杂度明显降低很多」,并且这个时间复杂度「不仅仅只是适用于平均情况,针对最坏的情况,同样也能适用」.
这个我们也可以看到我们整个排序的过程中需要增加一个等同于排序序列的长度的空间来存储我们为二次排序之后的序列,所以我们需要的空间复杂度就是线性级别的O(n),这个复杂度对比我们之前的几种排序算法,可以看得出来的确是较为大了一点.但是也可以明显看出来整个的时间复杂度明显降低了很多,这就是一种跟明显通过牺牲空间换取时间的方法.对比我们第一篇讲的HashMap. 3-快速排序 算法思想: 快速排序的算法思想也比较好理解.但是呢用文字讲述出来可能会有点难以理解,这里我尽可能的讲的简单些.就算还是看不懂的话也没事,我们还是会通过图片演示的形式来加深大家的理解的. 快速排序的思想就是每次排序都「选定一个基准值」 ,当我们在选定完这个基准值之后,我们就另外在需要两个""指针"",这个指针并不是我们C++中的指针,但是作用也差不多,主要就是帮助我们标记位置的.「这两个指针分别指向待排序序列的队头元素和队尾元素」. 我们首先先「从队尾元素开始从右往左查找出第一个不大于该基准值的元素」,找到之后首先将之前指向队尾元素的指针指向该元素位置,之后再将基准值与我们刚才查找到的元素交换位置. 在这个步骤结束之后,我们就需要「从队头元素开始从左往右查找第一个不小于基准值的元素」,查找到该元素之后还是按照我们上面的步骤.先将之前指向队头元素的指针指向该元素,之后再将基准值与该元素交换位置. 重复上面这个步骤,「直到队头指针与队尾指针相遇,相遇之后就代表我们的第一次排序就已经完成了」,并且在第一次排序完成之后我们就会发现序列是这样的状态,「基准值左边的元素全部小于等于该基准值,基准值右边的元素全部大于等于该基准值.」 之后的排序就只需要对基准值左右两边的序列在进行上述的操作即可.
好了关于算法的文字讲解已经完成了,当然了,这时候很多小伙伴肯定会想 「"你这都说的啥啊"」 ,没关系老样子还是用图来说话: (编辑:柳州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

