电影<<社交网络>>中的"FaceMash"算法 发表于 2017-07-19 | 分类于 Algorithms , Other | | 阅读次数 最近在看<<社交网络>>时,发现了一个用于投票排名的算法,自己折腾实现了一下. 在影片中,卷西饰演的扎克伯格在被妹子甩了之后(其实是他自己直男癌),一气之下黑了附近女生宿舍的照片数据库打算做一个FaceMash(通过投票的方式来选出漂亮的女生,同时它也是Facebook ... 阅读全文 »
图的那点事儿(1)-无向图 发表于 2017-07-18 | 分类于 Algorithms , Graph | | 阅读次数 在数学中,一个图(Graph)是表示物件与物件之间关系的方法,是图论的基本研究对象.一个图是由顶点(Vertex)与连接这些顶点的边(Edge)组成的. 图论作为数学领域中的一个重要分支已经有数百年的历史了.人们发现了图的许多重要而实用的性质,发明了许多重要的算法,给你一个图(Graph)你可以联想 ... 阅读全文 »
什么是动态规划? 发表于 2017-06-27 | 分类于 Algorithms , 动态规划 | | 阅读次数 概述 动态规划(Dynamic Programming)是一种分阶段求解决策问题的数学思想,它通过把原问题分解为简单的子问题来解决复杂问题.动态规划在很多领域都有着广泛的应用,例如管理学,经济学,数学,生物学. 动态规划适用于解决带有最优子结构和子问题重叠性质的问题. 最优子结构 : 即是局部最优 ... 阅读全文 »
红黑树那点事儿 发表于 2017-06-16 | 分类于 Algorithms , 数据结构 , Tree | | 阅读次数 概述 红黑树是一种自平衡二叉查找树,它相对于二叉查找树性能会更加高效(查找、删除、添加等操作需要O(log n),其中n为树中元素的个数),但实现较为复杂(需要保持自身的平衡). 性质 红黑树与二叉查找树不同,它的节点多了一个颜色属性,每个节点非黑即红,这也是它名字的由来. 红黑树的节点定义如以下 ... 阅读全文 »
深入浅出排序算法(3)-快速排序 发表于 2017-06-14 | 分类于 Algorithms , 排序算法 | | 阅读次数 概述 快速排序与归并排序一样也是基于分治算法的排序算法.所以它的实现方法也与其他的分治算法一样,需要进行分解子任务,处理子任务,归并子任务这些步骤. 但快速排序与归并排序不同,它是一种原地排序算法(不需要额外的辅助数组),且快速排序不使用中间值来分解任务,而是使用划分函数. 算法过程 从数组中挑 ... 阅读全文 »
深入浅出排序算法(2)-归并排序 发表于 2017-06-12 | 分类于 Algorithms , 排序算法 | | 阅读次数 概述 归并排序是基于分治算法实现的一种排序算法,它将数组分割为两个子数组,然后对子数组进行排序,最终将子数组归并为有序的数组. 归并排序的时间复杂度为O(n log n),空间复杂度为O(1),并且它是稳定的排序算法(所谓稳定即是不影响值相等元素的相对次序). 算法过程 首先,归并排序需要将一个 ... 阅读全文 »
深入浅出排序算法(1)-堆排序 发表于 2017-06-09 | 分类于 Algorithms , 排序算法 | | 阅读次数 概述 堆排序即是利用堆这个数据结构来完成排序的.所以,要想理解堆排序就要先了解堆. 堆 堆(Heap)是一种数据结构,它可以被看做是一棵树的数组对象.一个二叉堆拥有以下性质. 父节点k的左子节点在数组中的索引位置为2 * k + 1. 父节点k的右子节点在数组中的索引位置为2 * k + 2. ... 阅读全文 »
IoC与AOP的那点事儿 发表于 2017-06-07 | 分类于 后端 , Java , Spring | | 阅读次数 IoC 控制反转(Inversion of Control)是OOP中的一种设计原则,也是Spring框架的核心.大多数应用程序的业务逻辑代码都需要两个或多个类进行合作完成的,通过IoC则可以减少它们之间的耦合度. 实现方法 IoC的主要实现方法有两种,依赖注入与依赖查找. 依赖注入 : 应用程 ... 阅读全文 »
谈谈如何实现一个非阻塞的线程安全的集合 发表于 2017-05-29 | 分类于 后端 , 多线程 , CAS | | 阅读次数 概述 众所周知,想要在java中要实现一个线程安全的类有很多方法.最简单直接的即是使用synchronized关键字或ReentrantLock. 但是,这两种同步方法都是基于锁的,基于锁的同步方法是阻塞的,即未争夺到锁的线程需要阻塞等待(或挂起)直到锁可用. 这种方法具有一些明显的缺点: 被阻塞 ... 阅读全文 »
《Algorithms,4th Edition》读书笔记-散列表 发表于 2017-04-13 | 分类于 Algorithms , 数据结构 , HashTable | | 阅读次数 概述 散列表(Hash Table,也叫哈希表),它是根据键而直接访问在内存存储位置的数据结构.也可以说是用一个数组来实现的无序的符号表,将键作为数组的索引而数组中键i处存储的就是它对应的值. 散列表通过散列函数将键转化为数组的索引来访问数组中的键值对. 在散列表的算法中,最重要的两个操作如下. ... 阅读全文 »