![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 89
一只牛_007
这个作者很懒,什么都没留下…
展开
-
堆实现,利用priority_queue实现可删除堆
带有权值概念,其内的元素并非依照被推入的次序排列,而是自动依照元素的权值排列(通常权值以实值表示)。不过优先队列并没有提供这个方法,在各语言内置的库中,需要支持删除任意元素时,一般使用有序集合等基于平衡二叉搜索树的实现。以底部容器完成其所有工作,具有这种“修改某物接口,形成另一种风貌”的性质者,称为。顶端的元素(权值最高者),才有机会被外界取用,如果是存放结构体,且要自定义比较函数,可以用。的所有元素,进出都有一定的规则,只有。,就是用写一个结构体,然后重载。● 与堆尾交换,删除堆尾。原创 2024-01-19 12:23:07 · 901 阅读 · 0 评论 -
分布式事务理论-二阶段提交(Two-phase Commit)
1 2PC两阶段提交协议为了保证分布在不同节点上的分布式事务的一致性,我们需要引入一个协调者来管理所有的节点,负责各个本地资源的提交和回滚,并确保这些节点正确提交操作结果,若提交失败则放弃事务。2.1 XA 协议XA 是一个分布式事务协议,规定了事务管理器和资源管理器接口。因此,XA 协议可以分为两部分,即事务管理器和本地资源管理器。事务管理器作为协调者,负责各个本地资源的提交和回滚; 资源管理器就是分布式事务的参与者.其中资源管理通常是 数据库。基于 XA 协议的二阶段提交方法中,二阶原创 2021-03-18 11:00:18 · 1450 阅读 · 0 评论 -
Gossip协议详解
起源Gossip protocol 也叫 Epidemic Protocol (流行病协议),是基于流行病传播方式的节点或者进程之间信息交换的协议。。Gossip protocol在1987年8月由施乐公司帕洛阿尔托研究中心研究员艾伦·德默斯(Alan Demers)发表在ACM上的论文《Epidemic Algorithms for Replicated Database Maintenance》中被提出。Gossip协议是基于六度分隔理论(Six Degrees of Separation)哲学原创 2021-03-16 14:00:14 · 2383 阅读 · 0 评论 -
ZAB协议选主过程详解
说明ZAB 协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的一致性协议。基于该协议,ZooKeeper 实现了一种主从模式的系统架构来保持集群中各个副本之间的数据一致性。ZAB协议运行过程中,所有的客户端更新都发往Leader,Leader写入本地日志后再复制到所有的Follower节点。一旦Leader节点故障无法工作,ZAB协议能够自动从Follower节点中重新选择出一个合适的替代者,这个过程被称为选主,选主也是ZAB协议中最为重要和复杂的过程。本文主要描述ZAB协议的原创 2021-03-16 13:39:24 · 1141 阅读 · 1 评论 -
ZAB算法详解
前言ZAB 协议,该协议应该是所有一致性协议中生产环境中应用最多的了。为什么呢?因为他是为 Zookeeper 设计的分布式一致性协议!1. 什么是 ZAB 协议? ZAB 协议介绍 ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。 Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并没有使用 Paxos ,而是采用了 ZAB 协议。 ZAB 协议定义原创 2021-03-16 10:45:19 · 2670 阅读 · 1 评论 -
Raft算法详解
本文试图以通俗易懂的语言讲述Raft算法。一、Raft算法概述不同于Paxos算法直接从分布式一致性问题出发推导出来,Raft算法则是从多副本状态机的角度提出,用于管理多副本状态机的日志复制。Raft实现了和Paxos相同的功能,它将一致性分解为多个子问题:Leader选举(Leader election)、日志同步(Log replication)、安全性(Safety)、日志压缩(Log compaction)、成员变更(Membership change)等。同时,Raft算法使用了更强的假设原创 2021-03-16 10:37:37 · 863 阅读 · 0 评论 -
Paxos算法详解
本文试图用通俗易懂的语言讲述Paxos算法。一、Paxos算法背景Paxos算法是Lamport宗师提出的一种基于消息传递的分布式一致性算法,使其获得2013年图灵奖。Paxos由Lamport于1998年在《The Part-Time Parliament》论文中首次公开,最初的描述使用希腊的一个小岛Paxos作为比喻,描述了Paxos小岛中通过决议的流程,并以此命名这个算法,但是这个描述理解起来比较有挑战性。后来在2001年,Lamport觉得同行不能理解他的幽默感,于是重新发表了朴实.原创 2021-03-16 10:35:31 · 256 阅读 · 0 评论 -
Paxos、Raft分布式一致性算法应用场景
本文是Paxos、Raft分布式一致性最佳实践的第一篇文章,说明分布式一致性问题与分布式一致性算法的典型应用场景,帮助后面大家更好的理解Paxos、Raft等分布式一致性算法。一、分布式一致性 (Consensus)分布式一致性问题,简单的说,就是在一个或多个进程提议了一个值应当是什么后,使系统中所有进程对这个值达成一致意见。这样的协定问题在分布式系统中很常用,比如:领导者选举(leader election):进程对leader达成一致; 互斥(mutual exclusion):.原创 2021-03-16 10:34:19 · 435 阅读 · 0 评论 -
算法总结之编码(C++)
1.把文件中的一组整数排序后输出到另一个文件中考点:运用vector容器解决实际问题这个题目牵涉到文件操作以及排序。我们可以使用vector容器来简化文件操作。在读文件的时候用push_back把所有的整数放入一个vector<int>对象中,在写文件时用[]操作符直接把vector<int>对象输出到文件。代码如下:#include<iostream&g...原创 2019-03-12 17:40:07 · 593 阅读 · 1 评论 -
B树,B-树和B+树、B*树的区别
之前一些概念混淆,现在更正一下。B树 B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这种直译不好,容易产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。事实上,B-tree就是指B树。特此说明。 先介绍一下二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的...原创 2021-02-17 12:39:12 · 334 阅读 · 0 评论 -
二叉树中任意两个节点的距离
题目:一个普通二叉树,如何找到两个给定节点之间的距离? ,其中二叉树中每个结点的值都不相同代码1:#include <iostream>#include <vector>#include <queue>using namespace std;struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int x):val(x),原创 2020-11-17 14:50:51 · 738 阅读 · 1 评论 -
漫画:什么是红黑树?
————————————————————————二叉查找树(BST)具备什么特性呢?1.左子树上所有结点的值均小于或等于它的根结点的值。2.右子树上所有结点的值均大于或等于它的根结点的值。3.左、右子树也分别为...原创 2020-11-17 14:31:50 · 89 阅读 · 0 评论 -
七大查找算法
时间、空间复杂度比较查找算法 平均时间复杂度 空间复杂度 查找条件 顺序查找 O(n) O(1) 无序或有序 二分查找(折半查找) O(log2n) O(1) 有序 插值查找 O(log2(log2n)) O(1) 有序 斐波那契查找 O(log2n) O(1) 有序 哈希查找 O(1) O(n) 无序或有序 二叉查找树(二叉搜索树查找) O(log2n) .原创 2020-11-17 10:19:17 · 341 阅读 · 1 评论 -
排序算法总结
前言查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中。因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。但万变不离其宗,只要熟悉了思想,灵活运用也不是难事。一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码。对这两种排序的代码一定要信手拈来才行。还有插入排序、冒泡排序、堆排序、基数排序、桶排序等。面试官对于这些排序可能会要求比较各自的优劣、各种算法的思想及其使用场景。还有要会分析算法的时间和空间复杂度。通常查找和排序算法的原创 2020-11-15 15:09:38 · 2136 阅读 · 1 评论 -
二叉查找树与平衡二叉树
本文转自:https://blog.csdn.net/qq_25940921/article/details/82183093二叉查找树 二叉查找树,也称二叉搜索树,或二叉排序树。其定义也比较简单,要么是一颗空树,要么就是具有如下性质的二叉树:(1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2) 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3) 任意节点的左、右子树也分别为二叉查找树;(4) 没有键值相等的节点。 如上转载 2020-11-10 13:27:57 · 639 阅读 · 0 评论 -
堆排序的时间复杂度分析
堆排序包括两个阶段,初始化建堆和重建堆。所以堆排序的时间复杂度由这两方面组成,下面分别进行分析。先post一个实现代码,便于分析。#include <stdio.h>void swap(int *a, int *b);void adjustHeap(int param1,int j, int inNums[]);void HeapSort(int nums, int inNums[]);//大根堆进行调整void adjustHeap(int param1, int j, i原创 2020-11-10 13:19:22 · 13506 阅读 · 1 评论 -
什么是堆(Heap)
堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。堆的常用方法:构建优先队列 支持堆排序 快速找出一个集合中的最小值(或者最大值) 在朋友面前装逼堆属性堆分为两种:最大堆和最小堆,两者的差别在于节点的排序方式。在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。这就是所谓的“堆属性”,并且这个属性对堆中的每一个节点都成立。例子:这是一个最大堆,,因为每一个父节点的值原创 2020-11-10 13:17:48 · 3756 阅读 · 0 评论 -
二叉树的最长的路径长度&&最大路径和
题目 给定一个二叉树,任意两个节点之间必然是有一条路径相通的,假定父节点和它的孩子节点的距离为单位1,求二叉树中相距最远的两个节点间的路径长度分析 这是一个简单的动态规划问题,假设某个节点node,到它的最低叶节点的长度为len(node),所求的最长路径必然经过一个最高节点high_node,则它到最低叶节点的长度为len(high_node)=max(len(high_node->left),len(high_node->right))+1,路径长度为sum=len(hi原创 2020-11-10 09:21:22 · 1381 阅读 · 0 评论 -
二叉树的遍历 (递归和非递归实现)
二叉树的遍历 (递归实现)用C++实现二叉树的“先根遍历”存储。用C++实现二叉树的“先根遍历”、“中根遍历”、“后根遍历”分别输出二叉树中结点的数据。#include <iostream>using namespace std ;struct BiNode{ char data ; BiNode *lchild , *rchild ;} ;BiNode *BiTree ;int NodeID ;BiNode *CreateBiTree (cha原创 2020-11-10 09:18:17 · 128 阅读 · 0 评论 -
圆环回原点问题
问题描述一个环上有10个点,编号为0-9,从0点出发,每步可以顺时针到下一个点,也可以逆时针到上一个点,求:经过n步又回到0点有多少种不同的走法举例:如果n=1,则从0出发只能到1或者9,不可能回到0,共0种走法如果n=2,则从0出发有4条路径:0->1->2, 0->1->0, 0->9->8, 0->9->0,其中有两条回到了0点,故一共有2种走法1 2 3思路(动态规划)我们可以想到,再回到0点可以从右面回来,也可以从原创 2020-11-09 21:35:09 · 1949 阅读 · 0 评论