摘要: 堆原理解析 堆一般指二叉堆。是使用完全二叉树这种数据结构构建的一种实际应用。通过它的特性,分为最大堆和最小堆两种。 如上图可知,最小堆就是在这颗二叉树中,任何一个节点的值比其所在子树的任意一个节点都要小。最大堆就是在这颗二叉树中,任何一个节点的值都比起所在子树的任意一个节点值都要大。 那么如何构建一 阅读全文
posted @ 2021-06-20 18:52 reposkeeper 阅读(617) 评论(0) 推荐(0) 编辑
摘要: 算法的时间复杂度的计算是一个可以无限深入的课题。但是对于程序员来说,能够大概的评估出复杂度就已经足够用了。 在算法这个系列之前的几篇文章里,介绍了算法的使用和原理,但是我故意的将复杂度的介绍没有写上去。有两个原因:第一是这个算法复杂度介绍起来还是比较麻烦,一下子介绍不完,写在一篇里不太合适;第二是还 阅读全文
posted @ 2018-05-24 23:17 reposkeeper 阅读(13629) 评论(1) 推荐(1) 编辑
摘要: 对于前面讲过的基础排序来说,他们在实际使用的时候,价值并不是太大。它的价值在于,体现了一种很好的思想。通过一些改进和变化,可以达到一个不错的性能。希尔排序就是典型的一个例子,它改进了插入排序,使得算法的实用性大大增加,对于中等数组,当需要用排序解决问题,又不能使用系统排序的时候,这是一个不错的选择。 阅读全文
posted @ 2018-05-12 22:18 reposkeeper 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 背景 当一台机器上跑有多个 Docker Container 的时候,我们需要知道,哪些容器占用了多少资源。采集这些指标,来让我们可以更加好的分配资源给每个 Container。 获取容器CPU使用率 正好,这两天碰到一个需求。需要我们在监控 Host 的 CPU 时候,同时将每个容器的 CPU使用 阅读全文
posted @ 2018-05-11 11:45 reposkeeper 阅读(6694) 评论(3) 推荐(3) 编辑
摘要: 堆排序也是一种较为常用的排序算法。它是基于对的优先队列来实现的。要学习堆排序,就要学习优先队列,以及堆的特性。 优先队列 在很多的应用场景中,我们需要数据有序,但不需要它们全部有序,或者是不需要它们一次性有序,有序的数据时慢慢的被需要。 比如:某些事件系统中,事件有优先级。程序在处理事件时,只需要知 阅读全文
posted @ 2018-04-27 16:34 reposkeeper 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 归并排序是分治算法的另一个典型的体现。与快速排序一样,它依赖数据之间的比较进行排序。 其缺点是需要额外的空间来辅助排序的过程。这使得归并排序的实用性大大降低,因为在日常的应用中,使用归并排序的场景都可以使用快速排序来替代。但是它的优点是可以按照预期来切分数组,每一次都可以对半分,这样不会出现因为分割 阅读全文
posted @ 2018-04-26 12:19 reposkeeper 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 基础排序中,我们介绍两种排序方法:选择排序 和 插入排序。 这两种排序方法实现和理解都非常简单。学习它们非常有助于明白基础排序的弱点,以及了解为什么会有高级排序算法。而且插入排序还经常用于优化快速排序的小数组排序,这一点可以参见快速排序的文章。 选择排序 选择排序是人脑思维中最容易想到,也最容易实践 阅读全文
posted @ 2018-04-25 11:24 reposkeeper 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 快速排序可能应用得最广泛的一个排序算法了。流行的主要原因是实现起来简单,也比其他算法快得多,更重要的是,它原地排序的两点,使得算法只需要一个很小的辅助栈。理想情况下,长度为N的数组,所需的时间和 NlgN 成正比。 快速排序是C.R.A.Hoare于1962年提出的,采用了分治的策略,也叫分治法。 阅读全文
posted @ 2018-04-24 21:35 reposkeeper 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 1998年,章文嵩博士成立了Linux Virtual Server的自由软件项目,进行Linux服务器集群的开发工作。他的目标是:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。LVS到现在已经使用的非常广泛了,绝大部分国内的互联网企业用它来做四层的负载均衡组... 阅读全文
posted @ 2018-04-24 21:32 reposkeeper 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 从知乎作者Rui L学来的一招。应该用过 IPython 吧?想象一下,抛出异常时自动把你带到 IPython Shell 是不是很开心?而且和普通的IPython不同,这个时候可以调用 p (print), up(up stack), down(down stack) 之类的命令。还能创建临时变量,执行任意函数。事实上这是可以实现的, 而且很简单。首先安装ipython,然后把以下代码保存为 c... 阅读全文
posted @ 2018-04-24 21:31 reposkeeper 阅读(493) 评论(0) 推荐(0) 编辑