看图轻松理解桶排序
聊聊机器学习的套路
这里说说机器学习问题分析的一般性过程,尽管存在各种各样的机器学习问题,但大体上的步骤及最佳实践都有一定的套路。 以上等等等等。 待收集的数据可能是表格数据、一串实时数据,N维矩阵或其他类型数据,同时也可能是多种存储介质,通过ETL处理将混合的数据源转成我们需要的格式,生成结构化…
图论动态规划算法——Floyd最短路径
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 Floyd是一种经典的多源最短路径算法,它通过动态规划的思想来寻找给定加权图中的多源点之…
如何从大量数据中找出异常值
机器学习中数据预处理阶段,首先要考虑的就是将数据集中的异常值找出来,然后再做额外处理。当然,异常值的处理并不存在什么银弹,只能具体情况具体分析再根据效果选择处理方法。 看看数据集直方图也许能看出点端倪,比如下面这个图,下方的是原始数据集,上面的是对应直方图,可以看到大多数都分布…
看图轻松理解数据结构与算法系列(Radix树)
JDK并发AQS系列(五)
鉴于自旋锁的不足,Craig,Landin,Hagersten发明了CLH锁。而在CLH锁核心思想的影响下,Java并发包的基础框架AQS以CLH锁作为基础而设计,其中主要是考虑到CLH锁更容易实现取消与超时功能。 节点的结构与节点等待机制。在结构上引入了头结点和尾节点,他们分…
看图轻松理解数据结构与算法系列(快速排序)
JDK并发AQS系列(四)
前面说到用自旋方式来获取锁,能有效避免线程挂起和恢复。但它也有不足之处: 仅适用于占用时间短、颗粒度很小的情景。 需要硬件级别的原子操作。 它无法保证公平性。 每次读写操作需要同步每个处理器的缓存。 鉴于自旋锁的不足,Craig,Landin, Hagersten发明了CLH锁…
看图轻松理解数据结构与算法系列(红黑树)
JDK并发AQS系列(三)
在数据竞争情况下,一个线程只有在成功获取锁后才能继续往下执行,当离开竞争区域时将释放锁,释放的锁供其他即将进入数据竞争区域的线程获取。 同步器一般用acquire和release方法执行获取释放锁操作,acquire方法包括的逻辑是先尝试获取锁,成功则往下执行,否则把线程放到等…
看图轻松理解数据结构与算法系列(合并排序)
JDK并发AQS系列(二)
在研究JDK中AQS时,会发现这个类很多地方都使用了CAS操作,在并发实现中CAS操作必须具备原子性,而且是硬件级别的原子性,java被隔离在硬件之上,明显力不从心,这时为了能直接操作操作系统层面,肯定要通过用C++编写的native本地方法来扩展实现。JDK提供了一个类来满足…
看图轻松理解数据结构与算法系列(NoSQL存储-LSM树)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 LSM树,即日志结构合并树(Log-Structured Merge-Tree)。其实它…
JDK并发AQS系列(一)
1995年sun公司发布了第一个java语言版本,可以说从jdk1.1到jdk1.4期间java的使用主要是在移动应用和中小型企业应用中,在此类领域中基本不用设计大型并发场景,当然也没有大型互联网公司使用java,因为担心它本身的性能。 在互联网及服务器硬件迅猛的发展下,sun…
看图轻松理解数据结构与算法系列(希尔排序)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 希尔排序是希尔(Donald Shell)提出的一种排序方法,也属于插入排序,但是简单插…
浅聊卷积神经网络的发展
卷积神经网络的发展主要是为了解决人类视觉问题,不过现在其它方向也都会使用。发展历程主要从Lenet5->Alexnet->VGG->GooLenet->ResNet等。 上世界80年代发明了卷积层,但由于硬件限制无法构建复杂网络,直到后面90年代才开始有实践。 1998年LeC…
AIOps核心技术和算法要点
AIOps已经逐渐兴起,AI算法已较为成熟,使之与运维结合到了一起,下面列出AIOps相关技术和算法要点,有空了再展开写,懂大数据和机器学习的基本都知道各个组件及算法的作用。
看图轻松理解数据结构与算法系列(Trie树)
看图轻松理解数据结构与算法系列(冒泡排序)
推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 冒泡排序是一种很简单的排序算法,主要思想就是不断走访待排序序列,每次只比较两个相邻元素,…
看图轻松理解数据结构与算法系列(B树的删除)
删除操作比较复杂,主要是因为删除的项可能在叶子节点上也可能在非叶子节点上,而且删除后可能导致不符合B树的规定,这里暂且称之为导致B树不平衡,于是要进行一些合并、左旋、右旋等操作,使之符合B树的规定(即让B树平衡)。另外,如果是删除非叶子节点项需要先找到中序前驱来替换。 直接删除…