算法(6)

"教主" 楼天城 ony.ai CTO 在量子位微信公众号上出了一个问题:17皇后有多少组解?


我自己写了一份代码,代码如下


在常见的分布式系统中,总会发生诸如机器宕机或网络异常(包括消息的延迟、丢失、重复、乱序,还有网络分区)等情况。Paxos算法需要解决的问题就是如何在一个可能发生上述异常的分布式系统中,快速且正确地在集群内部对某个数据的值达成一致,并且保证不论发生以上任何异常,都不会破坏整个系统的一致性


与归并排序一样,快速排序也使用了分治思想。下面是对一个典型的子数组A[p..r] 进行快速排序的三步分治过程:


分解:数组A[p..r]被划分为两个(可能为空)子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每一个元素都小于等于A[q],而A[q]也小于等于A[q+1..r]中的每个元素。其中,计算下标q也是划分过程的一部分。


解决:通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r]进行排序。


合并:因为子数组都是原址排序的,所以不需要合并操作:数组A[p..r]已经有序。


B树的定义


B树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树,如下图。B树是Bayer 和 McCreight在1972年提出来的,但是他们并没有解释为什么取名为B树。B树类似于红黑树, 但它们在降低磁盘I/O操作数方面要更好一些。许多数据库系统使用B树或者B树的变种如B+树来存储信息。B树与红黑树的不同之处在于B树的结点可以有很多孩子,从数个到数千个。也就是说,一个B树的“分支因子”可以相当大,尽管它通常依赖于所使用的磁盘单元的特性。B树类似于红黑树,就是每棵含有n个结点的B树的高度为O(log[n])。然而,一棵B树的严格高度可能比一棵红黑树的高度要小许多,这是因为它的分支因子,也就是表示高度的对数的底数可以非常大。因此,我们也可以使用B树在时间O(log[n])内完成一些动态集合的操作。


在计算机中,字符可以进行大小比较,ASCCI码字符大小关系如图(ASCCI码字符大小),和数轴类似,左边的字符小于右边的字符。而字符串由字符组成,因此简单的字符串排序方法,可以逐字符进行大小比较排序。


string_sort_01.png

ASCCI码字符大小


例如 a9.txt, a10.txt, 假设按字符升序逐个排序,则排序的结果为a10.txt, a9.txt。第1个字符双方都是'a',大小相等;由于按升序排序,第2个字符'1'排在字符'9'前面,即'1'<'9',因此'a1'排在'a9'前面,后面就不需要再继续比较了。


在数学345视频号第14期《对称》中我们讲到了镜像对称。镜像对称可以通过镜像变换实现。镜像变换通常是关于某个轴或直线做翻转操作操作。 在图像处理中,常见的是水平镜像和垂直镜像。


水平镜像是关于垂直中轴线的镜像,即图像沿着垂直中轴线左右翻转。如下图:

杨颖水平镜像合并.png