自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 Design Tradeoffs for Data Deduplication Performance in Backup Workloads-备份工作负载中重复数据删除性能的设计权衡

重复数据删除已成为现代备份系统中的标准组件。为了了解其每个设计选择(如预取和抽样)的基本权衡,我们将重复数据删除分解为一个大的N维参数空间。空间中的每个点都是各种参数设置,并在备份和恢复性能、内存占用和存储成本之间进行权衡。现有的和潜在的解决方案可以被认为是空间中的特定点。然后,我们提出了一个通用框架来评估空间中的各种重复数据删除解决方案。鉴于所有指标中没有一个解决方案是完美的,我们的目标是找到一些具有持续备份性能的合理解决方案,并在重复数据删除率、内存占用和恢复性能之间进行适当的权衡。

2024-08-02 22:40:13 292

原创 数据去重系统destor中的线程同步

在数据去重系统destor中发现了大量与线程同步有关的内容,为此做个总结。系统源码中实现了一个名为SyncQueue的同步队列数据结构,用于在多线程环境中安全地进行数据传递和队列操作。

2024-05-08 20:33:27 879 2

原创 总结:在分布式存储系统中保障数据的可靠性

随着数据规模的增加,数据中心的节点故障数量急剧增加。为了保障数据的可靠性,大型数据存储企业通常采用3副本的方式对数据进行备份,然而3副本的开销巨大,并不是一种经济的方式。为此最典型的方法是采用纠删码来保证系统的可靠性。

2024-03-30 16:16:18 1529 1

原创 二叉树-二叉搜索树(BST)

一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树。例如:是一棵二叉搜索树。二叉排序树在普通二叉树的基础上引入了有序的概念,并且二叉排序树的中序遍历是有序的,这一性质通常用于判断给定的一棵树是否为二叉排序树。二叉排序树的查找速度通常比链表要快,查找的平均时间复杂度为O(logn)。在二叉排序树的基础上,我们引申出了更多不同概念的树。

2024-02-14 17:05:54 470 1

原创 二叉树-构造二叉树

构造二叉树的过程,如何正确的写出各个子序列的边界是有些困难的,需要在稿纸上认真分析整个过程,确保边界不出错。两种构造方式代码略有不同,对于前序序列的处理,每次递归时都会往后移动一步,因为根结点已经处理过了,避免重复处理。//后移一步后序序列的根结点处理是通过修改后序序列的长度,避免重复处理根结点。//后序遍历序列减1。

2024-02-05 17:42:06 755 1

原创 二叉树-平衡二叉树

平衡二叉树是指空树或者任意结点左右两颗子树的高度差的绝对值不超过1。例如:图1:图2:图1是一颗平衡二叉树,图2则不是。本文采用了两种方法实现了判断是否为平衡二叉树。从效率上来看递归的方法会更高效以及简洁,非递归的方法会更方便我们理解解题的过程。

2024-02-02 17:42:11 495 1

原创 二叉树-遍历(递归+非递归)

对于二叉树的常见遍历方式不管是递归还是非递归方式我们都应该掌握。最后,我们也可以把二叉树推广到n叉树实现n叉树的前序、后序和层序遍历,不管递归还是非递归思路都是一样的。有同学可能要问为什么没有n叉树的中序遍历,因为对于n叉树而言我们并不知道哪些孩子是左孩子哪些是右孩子,也没这种说法,因此没有中序遍历。

2024-02-01 18:29:48 657 1

原创 栈-最小栈

注意:**最小栈中存放的元素不光是全局最小值,而是局部最小值,当然全局最小的值也存放在里面。**当全局最小出栈后,次小值作为最小值。我们可以采用两个栈来解决该问题,一个是保存数据的栈,一个是保存最小元素的栈。从这里可以看出,当最小值入栈前,次小值,次次小值都入栈了。

2024-01-26 22:34:30 440 1

原创 栈-逆波兰表达式求值

扫描tokens数组,如果是数字则放入栈中,如果是运算符,则从栈中取出两个操作数,并将运算结果放入栈中,最终栈中存入的数则是运算结果。该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9。

2024-01-25 22:31:59 458

原创 栈-有效的括号

如果栈顶的右括号和遍历的右括号一致,则出栈。遍历结束后如果栈为空,则说明括号都是有效的。本题时间复杂度为O(n)。显然,我们可以通过一个栈来模拟一下括号的匹配过程。相对来说第一种方法会更好理解和有条理一些。( ( { [ ] } )( { [ ] } } )先思考一下有哪些不合法的情况。这里采用的办法是遍历字符串时。

2024-01-24 22:26:56 462 1

原创 双指针-四数之和

则会漏解比如nums为(-2,-1,0,0,1,2),target为0,会漏掉解(-2,0,0,2)。因为判断0和后面的0相同时会跳过前一个0,导致出错。为了达到更好的测试效果,也可以进行一些剪枝操作,提前跳出循环。先排序,后边去重边移动指针。部分代码参考来自此链接。

2024-01-23 16:43:15 485 1

原创 双指针-重排链表

结果分析:通过快慢指针、链表逆置和头插法这三个基本操作使本题的时间复杂度达到了O(n)之所以这里强调结点2指向结点3是因为和后面头插法的判断语句有关,不然容易出错。通过代码调试和手动模拟发现出现上面的错误是因为。①使用快慢指针找到链表的中心位置。②逆置后半段的链表。③使用头插法重排链表。这部分代码如果写成了。

2024-01-22 18:31:13 517

原创 双指针-链表相交

因此我们可以先计算两个链表的长度,然后用一个指针遍历较长的那条链表,遍历步数为两个链表的差值,再开始比较,如果当前节点不相同,则两链表指针同时向后遍历。结果分析:通过观察题目,使用双指针使时间复杂度达到O(m+n),先用一个指针遍历较长的链表,然后两个指针同时遍历。解题思路:题目求两个链表是否有交点,一般思路就是一个一个比较,虽然可以得出结果但是时间复杂度偏高,观察可以得知。

2024-01-21 18:05:11 879

原创 初识双指针

有没有办法可以让时间复杂度减小,可以采用双指针的方法,本题最常见的思路是两层循环,时间复杂度O(,时间复杂度为O(n)。

2024-01-20 15:16:25 909

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除