随笔分类 -  算法

摘要:这篇文章主要是记录HanLP标准分词算法整个实现流程。 HanLP的核心词典训练自人民日报2014语料,语料不是完美的,总会存在一些错误。这些错误可能会导致分词出现奇怪的结果,这时请打开调试模式排查问题: 那什么是语料呢?通俗的理解,就是HanLP里面的二个核心词典。假设收集了人民日报若干篇文档,通 阅读全文
posted @ 2019-07-27 15:01 大熊猫同学 阅读(7058) 评论(0) 推荐(0) 编辑
摘要:由字典树想到的 字典树 双数组树 AC自动机双数组树 基于数组实现的字典树 基于数组实现的字典树,每个节点都有一个长度为R的数组。空间复杂度高。 查找成功的时间复杂度为O(logN) 基于HashMap实现的字典树 使用HashMap来保存所有的孩子节点,当孩子节点很多时,Map不可避免地存在Has 阅读全文
posted @ 2018-12-30 22:06 大熊猫同学 阅读(350) 评论(0) 推荐(0) 编辑
摘要:一,算法介绍 在CS124课程的第一周提到 求解两个字符串相似度的算法 Minimum Edit Distance(最短编辑距离)算法。该算法在NLP(自然语言处理)中也会用到。 如何定义相似度呢?任给两个字符串X 和Y,使用以下三种操作将 字符串X 变到 字符串Y :①插入(Insert)操作;② 阅读全文
posted @ 2017-09-02 16:40 大熊猫同学 阅读(4096) 评论(0) 推荐(0) 编辑
摘要:1,问题描述 给定一个整数N,该整数的二进制权值定义如下:将该整数N转化成二进制表示法,其中 1 的个数即为它的二进制权值。 比如:十进制数1717 的二进制表示为:0000 0110 1011 0101 故它的二进制权值为7(二进制表示中有7个1) 现在要求一个比N大,且最靠近N的数,且这个数的二 阅读全文
posted @ 2016-09-24 16:18 大熊猫同学 阅读(1406) 评论(0) 推荐(1) 编辑
摘要:一,问题描述 给定两个整型数组,找出这两个数组中的最大的公共元素。注意条件:①公共元素 ②最大的公共元素 比如:arr1={8,2,9,6,18,7,25,28} arr2={6,39,4,9,25,18,36,12}.假设 arr1 的长度为M,arr2的长度为N 这两个数组的最大公共元素是:25 阅读全文
posted @ 2016-09-15 20:16 大熊猫同学 阅读(1965) 评论(2) 推荐(0) 编辑
摘要:一,问题描述 给定一个背包,已知背包的最大承重为packageWeight,再给出若干件(numbers件)物品,已经每件物品的重量和对应的价值。 物品的重量存储在weight[]数组中,物品的价值存储在value[]数组中。 现在要求:应该挑选哪几件物品,使得背包装下最大的价值(注意:装的物品的重 阅读全文
posted @ 2016-08-31 19:31 大熊猫同学 阅读(12595) 评论(0) 推荐(0) 编辑
摘要:现在 有10亿个int型的数字(JAVA中 int 型占4B),以及一台可用内存为1GB的机器,如何找出这10亿个数字的中位数? 中位数定义:数字排序之后,位于中间的那个数。比如将10亿个数字进行排序(位置从1到10亿),排序之后,位于第5亿个位置的那个数 就是中位数。 关于中位数,可参考:快速排序 阅读全文
posted @ 2016-08-13 22:34 大熊猫同学 阅读(19640) 评论(0) 推荐(5) 编辑
摘要:一,寻路问题介绍 正如组合问题与动态规划的联系之应用提到的从起点(0,0)到终点(X,Y)一共有多少种走法。与之相似的另一个问题是如何找到从(0,0)到(X,Y)的路径? 首先对问题建模。使用一个矩阵(二维数组)的下标 表示 各个点的坐标。矩阵元素只取 0 或者 1,0 表示此坐标是一个可达的正常顶 阅读全文
posted @ 2016-07-25 20:58 大熊猫同学 阅读(5016) 评论(1) 推荐(0) 编辑
摘要:一,LRU算法介绍 LRU是内存分配中“离散分配方式”之分页存储管理方式中用到的一个算法。每个进程都有自己的页表,进程只将自己的一部分页面加载到内存的物理块中,当进程在运行过程中,发现某页面不在物理内存块中(发生缺页异常)就需要从磁盘把相应的页面调入内存。而若内存已经满了的情况下,需要将内存中暂时不 阅读全文
posted @ 2016-07-20 11:50 大熊猫同学 阅读(4384) 评论(0) 推荐(0) 编辑
摘要:一,容斥原理 设S是一个集合,Ai 是S 中具有性质 Pi 的元素组成的子集合。那么,S中既不具有性质P1,也不具有性质P2,...更不具有性质Pn 的元素个数为: 二,容斥原理计算 有限制的重组合问题 ①什么是有限制的重组合问题?(重组合就是,某个元素可重复选择) 从集合{k1·b1,k2·b2, 阅读全文
posted @ 2016-07-17 16:44 大熊猫同学 阅读(1633) 评论(0) 推荐(0) 编辑
摘要:一,加法原理与乘法原理 加法原理与乘法原理是排列与组合的基础。加法原理本质上是分类,乘法原理本质上是分步。 分类,就是把一个集合(某事物)分成互不相交的若干独立的部分。比如,概率论中的全概率公式就将事件分成”全划分“ 分类思想可以简化程序的时间复杂度。比如:最短路径算法-Dijkstra算法的应用之 阅读全文
posted @ 2016-07-09 21:06 大熊猫同学 阅读(4260) 评论(0) 推荐(0) 编辑
摘要:一,介绍 本文实现带权图的最短路径算法。给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度。在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带权的。不带权的Dijkstra算法要简单得多(可参考我的另一篇:无向图的最短路径算法JAVA实现); 阅读全文
posted @ 2016-07-09 09:37 大熊猫同学 阅读(19294) 评论(0) 推荐(1) 编辑
摘要:一,问题描述 给定一个数组,求解该数组中有多少组逆序对。比如 [7,5,6,4]一共有五对逆序对。分别是:(7,6),(7,5),(7,4),(6,4),(5,4) 二,算法分析 有两种方法来求解逆序对 的数目。一种是,对数组中的每个元素,都与它后面的元素进行比较,若后面的元素比它小,则找到一个逆序 阅读全文
posted @ 2016-06-17 16:57 大熊猫同学 阅读(1204) 评论(0) 推荐(0) 编辑
摘要:本文记录快速排序算法的一个精美实现,关于其中的一些优化或者思路请参考如下资料: 快速排序中的分割算法的解析与应用 http://www.cnblogs.com/hapjin/p/5518922.html http://blog.csdn.net/hapjin/article/details/4978 阅读全文
posted @ 2016-06-16 12:00 大熊猫同学 阅读(782) 评论(0) 推荐(0) 编辑
摘要:一,分割(partition)算法介绍 所谓分割算法,先选定一个枢轴元素,然后 将数组中的元素分成两部分:比枢轴元素小的部分都位于枢轴元素左边;比枢轴元素大的部分都位于枢轴元素右边 此时,枢轴元素在数组中的位置就被“永久地确定”下来了 将整个数组排序,该枢轴元素的位置不会变化。 另外,枢轴元素的选取 阅读全文
posted @ 2016-06-15 13:16 大熊猫同学 阅读(4354) 评论(0) 推荐(0) 编辑
摘要:一,问题描述 给定若干个字符,求解 这些字符能够表示的最多组合个数。比如{'a','b','c'} 一共有七种组合。(每种组合没有重复的字符 且 组合的种数与顺序无关,如 ab 和 ba 是同一种组合) a、b 、c 、ab 、ac 、bc 、abc 其实,求组合个数,可以用公式来求解:具给定 n种 阅读全文
posted @ 2016-06-14 11:58 大熊猫同学 阅读(3612) 评论(0) 推荐(0) 编辑
摘要:一,问题描述 假设有 m 种面值不同的硬币,存储在 coinsValues数组中,现需要使用这些硬币来找钱,各种硬币的使用个数不限。 求对于给定的钱数N,我们最多有几种不同的找钱方式。硬币的顺序并不重要。 二,动态规划分析 为了更好的分析,先对该问题进行具体的定义:将用来找零的硬币的面值存储在一个数 阅读全文
posted @ 2016-06-13 10:25 大熊猫同学 阅读(8603) 评论(2) 推荐(0) 编辑
摘要:一,问题描述 给定一组硬币数,找出一组最少的硬币数,来找换零钱N。 比如,可用来找零的硬币为: 1、3、4 待找的钱数为 6。用两个面值为3的硬币找零,最少硬币数为2。而不是 4,1,1 因此,总结下该问题的特征:①硬币可重复多次使用。②在某些情况下,该问题可用贪心算法求解。具体可参考:某种 找换硬 阅读全文
posted @ 2016-06-12 21:38 大熊猫同学 阅读(23488) 评论(1) 推荐(2) 编辑
摘要:之所以再写一篇Blog,是因为现实中很多问题都可以转化成“找换硬币”问题 和 “0-1”背包问题。因此,需要细细理解。 其次,在“参考资料”中汇总关于 贪心算法与动态规划的一些Blog及学习资料。 区别: 其实最大的区别就是:找换硬币问题中的 某类硬币 是可以多次选择的。而对于0-1背包问题,某物品 阅读全文
posted @ 2016-06-11 17:06 大熊猫同学 阅读(1963) 评论(0) 推荐(0) 编辑
摘要:一,问题介绍 最近一直在看贪心算法的正确性证明(如何证明贪心算法获得的解一定是最优解),感觉“剪枝”技巧用得比较多。再看了下《算法导论》中贪心算法一章里面的一个练习 找换硬币问题。这个问题对于某些 面值的硬币 是有最优解的,故记录下其中的一些证明思路。 考虑用最少的硬币数 来找 n 分钱的问题,假设 阅读全文
posted @ 2016-06-11 16:46 大熊猫同学 阅读(13797) 评论(4) 推荐(0) 编辑